2012-01-28 1 views
2

を含む値を持つローカル変数を上書きし、私はこのコードを含む関数の戻りアドレスを上書きする方法を把握しようとしています:リターンアドレスよりスタックバッファオーバーフローの方法をヌル文字

長=ターゲット・サイズよりも大きいが、小さいですターゲット配列の先頭からオフセットします。

for (i = 0; i <= length; i++) 
    target[i] = argument[i]; 

引数は入力から受け入れます。

ローカル変数lengthは、iとlengthを上書きするために引数をオーバーフローできるほど大きくなっています。

ターゲットの開始アドレスからの戻りアドレスのオフセットと仮定レッツは、私は300

よりも、いくつかの数も大きくなるように300(0x12c)と lengthよりも、いくつかの数も小さくなるように iを上書きする必要がある300

です

これは32ビットシステムなので、0x0000012c整数にはヌル文字が含まれているため、引数を渡すことはできません。

この場合、リターンアドレスを上書きする方法はありますか?

答えて

1

バッファオーバフローチャレンジのような音がします。

ほとんどの場合、バッファオーバーフローがstrcpy()などの安全でない文字列関数の1つによって引き起こされた場合など、nullバイトを書くことはできません。この場合、forループを使ってバイトを移動しているので、長さの値に影響を与えることができれば(この値はおそらくスタックにあります)、nullバイトをコピーすることができます。

もう1つの可能性は、データ型を見ていることです。署名されている場合、非常に大きな値は負の数として解釈されます。この攻撃では数値を上書きしていますが、 "算術オーバーフロー"をブラッシュアップしてください。

関連する問題