8

UNIX仮想マシンでフォーマット文字列攻撃を行う必要があるセキュリティコースを受講しています。脆弱性は、コマンドライン引数を使用したフォーマット文字列です。

私の質問は、フォーマット文字列のアドレスに値を書き込むにはどうすればよいですか(シェルコードアドレスを関数のリターンアドレスに書き込むなど)?

たとえば、差出人住所の場所0xaabbccddに値987654を書き込もうとします。のような文字列を試し"AAAA_%10$x"ましたが、これによりプログラムが印刷される可能性がありますAAAA_41414141

次に、文字を自分の住所に置き換えて、上書きしようとします。

\xdd\xcc\xbb\xaa_%10$x_%54321x_%n"

しかし、それは機能しません。すでに書いた文字がいくつかあるので、もっと小さい数字を使うべきだという記事が%54321xありますが、以前に書いた文字の数もわかりません%54321x

注:環境には古いバージョンのgccがあるため、値が大きすぎることを心配する必要はありません。助言がありますか?ありがとう。

4

2 に答える 2

2

printf%n書式指定子を使用しないとどこにも書き込めません。これはあなたが見逃しているものです。次のようなもの%.987654d%nは、数値 987654 (これまでに出力された文字数) を 2 番目の引数で指定されたアドレスに書き込みます。ここで、最初の引数はint. 始めるにはこれで十分です。

于 2011-01-31T20:37:11.190 に答える