出于研究目的,我想在旧的1.3.x版本的apache webserver上测试一些缓冲区溢出漏洞。 无论如何,我有堆栈保护,所以它不起作用或至少我认为它不是出于这个原因。 为了禁用保护,我必须使用这些标志进行编译:
-fno-stack-protector -z execstack
但我不知道如何将它们添加到apache编译过程中..我从未做过这样的事情! 你能救我吗?
答案 0 :(得分:2)
尝试:
CFLAGS="-fno-stack-protector" LDFLAGS="-z execstack" ./configure [...]
CFLAGS
用于编译器,execstack
是链接器选项,因此应该进入LDFLAGS
。或者,如果支持,您可以让编译器传递链接器选项-with -Wl
,所以:
CFLAGS="-fno-stack-protector -Wl,-z,execstack" ./configure [...]
有关详细信息,请参阅Apache源存档中的INSTALL
文件。
检查或比较生成的顶级Makefile
非常有用,您应该在EXTRA_CFLAGS
和EXTRA_LDFLAGS
中的任何一个或两个中看到您的参数。
根据您的任务,如果您正在运行具有定期pre-linking和ASLR任务的Linux发行版,则应检查是否将Apache安装到未执行的路径进行处理,否则当你的Apache二进制文件被“修复”一晚时,你的测试可能会很复杂......
检查prelink
是否已安装
dpkg -l prelink # Ubuntu/Debian derived
rpm -qv prelink # CentOS/Red Hat derived
并检查/etc/prelink.conf
中的配置(通常)以及/etc/defaults/prelink
或/etc/sysconfig/prelink
中的一个。
在/usr/local/
(bin
,sbin
,lib
)下的Ubuntu(但不是在CentOS / RH上)目录上包含在内进行处理。如果您将Apache安装到默认的/usr/local/apache
,那么它应该不受影响,或者如果您想要彻底,可以将目录黑名单(-b
)行添加到/etc/prelink.conf