1

出于学习目的,我想在旧的 1.3.x 版本的 apache 网络服务器上测试一些缓冲区溢出漏洞。无论如何,我有堆栈保护,所以它不起作用,或者至少我认为它不是因为这个原因。为了禁用保护,我必须使用这些标志进行编译:

-fno-stack-protector -z execstack

但我不知道如何将它们添加到 apache 编译过程中。我从来没有做过这样的事情!你能帮助我吗?

4

1 回答 1

2

尝试:

CFLAGS="-fno-stack-protector" LDFLAGS="-z execstack" ./configure [...]

CFLAGS是给编译器的,execstack是一个链接器选项,所以它应该放在LDFLAGS. 或者,如果支持,您可以让编译器传递链接器选项 -with -Wl,因此:

CFLAGS="-fno-stack-protector -Wl,-z,execstack" ./configure [...] 

有关更多详细信息,请参阅INSTALLApache 源存档中的文件。

检查或比较生成的顶级 很有用,您应该在和Makefile中的一个或两个中看到您的参数。EXTRA_CFLAGSEXTRA_LDFLAGS

鉴于您的任务,如果您正在运行具有定期预链接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

在 Ubuntu(但不在CentOS/RH 上)上,/usr/local/bin, sbin, lib)下目录包含用于处理。如果您将 Apache 安装为默认值,/usr/local/apache那么它应该保持不变,或者如果您想要彻底,您可以添加一个目录黑名单 ( -b) 行/etc/prelink.conf

于 2013-03-04T11:30:58.413 回答