Ret2ret & Reo2pop

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

Ret2ret

この技術の主な目的は、スタック内の既存のポインタを悪用してASLRをバイパスしようとすることです。

基本的に、スタックオーバーフローは通常文字列によって引き起こされ、文字列はメモリ内の最後にヌルバイトで終わります。これにより、スタック内に既に存在するポインタが指す場所を減らすことができます。したがって、スタックに0xbfffffddが含まれている場合、このオーバーフローはそれを0xbfffff00に変えることができます(最後のゼロバイトに注意)。

そのアドレスがスタック内のシェルコードを指している場合、ret命令にアドレスを追加することでそのアドレスにフローを到達させることが可能です。

したがって、攻撃は次のようになります:

  • NOPスレッド
  • シェルコード
  • retへのアドレスでEIPからスタックを上書きする(RETスレッド)
  • スタックのアドレスを指すようにするために文字列によって追加された0x00

このリンクを参照すると、脆弱なバイナリの例を見ることができ、こちらではエクスプロイトを見ることができます。

Ret2pop

変更したくないスタック内の完璧なポインタを見つけた場合ret2retでは最終的な最下位バイトを0x00に変更します)、同じret2ret攻撃を実行できますが、RETスレッドの長さは1短くする必要があります(そのため、最終的な0x00が完璧なポインタの直前のデータを上書きします)、そしてRETスレッドの最後のアドレスは**pop <reg>; ret**を指す必要があります。
このようにして、完璧なポインタの前のデータがスタックから削除されます(これは0x00によって影響を受けるデータです)し、最終的なretはスタック内の完璧なアドレスを指します

このリンクを参照すると、脆弱なバイナリの例を見ることができ、こちらではエクスプロイトを見ることができます。

References

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