2

gdb内のrun<inputfileを使用して入力を(getsに)リダイレクトすることにより、DVLで特定のエクスプロイトをbofしようとしています

プログラムを正常にオーバーフローさせることはできますが、文字列に16進値を追加するのに問題があります。引用符を試し、mem addrの値をASCIIに変換し、さまざまなエスケープを試みました(\、\、\)。

入力ファイルの例:AAAA \ x42

上記の例では、バックスラッシュがASCII文字(5c)として読み取られており、値42がスタックに残っているように見えます(奇妙なことに?)。

gdb入力ファイル内で16進値を指定するにはどうすればよいですか?

ありがとう

4

1 に答える 1

4

perlを使用してください!:)

reader@hacking:~/booksrc $ ./overflow_example $(perl -e 'print "A"x30')

'e'オプションを指定すると、perlは次のコマンドを評価し、すべてを囲むとperlの出力が文字列として扱われます。したがって、上記のコマンドは次のようになります。

reader@hacking:~/booksrc $ ./overflow_example AAAAAAAAAAAAAAAAAAAAAAAAA

(文字列の後にx30を追加すると、30回繰り返されます)。もちろん、perlは表記が付いた他の16進値を受け入れます\x??。もう1つの単語、文字列を連結するには、ドットを使用します。

reader@hacking:~/booksrc $ perl -e 'print "A"x20 . "BCD" . "\x61\x66\x67\x69" ;'
AAAAAAAAAAAAAAAAAAAABCDafgi

したがって、プログラムの実行時に、入力ファイル内のperlの出力をリダイレクトするか、gdb内のperlを直接呼び出すことができます。

于 2011-02-16T16:18:08.710 に答える