it-swarm-pt.tech

Técnicas de Stackpivoting

Estou praticando o desenvolvimento de exploit e um dos cenários que tenho mais dificuldades é o pivotamento da pilha além do "ADD ESP, XXX" ou algo parecido.

A questão é, durante a escrita de uma cadeia ROP, quando você não tem nenhum dispositivo utilizável que mexa com ESP (como ADICIONAR, MOV algo nele) o que posso tentar mover ESP de volta ao meu buffer e então iniciar a cadeia ROP?

Estou em um Intel IA-32 em um ambiente Windows (7+ com DEP habilitado).

2
Kartone

Supondo que você esteja construindo uma cadeia ROP que precisa manipular a pilha, você sempre pode ir para dispositivos semanticamente equivalentes, por exemplo, Push/POP, MOV ESP XXX, (SUB, ADD) ESP instruções para construir a pilha: https://www.corelan.be/index.php/2010/06/ 16/exploit-writing-tutorial-part-10-chaining-dep-with-rop-the-rubikstm-cube/# chainingbasicshttp://neilscomputerblog.blogspot.com/2012/06/stack -pivoting.html

Além disso, para XXX/constantes reais (imediatas) para SUB/ADD ESP XXX, você pode sempre deixar um registro e até mesmo MOV ESP, XXX/REG:

https://web.archive.org/web/20171107030509/http://x86.renejeschke.de/html/file_module_x86_id_176.html

Por último, dependendo do DLL/EXE em que você está procurando gadgets, se você não conseguir ADD/SUB ESP facilmente, poderá fazer uma série de coisas (usando registros voláteis):

;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

Você pode até obter valores extravagantes e mov em um registrador volátil, SHL/SHR/ROL/ROR e então usar LEA/Push. A criatividade depende de você!

2
grepNstepN