【问题标题】:How do I get Linux to execute data on the stack?如何让 Linux 在堆栈上执行数据?
【发布时间】:2011-07-28 23:48:53
【问题描述】:
我有一个 Core i7 720QM 处理器,并且正在运行 Slackware 13.37(32 位)作为虚拟机。作为一项课堂作业,我必须编写一个易受攻击的程序并粉碎堆栈。但是,在大多数计算机上,这不起作用,因为存在某种堆栈执行预防(NX 位?),当 CPU 检测到尝试在堆栈上执行数据时会产生“分段错误”。
有没有办法通过sysctl 或类似的方式向内核发送信号以忽略这个?
【问题讨论】:
标签:
buffer-overflow
penetration-testing
stack-smash
【解决方案1】:
$ sudo apt-get install execstac
应安装 execstack,这是一个修改 ELF 标头以启用/禁用目标二进制文件堆栈上的 NX 保护的程序。
$ execstack -s vuln
应该使堆栈对您的示例程序可执行。
【解决方案2】:
像这样编译你的程序
gcc -fno-stack-protector -z execstack <sourcefile> -o <outputfile>