フォーマット文字列の脆弱性攻撃、中に配列の2番目の要素にアクセスしますコードはまったくありません。入力を使用して、プログラムをクラッシュし、秘密の値を印刷し、秘密の値を変更し、秘密の値を所定の値に変更します。私が手我々は、次のコードを与えている私は、フォーマット文字列の脆弱性ラボに取り組んでいます
出力例は次のとおりです。だから、
The variable secret's address is 0xbfffe7cc (on stack)
The variable secret's value is -x0804a008 (on heap)
secret[0]'s address is 0x0804a008 (on heap)
secret[1]'s address is 0x0804a00c (on heap)
Please enter a decimal integer
65535
Please enter a string
%08x.%08x.%08x.%08x.%08x.%08x.%08x%08x.
bfffe7d0.00000000.00000000.00000000.00000000.0000ffff.0804a008.78383025
、8 "%08X" Sを入力することによって、私は4 +秘密のアドレスを印刷し、その後、私はint型のアドレスA、B、Cを印刷し、とd - しかし、私は彼らに価値を与えたことがないので、彼らはどこにも指しておらず、ただ0を表示します。それに続いて、 'ffff'がはっきりと見えるように選択された10進I入力です。次にsecret [0]のアドレスが来ると、プログラムに格納されている他の値が取得されます。
AAAA.%08x.%08x.%08x.%08x.%08x.%08x.%08x%08x.
を入力すると、.0804a008が.41414141になった後、文字列入力からのAがそこに保存されるためです。
プログラムがクラッシュするのはかなり簡単です。文字列入力に十分な%sを指定すると、segfaultが発生します。しかし、今私は秘密の価値を読む必要がありますが、私は完全に失われています。私はスタックのアドレスを何とかして、そのような文字列の先頭に置くことによって、アドレスを入れようとしました:\xd0\xe7\xff\xbf_%08x.%08x.%08x.%08x.%08x.%08x.%s
しかし、アドレスはどこにでもプッシュされず、私はちょうど秘密[0]を印刷しません(これは、 「D」である)。私はあらゆる種類のアドレスを試しましたが、しばらくすると、それらの文字列が以前に表示された文字列としてすべて格納されていることに気付きました。彼らはヘックスなどに変換されていません。
私はSAなどでこのコードについて多くの議論をしてきましたが、秘密裏に値を取得する方法についてはまだ誰も話していません[1]。
ご協力いただければ幸いです。
うん、これは私が行方不明だったものです。これを見つけた後に全部の馬鹿のように感じる。ありがとうございました! – Max