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