Ret2plt
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
この技術の目的は、PLTから関数のアドレスを漏洩させることでASLRをバイパスできるようにすることです。例えば、libcからputs
関数のアドレスを漏洩させると、libc
のベースがどこにあるかを計算し、**system
**などの他の関数にアクセスするためのオフセットを計算できます。
これは、pwntools
ペイロードを使用して実行できます(こちらから):
注意してほしいのは、puts
(PLTからのアドレスを使用)がGOT(グローバルオフセットテーブル)にあるputs
のアドレスで呼び出されることです。これは、puts
がputs
のGOTエントリを印刷する時点で、このエントリがメモリ内のputs
の正確なアドレスを含むためです。
また、エクスプロイトでmain
のアドレスが使用されていることにも注意してください。これにより、puts
が実行を終了すると、バイナリは終了するのではなくmain
を再度呼び出します(したがって、漏洩したアドレスは引き続き有効です)。
これが機能するためには、バイナリはPIEでコンパイルされていない必要があります、またはPLT、GOT、main
のアドレスを知るためにPIEをバイパスするための漏洩を見つける必要があります。そうでなければ、まずPIEをバイパスする必要があります。
このバイパスの完全な例はこちらにあります。これはその例からの最終的なエクスプロイトでした:
64ビット、ASLRが有効だがPIEはなし、最初のステップはオーバーフローを満たしてカナリアのバイト0x00まで到達し、その後putsを呼び出してリークすることです。カナリアを使ってROPガジェットを作成し、putsを呼び出してGOTからputsのアドレスをリークし、その後system('/bin/sh')
を呼び出すROPガジェットを作成します。
64ビット、ASLRが有効、カナリアなし、子関数からのメインでのスタックオーバーフロー。ROPガジェットを使ってputsを呼び出し、GOTからputsのアドレスをリークし、その後one gadgetを呼び出します。
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)