注: これは教育目的でのみ使用されます。問題のプログラムは、応用セキュリティ クラス用であり、フォーマット文字列の脆弱性を持つように設計されています。
課題のシナリオは、悪の体制のサーバーにシェル コードを挿入することです。ここでの私の質問は、パイプ機能を使用して ASCII 範囲外の元の文字列に 16 進値を挿入できない場合に、アドレスを格納する方法のみです。
プログラムの書式文字列の脆弱な部分は入力を要求し、プログラム内のいくつかのオプションを介してのみアクセスできます。
アドレスを元の文字列にどのように格納しますか? フォーマット文字列の脆弱なプログラムのソース コードは隠されています。脆弱な文字列がプログラムに埋め込まれているため、脆弱な文字列にパイプできません。
現在、次の入力をコピーしてプログラムに貼り付けようとしています。
\xea\xff\xff\xbf %x%x%x%x%x%x%x |%x|
次の結果が得られます。
\xea\xff\xff\xbf 805d1c01234567808060f206bffff67c123456786165785c |6666785c|
一度に 1 文字ずつ読み取れるようです。%d と %n を使用してアドレスの値を変更する次のステップを知っています。
アドレスを別の場所に保存する必要がありますか? ASCII 範囲外の文字を入力するためのトリックはありますか? アドレスを適切に保存するには、何を考慮する必要がありますか? これにはコツがありますが、私はそれを知りません。