ROP confusión de diseño de carga útil

2

Estaba leyendo un artículo ( exploitresearch.wordpress.com ) sobre el uso de ROP para omitir DEP / ASLR. Cerca del final, él establece los 33 pasos para su carga útil. Estos se presentan en el orden en que las instrucciones del código de shell se escriben en la carga útil final (también se muestra en la última imagen HxD @ offset 304). Estoy un poco confundido por las primeras palabras:

1) 0x100016f0 (pop eax)
2) 0x01a19f7f (a value)
3) 0x10002fd7 (pop ecx)
4) 0x100bcc5a (another value)
5) mov [ecx], eax (*0x100bcc5a = 0x01a9f7f, delta between GetTimeZoneInformation and VirtualProtect)

¿Cómo el pop eax seguido de la dirección de un valor guarda ese valor en eax? Pensé que tenías que presionar el valor y luego pop eax.

    
pregunta Nitro 21.03.2017 - 07:11
fuente

1 respuesta

2

No hay necesidad de realizar ninguna operación de inserción ya que ya controlas la pila. Puede tener los datos que desea almacenar dentro de sus registros ya colocados donde puede realizar operaciones con ellos de manera conveniente.

En ROP, encuentra una serie de fragmentos de código útiles ya presentes dentro de su programa objetivo a los que puede referirse como gadgets, que suelen ser los extremos de las subrutinas normales que realizan las operaciones que necesita para una explotación exitosa. Alinea las direcciones de los dispositivos que desea ejecutar y los datos que desea usar con ellos dentro de una pila falsa en la memoria que controla antes de realizar un "giro de pila" para mover el puntero de pila (especialmente en x86) hacia tus datos.

Después de que el puntero de pila se haya movido a sus datos, el control del programa se perderá en su pila falsa en el siguiente ret . Cuando se ejecuta esta instrucción, la palabra / dirección superior en la pila (0x100016f0 en su ejemplo) se abrirá y se colocará en el contador del programa para redirigirla a un gadget en el extremo de la cola de una función que se parece a pop eax; ret; .

Cuando la siguiente palabra en tu pila es 2) 0x01a19f7f (a value) , tu puntero de pila ya estaría apuntando a estos datos cuando se ejecuta la instrucción pop , almacenando esta palabra dentro de tu registro eax.

Luego, ret para seguir inmediatamente resalta la siguiente dirección del gadget ROP para continuar en ejecución.

    
respondido por el dreamist 21.03.2017 - 13:50
fuente

Lea otras preguntas en las etiquetas