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を呼び出してリークさせます。キャナリを使用して、GOTからputsのアドレスをリークさせるためのROPガジェットが作成され、system('/bin/sh')
を呼び出すためのROPガジェットが作成されます。
32ビット、ARM、relroなし、キャナリ、nx、PIEなし。putsを呼び出してキャナリをリークさせ、ROPチェーンを使用してsystem
を呼び出すret2lib呼び出し
フォーマット文字列によって提供されるような任意の読み取りがある場合、キャナリをリークさせることが可能かもしれません。この例をチェックしてください: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)