PIE
Reading time: 5 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
基本情報
PIE(Position Independent Executable)としてコンパイルされたバイナリは、プログラムが実行されるたびに異なるメモリ位置にロードされることを意味し、ハードコーディングされたアドレスを防ぎます。
これらのバイナリを悪用するトリックは、相対アドレスを利用することにあります。プログラムの部分間のオフセットは、絶対位置が変わっても同じままです。PIEをバイパスするには、1つのアドレスを漏洩させるだけで済みます。通常は、フォーマットストリング攻撃のような脆弱性を使用してスタックから取得します。アドレスを取得したら、固定オフセットを使って他のアドレスを計算できます。
PIEバイナリを悪用する際の役立つヒントは、基本アドレスが通常000で終わることです。これは、メモリページがランダム化の単位であり、サイズが0x1000バイトであるためです。このアライメントは、エクスプロイトが期待通りに動作しない場合の重要なチェックとなり、正しい基本アドレスが特定されているかどうかを示します。
また、エクスプロイトにこれを使用することもできます。アドレスが**0x649e1024
**にあることが漏洩した場合、基本アドレスは0x649e1000
であることがわかり、そこから関数や位置のオフセットを計算できます。
バイパス
PIEをバイパスするには、ロードされたバイナリのアドレスを漏洩させる必要があります。これにはいくつかのオプションがあります:
- ASLRを無効にする: ASLRが無効になっている場合、PIEでコンパイルされたバイナリは常に同じアドレスにロードされるため、PIEは無意味になります。オブジェクトのアドレスは常に同じ場所にあります。
- 漏洩を与えられる(簡単なCTFチャレンジで一般的、この例を確認)
- スタック内のEBPおよびEIP値をブルートフォースして正しいものを漏洩させる:
- フォーマットストリングのような任意の読み取り脆弱性を使用して、バイナリのアドレスを漏洩させる(例:前の技術のようにスタックから)ことで、バイナリの基本を取得し、そこからオフセットを使用します。ここに例を見つけてください。
参考文献
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。