Array Indexing
基本情報
このカテゴリには、配列のインデックスの処理のエラーによって特定のデータを上書きできる脆弱性が発生するすべての脆弱性が含まれます。これは、脆弱性の条件に完全に依存するため、特定の方法論はなく、非常に広範なカテゴリです。
ただし、いくつかの良い例があります:
2つの衝突する配列があり、データが格納されるアドレス用の1つとそのデータのサイズ用のもう1つがあります。片方をもう片方で上書きすることが可能で、任意のアドレスをサイズとして指定することができます。これにより、
free
関数のアドレスをGOTテーブルに書き込んでから、それをsystem
のアドレスで上書きして、メモリ内の/bin/sh
からfreeを呼び出すことができます。64ビット、nxなし。サイズを上書きして、すべてが倍精度浮動小数点数として使用され、最小から最大までソートされるバッファオーバーフローの種類を取得します。その要件を満たすシェルコードを作成する必要があります。キャナリはその位置から移動してはいけないことに注意し、最後にRIPをretのアドレスで上書きし、前の要件を満たすアドレスを指す新しいアドレスをスタックの開始地点に置く必要があります(プログラムによって漏洩された)。その後、putsを使用してGOTに配置されたアドレスをリークするROPチェーンが使用されます(
exit
が呼び出されるため、pop rdi; ret
が呼び出されるため、スタック内でこのチェーンが実行されます)。最後に、ret2libを実行する新しいROPチェーンが使用されます。64ビット、relroなし、キャナリなし、nxなし、PIEなし。スタック内の配列にオフバイワンがあり、配列内のオフバイワンによって上書きされたアドレスにすべての数値の合計を書き込むポインタを制御できるようになります。スタックが制御されるため、GOT
exit
アドレスがpop rdi; ret
で上書きされ、スタックにmain
のアドレスが追加されます(main
にループバック)。putsを使用してGOT内のアドレスをリークするROPチェーンが使用されます(exit
が呼び出されるため、pop rdi; ret
が呼び出されるため、スタック内でこのチェーンが実行されます)。最後に、ret2libを実行する新しいROPチェーンが使用されます。32ビット、relroなし、キャナリなし、nx、PIEなし。libcとヒープのアドレスをスタックから漏洩させるために悪いインデックスを悪用します。バッファオーバーフローを悪用して、
system('/bin/sh')
を呼び出すret2libを行います(ヒープアドレスがチェックをバイパスするために必要です)。
Last updated