web-dev-qa-db-ja.com

libcへの攻撃

コンピュータソフトウェアセキュリティの割り当てに対して、libcに戻るバッファオーバーフロー攻撃を試みました。私の理解では、canariesnon-executable stackなどのスタック保護対策に関係なく、この種の攻撃を行うことができます。これは、libc関数がスタックに存在せず、戻りアドレスをlibc function addressで上書きして適切な引数を渡すことにより、プログラムの制御フローをシフトする必要があるためです。この図は、私が推測する手順を要約しているようです。

return-to-libc-demo

私の疑問は、2番目の部分の図によると、スタックフレームがlibc関数に指定されているのですか、それともユーザーのプログラム自体で定義されている関数だけなのですか? fake_retの必要性を理解できません。 EIPをsay unlinkのアドレスで上書きして、関数の戻りアドレスを上書きすることはできません。引数は、ユーザーの関数バッファーに配置して、 unlink関数?

ユーザーの(何か)を使用することにより、ユーザー自身がプログラムで定義した(何か)を指すことを目的としています。ありがとう。

3
yellow_flash

任意の関数呼び出しのフレームを記述できます。フレームはsystem()である必要はありません。ただし、ほとんどのエクスプロイトは、可能であればシェルを狙います。 _fake_ret_アドレスは、system()呼び出しの後に実行が戻る場所です。そこに_\x41\x41\x41\x41_を置くと、segfaultになります。 exit()にポイントすると、正常に終了します。または、_pop register_の後にポイントして、スタック(ROP)の実行を制御するretを続けてもかまいません。

2
wireghoul