¿Por qué este desbordamiento de búfer tiene carga útil y sistema- y salida- y BINSH?

0

Estoy siguiendo un tutorial para escribir un desbordamiento de búfer simple. Tengo conocimiento (básico) de montaje, y la pila. He escrito un desbordamiento de búfer basado en pila antes y lo entendí. El programa que estoy explotando esta vez tiene habilitado NX, lo que significa que no es posible ejecutar código desde la pila o una variable de entorno. El autor de este tutorial sugiere declarar una variable de entorno:

export $BINSH="/bin/sh"

y la carga útil suministrada al desbordamiento del búfer será la dirección del 'sistema' en el programa, seguida de la dirección de la 'salida' en el programa y, finalmente, la dirección de nuestra variable de entorno:

payload is : &system - &exit - &BINSH

Me las arreglé para hacer funcionar el exploit pero no entiendo la teoría detrás de la carga útil. Desafortunadamente, no se explica en el tutorial (que se puede encontrar aquí ).

¿Por qué sobrescribo EIP con la dirección al 'sistema' (y a qué corresponde esta dirección)?

¿De qué manera la ejecución de la dirección de mi variable de entorno que contiene / bin / sh como la tercera palabra en la carga útil?

PS: Linux, 32bit. inteligencia

    
pregunta Juicy 04.02.2014 - 02:49
fuente

1 respuesta

1

Esta es una clase de ataque conocida como return-to-libc que es un método de omisión DEP. Esto funciona al llamar a funciones existentes en una biblioteca compartida que sabe es ejecutable. En este caso, el exploit llama a la función system () .

Las funciones se pasan los parámetros en la pila. Al controlar la pila, puede controlar qué funciones se pasan a la llamada system() . En este caso, le indica a system() que llame a lo que sea que esté en la variable de entorno que estableció a /bin/sh . Esencialmente, estás llamando a system(/bin/sh) que genera un shell. Boom, explotado.

    
respondido por el Ayrx 04.02.2014 - 04:40
fuente

Lea otras preguntas en las etiquetas