出于学习目的,我想在旧的 1.3.x 版本的 apache 网络服务器上测试一些缓冲区溢出漏洞。无论如何,我有堆栈保护,所以它不起作用,或者至少我认为它不是因为这个原因。为了禁用保护,我必须使用这些标志进行编译:
-fno-stack-protector -z execstack
但我不知道如何将它们添加到 apache 编译过程中。我从来没有做过这样的事情!你能帮助我吗?
出于学习目的,我想在旧的 1.3.x 版本的 apache 网络服务器上测试一些缓冲区溢出漏洞。无论如何,我有堆栈保护,所以它不起作用,或者至少我认为它不是因为这个原因。为了禁用保护,我必须使用这些标志进行编译:
-fno-stack-protector -z execstack
但我不知道如何将它们添加到 apache 编译过程中。我从来没有做过这样的事情!你能帮助我吗?
尝试:
CFLAGS="-fno-stack-protector" LDFLAGS="-z execstack" ./configure [...]
CFLAGS
是给编译器的,execstack
是一个链接器选项,所以它应该放在LDFLAGS
. 或者,如果支持,您可以让编译器传递链接器选项 -with -Wl
,因此:
CFLAGS="-fno-stack-protector -Wl,-z,execstack" ./configure [...]
有关更多详细信息,请参阅INSTALL
Apache 源存档中的文件。
检查或比较生成的顶级 很有用,您应该在和Makefile
中的一个或两个中看到您的参数。EXTRA_CFLAGS
EXTRA_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