Técnicas de apilamiento

2

Estoy practicando el desarrollo de exploits y uno de los escenarios con los que más dificultades tengo es la rotación de la pila, además de "ADD ESP, XXX" o algo así.

La pregunta es, durante la escritura de una cadena ROP, cuando no tienes ningún gadget utilizable con el registro ESP (como ADD, MOV algo en ella), ¿qué puedo hacer para volver a poner ESP en mi búfer y así que empieza la cadena ROP?

Estoy en un Intel IA-32 en un entorno Windows (7+ con DEP habilitado).

    
pregunta Kartone 22.09.2017 - 11:02
fuente

1 respuesta

2

Suponiendo que estás construyendo una cadena de ROP que necesita manipular la pila, siempre puedes optar por aparatos semánticamente equivalentes, por ejemplo. PUSH / POP, MOV ESP XXX, (SUB, ADD) ESP instrucciones para construir la pila: enlace enlace

También, para XXX / constantes reales (inmediatas) para SUB / ADD ESP XXX, siempre puede LEA un registro y luego incluso MOV ESP, XXX / REG:

enlace

Por último, dependiendo de la DLL / EXE en la que estés buscando los gadgets, si no puedes AGREGAR / SUBTINIR fácilmente, podrías hacer un montón de cosas (utilizando registros volátiles):

;ADD/INC ESP SEMANTICS EQUIVALENT 
POP EBX      ;semantically same as MOV EBX, ESP; ADD ESP 0x4
XOR EBX, EBX ;zeroes EBX if you wanna reuse the register

;SUB/DEC ESP SEMANTICS EQUIVALENT
PUSH EBX     ;semantically same as MOV ESP, EBX; SUB ESP 0x4

Incluso puede obtener valores de fantasía y movimiento en un registro volátil, SHL / SHR / ROL / ROR y luego usar LEA / PUSH. ¡Todo depende de ti para ser creativo!

    
respondido por el grepNstepN 06.10.2017 - 17:20
fuente

Lea otras preguntas en las etiquetas