クラッシュを探すファジング
オフセットを見つけます
「クラッシュを探すファジング」はCoddyKit上の無料Ethical Hacking Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはEthical Hacking Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ethical Hacking Academyコースには全4レッスンが含まれています。
ファジングとは
ファジングとは、予期しない動作、特にクラッシュを引き起こすために、不正な形式またはサイズの大きい入力をプログラムへ送ることです。クラッシュは、多くの場合、メモリ破壊バグの兆候です。
バッファオーバーフローでは、まず対象をクラッシュさせ、オーバーフローが存在することを確認します。
ワークフロー
古典的なエクスプロイトのワークフローは次のとおりです。
- ファジングしてプログラムをクラッシュさせます。
- リターンアドレスまでの正確なオフセットを見つけます。
- EIPを制御します。
- shellcodeへリダイレクトします。
このレッスンでは最初の2段階を扱います。
デバッガーをアタッチする
クラッシュを観察するには、対象にデバッガー(WindowsではImmunity Debuggerやx64dbg、LinuxではGDBなど)をアタッチします。
プログラムがクラッシュすると、デバッガーにはレジスタの状態、特にEIPが表示されます。これにより、リターンアドレスを上書きできたかどうかが分かります。
入力を段階的に増やして送る
単純なファザーは、プログラムがクラッシュするまで、ますます長い文字列を送信します。一般的な開始方法は、多数の「A」文字(0x41)を送ることです。
クラッシュ後にEIPが41414141を示していれば、リターンアドレスを制御できることを確認できました。
python -c 'print("A"*2000)' | ./vulnクラッシュを確認する
アプリケーションがクラッシュし、EIPが41414141と等しい場合、オーバーフローが保存されたリターンアドレスまで到達しています。
ただし、EIPの前に何バイトあるかはまだ正確には分かりません。すべて同じバイトを送ると、EIPを制御できることは分かりますが、EIPがどこにあるかまでは分かりません。
オフセットを見つける:サイクリックパターン
正確なオフセットを見つけるには、すべて「A」にする代わりに重複しない一意のパターンを送信します。4バイトごとの範囲がすべて異なるため、EIPに入った値からオフセットを特定できます。
Metasploitにはこのためのpattern_create.rbが含まれています。
msf-pattern_create -l 2000オフセットを読み取る
パターンでクラッシュさせた後、EIPの値を確認します。それをpattern_offset.rbに渡すと、EIPの前にある正確なバイト数が返されます。
このオフセットは、リターンアドレスのバイト列の前に置くパディングのサイズです。
msf-pattern_offset -l 2000 -q 39654138オフセットを検証する
必ず検証してください。offsetバイト分の「A」に続けて、4バイトの「B」(0x42)を置いた入力を作成します。EIPが42424242になれば、オフセットは正確です。
この確認により、後で数バイトずれたエラーのデバッグに何時間も費やすことを防げます。
"A"*offset + "B"*4 # EIP should become 42424242ESPを特定する
EIPを制御した後は、クラッシュした瞬間にESPが指している位置も確認します。ESPは通常、上書きされたリターンアドレスの直後、残りのバッファ内を指します。
後でshellcodeを配置するのは、この領域です。
ツールのまとめ
ファジングとパターン生成に役立つツールには、次のものがあります。
- Spikeとboofuzz:ネットワークプロトコル用ファザーです。
- pattern_create / pattern_offset:EIPのオフセットを特定します。
- Immunityのmona.py:パターン、オフセット、問題のある文字のタスクを自動化します。
!mona pattern_create 2000再現性が重要な理由
有用なクラッシュには再現性が必要です。クラッシュを引き起こす正確な入力を保存し、クリーンな状態から再実行してオフセットが安定していることを確認します。
クラッシュに一貫性がない場合、バグが単純なスタックオーバーフローではないか、実行ごとに何らかの条件(タイミング、長さ、内容)が変化している可能性があります。
クイックチェック
サイクリックパターンが同じバイトを並べた文字列より優れている理由を思い出してください。
まとめ
これでクラッシュオフセットの見つけ方が分かりました。
- 入力を増やしながらファジングしてクラッシュを引き起こし、EIP内の
41414141で確認します。 - サイクリックパターンと
pattern_create/pattern_offsetを使って正確なオフセットを見つけます。 - パディングと4バイトの「B」(42424242)で検証します。
- 後でshellcodeを配置するため、ESPが指す位置を確認します。
次はEIPを完全に制御し、実行をリダイレクトします。
よくある質問
「クラッシュを探すファジング」レッスンは無料ですか?
はい。「クラッシュを探すファジング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ethical Hacking Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ethical Hacking Academyコースには全4レッスンが含まれています。
「クラッシュを探すファジング」で何を学びますか?
オフセットを見つけます ブラウザで直接実行するハンズオンコードでEthical Hacking Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ethical Hacking Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのEthical Hacking Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「クラッシュを探すファジング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このEthical Hacking Academyレッスンでコードを書いて実行できますか?
はい。すべてのEthical Hacking Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- メモリとスタック
- クラッシュを探すファジング
- EIPの制御
- シェルコードとエクスプロイト