web-dev-qa-db-ja.com

Stackpivotingテクニック

私はエクスプロイト開発を実践しており、私が最も困難に直面しているシナリオの1つは、「ADD ESP、XXX」などのほかにスタックピボットです。

問題は、ROPチェーンの作成中に、ESPレジスター(ADD、MOVのようなもの)に干渉する使用可能なガジェットがない場合、何を移動しようとすることができるかです) ESPバッファに戻り、ROPチェーンを開始しますか?

Windows環境のIntel IA-32(DEPを有効にした7以降)でのIM。

2
Kartone

スタックを操作する必要があるROPチェーンを構築していると仮定すると、意味的に同等のガジェットをいつでも使用できます。プッシュ/ POP、MOV ESP XXX、(SUB、ADD)ESPスタックを構築するための指示: 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

また、SUB/ADD ESP XXXのXXX /実際の定数(イミディエート)の場合、常にレジスタをLEAでき、次にMOV ESP、XXX/REGでも可能です。

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

最後に、ガジェットを検索しているDLL/EXEに応じて、簡単にADD/SUBを実行できない場合はESP揮発性レジスタを使用して)さまざまなことができます。

;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

ファンシーおよびムーブの値を揮発性レジスタ、SHL/SHR/ROL/RORに取得して、LEA /プッシュを使用することもできます。クリエイティブになるかどうかはあなた次第です!

2
grepNstepN