Ret2ret & Reo2pop
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
この技術の主な目的は、スタック内の既存のポインタを悪用してASLRをバイパスしようとすることです。
基本的に、スタックオーバーフローは通常文字列によって引き起こされ、文字列はメモリ内の最後にヌルバイトで終わります。これにより、スタック内に既に存在するポインタが指す場所を減らすことができます。したがって、スタックに0xbfffffdd
が含まれている場合、このオーバーフローはそれを0xbfffff00
に変えることができます(最後のゼロバイトに注意)。
そのアドレスがスタック内のシェルコードを指している場合、ret
命令にアドレスを追加することでそのアドレスにフローを到達させることが可能です。
したがって、攻撃は次のようになります:
NOPスレッド
シェルコード
ret
へのアドレスでEIPからスタックを上書きする(RETスレッド)
文字列によって追加された0x00がスタックのアドレスを変更し、NOPスレッドを指すようにします
このリンクを参照すると、脆弱なバイナリの例が見られ、こちらにはエクスプロイトがあります。
変更したくないスタック内の完璧なポインタを見つけた場合(ret2ret
では最終的な最下位バイトを0x00
に変更します)、同じret2ret
攻撃を実行できますが、RETスレッドの長さは1短くする必要があります(最終的な0x00
が完璧なポインタの直前のデータを上書きするため)、そしてRETスレッドの最後のアドレスは**pop <reg>; ret
**を指す必要があります。
このようにして、完璧なポインタの前のデータがスタックから削除され(これは0x00
によって影響を受けるデータです)、最終的なret
はスタック内の完璧なアドレスを指すことになります。
このリンクを参照すると、脆弱なバイナリの例が見られ、こちらにはエクスプロイトがあります。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)