mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
21 lines
3.5 KiB
Markdown
21 lines
3.5 KiB
Markdown
# 配列インデックス
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
## 基本情報
|
||
|
||
このカテゴリには、配列のインデックスの処理におけるエラーによって特定のデータを上書きすることが可能になるために発生するすべての脆弱性が含まれます。これは非常に広いカテゴリであり、特定の方法論はありません。なぜなら、エクスプロイトメカニズムは脆弱性の条件に完全に依存するからです。
|
||
|
||
しかし、いくつかの素晴らしい**例**を見つけることができます:
|
||
|
||
- [https://guyinatuxedo.github.io/11-index/swampctf19_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19_dreamheaps/index.html)
|
||
- **2つの衝突する配列**があり、一つはデータが保存される**アドレス**用、もう一つはそのデータの**サイズ**用です。片方からもう片方を上書きすることが可能で、任意のアドレスをサイズとして指定することができます。これにより、GOTテーブル内の`free`関数のアドレスを書き込み、その後`system`のアドレスで上書きし、`/bin/sh`を持つメモリからfreeを呼び出すことができます。
|
||
- [https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html)
|
||
- 64ビット、nxなし。サイズを上書きして、すべてのものが倍の数として使用され、最小から最大にソートされるようなバッファオーバーフローを引き起こします。そのため、その要件を満たすシェルコードを作成する必要があります。カナリアがその位置から移動しないようにし、最終的にRIPをretのアドレスで上書きし、以前の要件を満たし、最大のアドレスをスタックの開始を指す新しいアドレスに設定します(プログラムによって漏洩された)。
|
||
- [https://faraz.faith/2019-10-20-secconctf-2019-sum/](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](https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html)
|
||
- 32ビット、relroなし、カナリアなし、nx、pieなし。悪いインデックスを利用して、スタックからlibcとヒープのアドレスを漏洩させます。バッファオーバーフローを利用して、`system('/bin/sh')`を呼び出すret2libを行います(ヒープアドレスがチェックをバイパスするために必要です)。
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|