Print Stack Canary

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

Enlarge printed stack

スタックオーバーフローに脆弱なプログラムスタックオーバーフロー一部を指すputs関数を実行できる状況を想像してください。攻撃者はカナリアの最初のバイトがヌルバイト\x00)であり、残りのカナリアはランダムなバイトであることを知っています。次に、攻撃者はカナリアの最初のバイトまでスタックを上書きするオーバーフローを作成することができます。

その後、攻撃者はペイロードの中間でputs機能を呼び出し、カナリアのすべて印刷します(最初のヌルバイトを除く)。

この情報を使って、攻撃者はカナリアを知っている状態で新しい攻撃を作成して送信することができます(同じプログラムセッション内で)。

明らかに、この戦術は非常に制限されており、攻撃者はペイロードの内容印刷してカナリアを抽出し、その後新しいペイロードを作成して(同じプログラムセッション内で実際のバッファオーバーフローを送信する必要があります。

CTFの例:

  • https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html
  • 64ビット、ASLRが有効ですがPIEはなし、最初のステップはカナリアのバイト0x00までオーバーフローを埋めてからputsを呼び出して漏洩させることです。カナリアを使ってROPガジェットを作成し、putsを呼び出してGOTからputsのアドレスを漏洩させ、次にsystem('/bin/sh')を呼び出すROPガジェットを作成します。
  • https://guyinatuxedo.github.io/14-ret_2_system/hxp18_poorCanary/index.html
  • 32ビット、ARM、relroなし、カナリア、nx、pieなし。カナリアを漏洩させるためにputsを呼び出すオーバーフロー + ROPチェーンでsystemを呼び出すためにr0(引数/bin/sh)とpc(systemのアドレス)をポップします。

Arbitrary Read

フォーマット文字列によって提供される任意の読み取りを使用すると、カナリアを漏洩させることができるかもしれません。この例を確認してください: https://ir0nstone.gitbook.io/notes/types/stack/canaries そして、任意のメモリアドレスを読み取るためにフォーマット文字列を悪用することについては:

Format Strings

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