配列インデックス
Reading time: 4 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を提出してハッキングトリックを共有してください。
基本情報
このカテゴリには、配列のインデックスの処理におけるエラーによって特定のデータを上書きすることが可能になるために発生するすべての脆弱性が含まれています。これは非常に広いカテゴリであり、特定の方法論はありません。なぜなら、エクスプロイトメカニズムは脆弱性の条件に完全に依存するからです。
しかし、いくつかの良い例を見つけることができます:
- https://guyinatuxedo.github.io/11-index/swampctf19_dreamheaps/index.html
- 2つの衝突する配列があります。1つはデータが保存されるアドレス用、もう1つはそのデータのサイズ用です。片方からもう片方を上書きすることが可能で、任意のアドレスをサイズとして指定することができます。これにより、GOTテーブル内の
free
関数のアドレスを書き込み、その後system
のアドレスで上書きし、/bin/sh
を持つメモリからfreeを呼び出すことができます。 - https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html
- 64ビット、nxなし。サイズを上書きして、すべてのものが倍の数として使用され、最小から最大にソートされるようなバッファオーバーフローを引き起こします。そのため、その要件を満たすシェルコードを作成する必要があります。カナリアがその位置から移動しないことを考慮し、最終的にRIPをretへのアドレスで上書きし、以前の要件を満たし、スタックの開始を指す新しいアドレスを持つ最大のアドレスを配置します(プログラムによって漏洩された)。
- https://faraz.faith/2019-10-20-secconctf-2019-sum/
- 64ビット、relroなし、カナリアあり、nxなし、pieなし。スタック内の配列にオフバイワンがあり、ポインタを制御することができます。これにより、WWWを付与します(配列のすべての数の合計を上書きされたアドレスに書き込みます)。スタックは制御されているため、GOTの
exit
アドレスがpop rdi; ret
で上書きされ、スタックにmain
へのアドレスが追加されます(main
に戻るループ)。次に、putsを使用してGOT内のputのアドレスを漏洩させるためのROPチェーンが使用されます(exit
が呼び出されるため、pop rdi; ret
が呼び出され、このチェーンがスタックで実行されます)。最後に、ret2libを実行する新しいROPチェーンが使用されます。 - https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html
- 32ビット、relroなし、カナリアなし、nxなし、pieなし。悪いインデックスを利用して、スタックからlibcとヒープのアドレスを漏洩させます。バッファオーバーフローを利用して、
system('/bin/sh')
を呼び出すret2libを行います(ヒープアドレスはチェックをバイパスするために必要です)。