Apache渗透测试合集教学文档
一、Apache简介与基本原理
1.1 Apache概述
Apache是世界使用排名第一的Web服务器软件,具有以下特点:
- 跨平台性:可运行在几乎所有广泛使用的计算机平台上
- 安全性:被广泛使用,是最流行的Web服务器端软件之一
- 扩展性:可通过简单API扩充,支持Perl/Python等解释器编译到服务器中
1.2 Apache与PHP的协作原理
一次完整的WEB请求流程:从request开始到response结束,是Apache和PHP配合的一次WEB请求。
关键点:
- Apache本身不支持PHP解析,通过SAPI(Server API)进行通信
- Apache通过加载php5_module模块来解析PHP文件
- 配置方式:
# 加载php5_module模块 LoadModule php5_module php5apache2_2.dll的路径 # 添加可以执行php的文件类型 AddType application/x-httpd-php .php # 或使用FilesMatch方式(Apache 2.4.0~2.4.29默认) <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> # 设置默认索引文件 <IfModule dir_module> DirectoryIndex index.html index.html index.php index.phtml </IfModule>
调用过程概况:HTTP → Apache → php5_module → sapi → php
二、Apache目录结构
- bin:存放常用命令工具,如httpd
- cgi-bin:存放Linux下常用命令,如xxx.sh
- conf:配置相关文件,如httpd.conf
- error:错误记录
- htdocs:网站源码存放目录
- icons:网站图标
- logs:日志
- manual:手册
- modules:扩展模块
三、Apache解析漏洞(CVE-2017-15715)
3.1 漏洞原理
Apache对文件名扩展名的定义存在漏洞,导致可以解析非标准PHP扩展名的文件。
关键点:
- Apache本身不能解析PHP,是通过PHP模块解析
- 漏洞利用条件:
- 使用module模式与PHP结合(分为mod_php和mod_cgi)
- 文件扩展名中至少带有一个
.php - 正则表达式配置不当(如缺少
$结尾符)
3.2 不同PHP运行模式的影响
- module模式(mod_php和mod_cgi):存在未知扩展名解析漏洞
- fastcgi模式:不存在此漏洞
3.3 漏洞复现(Kali环境)
-
开启Apache服务:
/etc/init.d/apache2 start -
Kali下Apache默认网站根目录:
/var/www/html -
创建测试文件:
echo '<?php phpinfo(); ?>' > /var/www/html/2.php.xxx -
修改Apache配置(
/etc/apache2/mods-enabled/php*.conf):<FilesMatch ".+\.ph(ar|p|tml)\."> SetHandler application/x-httpd-php </FilesMatch>注意:将
$改为\.以允许任意后缀 -
重启Apache:
service apache2 restart -
访问
http://localhost/2.php.xxx,成功解析PHP代码
四、Apache HTTPD换行解析漏洞
4.1 漏洞原理
上传一个后缀末尾包含换行符的文件(\x0a),可以绕过FilesMatch的正则匹配。
示例:
a001.php\x0a --> a001.php
4.2 影响版本
Apache 2.4.0~2.4.29
4.3 漏洞复现(Ubuntu+Docker环境)
-
安装Docker环境:
sudo apt-get update sudo apt install curl curl -s https://get.docker.com/ | sh sudo apt install python curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py sudo python get-pip.py pip install docker-compose sudo apt install docker-compose -
下载vulhub:
sudo apt install git git clone https://github.com/vulhub/vulhub.git -
启动环境:
cd vulhub/httpd/CVE-2017-15715/ sudo docker-compose build sudo docker-compose up -d -
上传测试:
- 直接上传phpinfo.php会被拦截
- 抓包修改,在文件名后添加换行符(
.php→.php\x0a) - 在Hex视图中将
2e(.)改为0a(换行符)
-
访问上传的文件:
http://192.168.175.179:8080/phpinfo.php%0a
4.4 原因分析
后台通过黑名单方式过滤php后缀文件,正则表达式$匹配输入字符串的结尾位置。当设置了RegExp对象的Multiline属性时,也会匹配\n或\r。
五、Apache SSI远程命令执行漏洞
5.1 漏洞概述
- 影响版本:所有支持SSI的Apache版本
- 漏洞危害:可绕过服务器策略,上传webshell或执行系统命令
5.2 SSI简介
SSI(Server Side Includes)是放置在HTML页面中的指令,可以将动态生成的内容添加到现有HTML页面中,而无需通过CGI程序或其他动态技术提供整个页面。
5.3 漏洞利用
-
创建包含SSI指令的文件(如a001.shtml):
<pre><!-- #exec cmd="whoami" --></pre> -
上传并访问该文件,将执行系统命令
5.4 漏洞复现
-
使用vulhub启动环境:
sudo docker-compose up -d -
上传包含SSI指令的文件
-
访问该文件即可执行命令
5.5 利用思路
- 上传webshell
- 获取反弹shell
- 执行系统命令获取敏感信息
六、修复建议
6.1 针对解析漏洞
- 升级到最新版本Apache
- 修改上传文件命名策略,如使用"时间戳+随机数+.jpg"格式
- 禁用上传文件目录的执行脚本权限
6.2 针对SSI漏洞
- 如不需要SSI功能,完全禁用SSI
- 严格限制可执行SSI的目录
- 对用户上传内容进行严格过滤
6.3 通用建议
- 定期更新Apache到最新稳定版本
- 审查配置文件,确保安全设置正确
- 限制文件上传功能,特别是可执行文件的上传
- 实施严格的输入验证和输出编码
七、总结
本文详细介绍了Apache服务器的三种常见安全漏洞:
- 解析漏洞(CVE-2017-15715):利用文件扩展名处理不当执行PHP代码
- 换行解析漏洞:通过添加换行符绕过安全限制
- SSI远程命令执行:利用SSI功能执行系统命令
理解这些漏洞的原理和利用方式,有助于安全人员更好地防御Apache服务器的安全风险。在实际环境中,应结合业务需求和安全最佳实践,采取适当的防护措施。