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