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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
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 そして、任意のメモリアドレスを読み取るためにフォーマット文字列を悪用することについては:
- https://guyinatuxedo.github.io/14-ret_2_system/asis17_marymorton/index.html
- このチャレンジは、スタックからカナリアを読み取るために非常にシンプルな方法でフォーマット文字列を悪用しています。
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。