Tecniche di stackpivoting

2

Sto praticando lo sviluppo degli exploit e uno degli scenari con cui ho maggiori difficoltà è lo stack pivoting oltre a "ADD ESP, XXX" o qualcosa del genere.

La domanda è, durante la scrittura di una catena ROP, quando non si dispone di alcun gadget utilizzabile che disturbi il registro ESP (come ADD, MOV qualcosa in esso) cosa posso provare a spostare ESP nel buffer e quindi avviare la catena ROP?

Im su Intel IA-32 in ambiente Windows (7+ con DEP abilitato).

    
posta Kartone 22.09.2017 - 11:02
fonte

1 risposta

2

Supponendo che stai costruendo una catena ROP che ha bisogno di manipolare lo stack, puoi sempre optare per gadget semanticamente equivalenti, ad es. PUSH / POP, MOV ESP XXX, (SUB, ADD) Istruzioni ESP per costruire lo stack: link link

Inoltre, per XXX / costanti effettive (immediatamente) per SUB / ADD ESP XXX, puoi sempre LEA un registro quindi anche MOV ESP, XXX / REG:

link

Infine, a seconda della DLL / EXE alla quale stai cercando i gadget, se non puoi facilmente AGGIUNGERE / SUB ESP potresti fare un sacco di cose (usando registri volatili):

;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

È anche possibile ottenere valori di fantasia e mov in un registro volatile, SHL / SHR / ROL / ROR e quindi utilizzare LEA / PUSH. Spetta a te essere creativo!

    
risposta data 06.10.2017 - 17:20
fonte

Leggi altre domande sui tag