Array Indexing
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
このカテゴリには、配列のインデックスの取り扱いのエラーによって特定のデータを上書きすることが可能になるために発生するすべての脆弱性が含まれます。これは非常に広いカテゴリであり、脆弱性の条件に完全に依存するため、特定の方法論はありません。
しかし、いくつかの良い例を見つけることができます:
2つの衝突する配列があり、一方はデータが保存されるアドレス用、もう一方はそのデータのサイズ用です。片方からもう片方を上書きすることが可能で、任意のアドレスをサイズとして指定して書き込むことができます。これにより、GOTテーブルにあるfree
関数のアドレスを書き込み、その後system
のアドレスで上書きし、/bin/sh
を持つメモリからfreeを呼び出すことができます。
64ビット、nxなし。サイズを上書きして、すべてのものが倍の数として使用され、最小から最大にソートされるようなバッファオーバーフローを引き起こします。そのため、その要件を満たすシェルコードを作成する必要があります。カナリアはその位置から移動しないようにし、最終的にRIPをretへのアドレスで上書きし、その要件を満たし、最大のアドレスをスタックの開始を指す新しいアドレスに設定します(プログラムによって漏洩された)。
64ビット、relroなし、カナリア、nx、pieなし。スタック内の配列にオフバイワンがあり、ポインタを制御することができます。WWWを付与します(配列のすべての数の合計を上書きされたアドレスに書き込みます)。スタックが制御されているため、GOTのexit
アドレスがpop rdi; ret
で上書きされ、スタックにmain
へのアドレスが追加されます(main
に戻る)。次に、putsを使用してGOTにあるputのアドレスを漏洩させるためのROPチェーンが使用されます(exit
が呼び出されるため、pop rdi; ret
が呼び出され、このチェーンがスタックで実行されます)。最後に、ret2libを実行する新しいROPチェーンが使用されます。
32ビット、relroなし、カナリアなし、nx、pieなし。悪いインデックスを悪用して、スタックからlibcとヒープのアドレスを漏洩させます。バッファオーバーフローを悪用して、system('/bin/sh')
を呼び出すret2libを行います(ヒープアドレスはチェックをバイパスするために必要です)。