web-dev-qa-db-ja.com

ファザーでクラッシュする。それで?

!exploitableによって報告された脆弱性のタイプを特定する方法とそこからどこへ行くかに関して、いくつかの優れたチュートリアルの方向に誰かが私を向けることができますか?

基本的に、私は小さなファジングラボのセットアップを用意しており、エクスプロイトの研究開発に関する理解を広げようとしています。だから私はクラッシュするアプリを持っています、!ExploitableとしてのExploitableレポートと書き込みアクセス違反があります。現時点での私の問題は、どのような問題が発生しているか、またどのように対処すればよいかわからないことです。

多くのエクスプロイトチュートリアルがありますが、それらはすべてバッファオーバーフローを示しています...これがバッファオーバーフローであるかどうかはわかりません。 Immunity Debuggerでクラッシュを引き起こすファジングファイルを開くと、!exploitableレポートと同じメモリアドレスで同じクラッシュが発生します。クリーンなファイルをbindifferアプリケーションでファジングされたファイルと比較して、クラッシュを引き起こしている正確な16進数の変更を確認できますが、エクスプロイトコードをまとめ始めるために、ここから先に進む方法についていくつかのアドバイスを使用できます。誰かが私にそれについてさらに洞察を提供し、そこから意味のある情報を収集する方法を提供できるように、私は!exploitableの読み出しを添付しました。

(834.b7c): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=7fffffff ebx=00726afc ecx=0000c9f0 edx=02adc080 esi=02957b18 edi=00000000
eip=005ec57f esp=0187f810 ebp=0187f978 iopl=0         nv up ei pl nz ac pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010216
*** WARNING: Unable to verify timestamp for image00400000
*** ERROR: Module load completed but symbols could not be loaded for image00400000
image00400000+0x1ec57f:
005ec57f c704ca00000000  mov     dword ptr [edx+ecx*8],0 ds:0023:02b41000=????????
0:000> r;!exploitable -v;q
eax=7fffffff ebx=00726afc ecx=0000c9f0 edx=02adc080 esi=02957b18 edi=00000000
eip=005ec57f esp=0187f810 ebp=0187f978 iopl=0         nv up ei pl nz ac pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010216
image00400000+0x1ec57f:
005ec57f c704ca00000000  mov     dword ptr [edx+ecx*8],0 ds:0023:02b41000=????????
HostMachine\HostUser
Executing Processor Architecture is x86
Debuggee is in User Mode
Debuggee is a live user mode debugging session on the local machine
Event Type: Exception
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
Exception Faulting Address: 0x2b41000
First Chance Exception Type: STATUS_ACCESS_VIOLATION (0xC0000005)
Exception Sub-Type: Write Access Violation

Exception Hash (Major/Minor): 0x00020e6f.0x435e5a76

Stack Trace:
image00400000+0x1ec57f
image00400000+0x1ebe05
image00400000+0x1eb966
image00400000+0x1eb7f3
image00400000+0x64405
image00400000+0x63eae
image00400000+0x63d2f
image00400000+0x41ca5
image00400000+0x39022
image00400000+0x5d9fa
image00400000+0x5e63f
image00400000+0x38862
image00400000+0x3032
image00400000+0x11d91
Instruction Address: 0x00000000005ec57f

Description: User Mode Write AV
Short Description: WriteAV
Exploitability Classification: EXPLOITABLE
Recommended Bug Title: Exploitable - User Mode Write AV starting at    
image00400000+0x00000000001ec57f (Hash=0x00020e6f.0x435e5a76)

User mode write access violations that are not near NULL are exploitable. 
quit:
5
Stev0

Corelanには、ファジングクラッシュから悪用までの優れた記事がいくつかあります。

https://www.corelan.be/index.php/2013/02/26/root-cause-analysis-memory-corruption-vulnerabilities/ および https:// www。 corelan.be/index.php/2013/07/02/root-cause-analysis-integer-overflows/

彼らの方法論は、ファジングされたメッセージの生成に使用された元のシードファイルを見て、それをゆっくりとファジングされたメッセージに変更して、どの変更がクラッシュの原因であるかを特定する場合のようです。

完了した後は、デバッガーを接続して実行し、変更がプログラムの動作に影響を与える場所を監視することで、アプリケーションがクラッシュする原因を特定します。次に、どのレジスタを保持できるかを確認します(最終的にはEIPを上書きしようとします)。または、ヒープベースのクラッシュの場合は、いくつかの関数ポインターを上書きして、ペイロードを指すようにできますか?.

5
Colin Cassidy