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をサポートする

基本情報

PIE(Position Independent Executable)としてコンパイルされたバイナリは、プログラムが実行されるたびに異なるメモリ位置にロードされることを意味し、ハードコーディングされたアドレスを防ぎます。

これらのバイナリを悪用するトリックは、相対アドレスを利用することにあります。プログラムの部分間のオフセットは、絶対位置が変わっても同じままです。PIEをバイパスするには、1つのアドレスを漏洩させるだけで済みます。通常は、フォーマットストリング攻撃のような脆弱性を使用してスタックから取得します。アドレスを取得したら、固定オフセットを使って他のアドレスを計算できます。

PIEバイナリを悪用する際の役立つヒントは、基本アドレスが通常000で終わることです。これは、メモリページがランダム化の単位であり、サイズが0x1000バイトであるためです。このアライメントは、エクスプロイトが期待通りに動作しない場合の重要なチェックとなり、正しい基本アドレスが特定されているかどうかを示します。
また、エクスプロイトにこれを使用することもできます。アドレスが**0x649e1024**にあることが漏洩した場合、基本アドレスは0x649e1000であることがわかり、そこから関数や位置のオフセットを計算できます。

バイパス

PIEをバイパスするには、ロードされたバイナリのアドレスを漏洩させる必要があります。これにはいくつかのオプションがあります:

  • ASLRを無効にする: ASLRが無効になっている場合、PIEでコンパイルされたバイナリは常に同じアドレスにロードされるため、PIEは無意味になります。オブジェクトのアドレスは常に同じ場所にあります。
  • 漏洩を与えられる(簡単なCTFチャレンジで一般的、この例を確認
  • スタック内のEBPおよびEIP値をブルートフォースして正しいものを漏洩させる:

BF Addresses in the Stack

参考文献

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をサポートする