文件上传:.htaccess 与 PHP 替代标签绕过
记录利用 .htaccess 修改图片解析方式,再用 PHP 替代标签绕过内容检测的简短思路。
一、漏洞核心
服务端会检测上传内容并过滤 <?php,但同时存在两个问题:
- 没有限制
.htaccess文件上传 - 没有过滤 PHP 的替代标签
因此可以先改变文件解析方式,再绕过 PHP 开始标签检测。
二、绕过过程
1. 上传 .htaccess
通过 Burp Suite 修改上传请求,使文件名为 .htaccess,内容如下:
<FilesMatch "test.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

这段配置会让匹配到的 test.jpg 按 PHP 文件处理,而不是普通图片。
2. 上传伪装图片
再上传名为 test.jpg 的文件,把被过滤的 <?php 换成 PHP 替代标签:
<script language="php">
echo "probe_ok_666";
</script>

访问上传后的 test.jpg,如果页面返回 probe_ok_666,说明 .htaccess 已生效,并且文件被 PHP 解析执行。
三、总结
这道题是两个绕过点的组合:.htaccess 负责把图片交给 PHP 处理,<script language="php"> 负责绕过对 <?php 的内容过滤。
四、小 Tips
<script language="php">只适用于较老的 PHP 环境,PHP 7.0 及以后已移除,遇到题目时要先判断 PHP 版本。.htaccess需要 Apache、目录允许覆盖配置,并且上传目录确实会读取该文件;换成 Nginx 时这条思路通常不适用。- 先使用
echo这类无害字符串做验证,确认解析链路后再继续分析题目逻辑。 - 文件名、MIME 类型和文件内容是三个独立的检查点,应分别观察服务器的响应。
使用工具
Burp Suite
用于拦截上传请求,修改文件名、MIME 类型和 multipart 内容,并观察上传结果。