文件上传绕过方式和中间件解析漏洞
字数 2029 2025-08-15 21:34:08
文件上传绕过与中间件解析漏洞全面指南
0x01 漏洞类型分类
客户端绕过
- JS检查绕过:
- 破坏前端验证函数
- 修改JS添加白名单/删除黑名单
- 使用浏览器插件禁用JS
- 拦截数据包修改(已通过前端检测)
服务端绕过
-
黑名单绕过:
- 上传特殊可解析后缀(.php3, .phtml等)
- 上传.htaccess文件(Apache)
- 上传.user.ini文件(PHP CGI/FastCGI)
- 后缀大小写绕过(pHp, PhP等)
- 点绕过(file.php.)
- 空格绕过(file.php )
- ::$DATA绕过(NTFS文件流特性)
-
白名单绕过:
- MIME类型伪造
- %00截断
- 0x00截断
- 0x0a截断
-
内容检查绕过:
- 文件头伪造
- 突破getimagesize()
- 突破exif_imagetype()
- 二次渲染绕过(GIF/PNG)
-
其他绕过:
- 条件竞争攻击
中间件解析漏洞
-
Apache HTTPD:
- 换行解析漏洞(CVE-2017-15715)
- 多后缀解析漏洞
-
Nginx:
- 路径解析漏洞(/.php)
-
IIS:
- IIS7.5解析漏洞
- IIS6解析漏洞(路径解析/;截断)
0x02 详细绕过技术
1. 客户端JS检查绕过
方法:
- 浏览器控制台修改/破坏验证函数
- 使用NoScript等插件禁用JS
- 直接拦截修改上传请求(Burp Suite)
2. 黑名单绕过技术
特殊可解析后缀
原理:Apache配置中可能包含:
AddType application/x-httpd-php .php .php3 .phtml
绕过:上传.php3, .phtml等未被禁止的后缀
.htaccess文件攻击
条件:
- Apache服务器
- AllowOverride All
- 未禁止.htaccess上传
方法:
- 上传.htaccess文件,内容为:
<FilesMatch "shell.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
或
AddType application/x-httpd-php .jpg
- 上传图片马(shell.jpg)
.user.ini文件攻击
条件:
- PHP > 5.3.0
- CGI/FastCGI模式
- 目录下有可执行PHP文件
方法:
- 上传.user.ini,内容:
auto_prepend_file=shell.jpg
- 上传图片马(shell.jpg)
- 访问同目录下的PHP文件触发
Windows特性利用
- 空格绕过:
file.php→ 保存为file.php - 点绕过:
file.php.→ 保存为file.php - **::\(DATA**:`file.php::\)DATA` → 保存为file.php
3. 白名单绕过技术
MIME伪造
修改Content-Type为允许的类型:
Content-Type: image/jpeg
截断技术
-
%00截断:
- 上传路径可控时:
path/xxx.php%00/real.jpg - 保存为xxx.php
- 上传路径可控时:
-
0x00截断:
- PHP < 5.3.4
- magic_quotes_gpc=off
- 类似%00截断
4. 内容检查绕过
文件头伪造
- GIF:
GIF89a - PNG:
\x89PNG - JPG:
\xFF\xD8\xFF
二次渲染绕过
- GIF:找到渲染前后不变的位置插入代码
- PNG:写入IDAT数据块
- JPG:复杂,成功率低
5. 条件竞争攻击
原理:利用"移动→检测→删除"的时间差
方法:
- 持续快速上传恶意文件
- 多线程并发访问上传文件
- 在删除前访问到文件即可执行
0x03 中间件解析漏洞
1. Apache HTTPD漏洞
换行解析漏洞(CVE-2017-15715)
影响版本:2.4.0-2.4.29
利用:
- 上传
1.php\x0A - 访问
/1.php%0a
多后缀解析漏洞
原理:Apache会解析任意位置的.php后缀
利用:
- 上传
shell.php.jpg - 访问
/uploads/shell.php.jpg
2. Nginx解析漏洞
原理:路径解析错误
利用:
- 上传图片马
shell.png - 访问
/uploadfiles/shell.png/.php
3. IIS解析漏洞
IIS7.5解析漏洞
条件:
- Fast-CGI模式
- cgi.fix_pathinfo=1
利用:
- 上传
shell.jpg - 访问
/shell.jpg/.php
IIS6解析漏洞
三种利用方式:
- 目录解析:
/asp目录/shell.jpg→ 作为ASP执行 - 分号截断:
shell.asp;.jpg→ 作为ASP执行 - 特殊后缀:.asa, .cer, .cdx 也会被解析
0x04 防御措施
-
服务端验证:
- 使用白名单+文件重命名
- 检查文件内容(不仅仅是头)
-
服务器配置:
- Apache:禁止.htaccess覆盖
- PHP:设置
cgi.fix_pathinfo=0 - IIS:限制脚本执行权限
-
其他措施:
- 文件存储与Web分离
- 设置不可执行权限
- 使用随机文件名
- 对上传内容进行病毒扫描
附录:常用工具与命令
- 制作图片马:
copy /b test.png + shell.php output.png
- PNG IDAT块生成:
<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7...); // 完整数组见原文
$img = imagecreatetruecolor(32, 32);
// ...生成包含恶意代码的PNG...
imagepng($img,'./malicious.png');
?>
- Burp Suite技巧:
- 插入字节修改为0x0A(换行)
- 使用Intruder进行条件竞争攻击