Print Stack Canary
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
スタックオーバーフローに脆弱なプログラムがスタックオーバーフローの一部を指すputs関数を実行できる状況を想像してください。攻撃者はカナリアの最初のバイトがヌルバイト(\x00
)であり、残りのカナリアがランダムなバイトであることを知っています。次に、攻撃者はカナリアの最初のバイトまでスタックを上書きするオーバーフローを作成することができます。
その後、攻撃者はペイロードの中間でputs機能を呼び出し、カナリアをすべて印刷します(最初のヌルバイトを除く)。
この情報を使って、攻撃者はカナリアを知っている(同じプログラムセッション内で)新しい攻撃を作成して送信することができます。
明らかに、この戦術は非常に制限されており、攻撃者はカナリアを抽出するために自分のペイロードの内容を印刷できる必要があります。そして、新しいペイロードを作成し(同じプログラムセッション内で)、実際のバッファオーバーフローを送信できる必要があります。
CTFの例:
64ビット、ASLRが有効ですがPIEはなし、最初のステップはカナリアのバイト0x00までオーバーフローを埋めてからputsを呼び出して漏洩させることです。カナリアを使ってROPガジェットを作成し、putsを呼び出してGOTからputsのアドレスを漏洩させ、次にsystem('/bin/sh')
を呼び出すROPガジェットを作成します。
32ビット、ARM、relroなし、カナリア、nx、pieなし。カナリアを漏洩させるためにputsを呼び出すオーバーフロー + ROPチェーンでsystem
を呼び出すためにr0(引数/bin/sh
)とpc(systemのアドレス)をポップします。
フォーマット文字列によって提供される任意の読み取りを使用すると、カナリアを漏洩させることができるかもしれません。この例を確認してください:https://ir0nstone.gitbook.io/notes/types/stack/canaries そして、任意のメモリアドレスを読み取るためにフォーマット文字列を悪用することについては:
Format Stringsこのチャレンジは、スタックからカナリアを読み取るために非常にシンプルな方法でフォーマット文字列を悪用しています。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)