文件上传绕过方式和中间件解析漏洞
字数 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检查绕过

方法

  1. 浏览器控制台修改/破坏验证函数
  2. 使用NoScript等插件禁用JS
  3. 直接拦截修改上传请求(Burp Suite)

2. 黑名单绕过技术

特殊可解析后缀

原理:Apache配置中可能包含:

AddType application/x-httpd-php .php .php3 .phtml

绕过:上传.php3, .phtml等未被禁止的后缀

.htaccess文件攻击

条件

  • Apache服务器
  • AllowOverride All
  • 未禁止.htaccess上传

方法

  1. 上传.htaccess文件,内容为:
<FilesMatch "shell.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

AddType application/x-httpd-php .jpg
  1. 上传图片马(shell.jpg)

.user.ini文件攻击

条件

  • PHP > 5.3.0
  • CGI/FastCGI模式
  • 目录下有可执行PHP文件

方法

  1. 上传.user.ini,内容:
auto_prepend_file=shell.jpg
  1. 上传图片马(shell.jpg)
  2. 访问同目录下的PHP文件触发

Windows特性利用

  • 空格绕过file.php → 保存为file.php
  • 点绕过file.php. → 保存为file.php
  • **::\(DATA**:`file.php::\)DATA` → 保存为file.php

3. 白名单绕过技术

MIME伪造

修改Content-Type为允许的类型:

Content-Type: image/jpeg

截断技术

  1. %00截断

    • 上传路径可控时:path/xxx.php%00/real.jpg
    • 保存为xxx.php
  2. 0x00截断

    • PHP < 5.3.4
    • magic_quotes_gpc=off
    • 类似%00截断

4. 内容检查绕过

文件头伪造

  • GIF:GIF89a
  • PNG:\x89PNG
  • JPG:\xFF\xD8\xFF

二次渲染绕过

  • GIF:找到渲染前后不变的位置插入代码
  • PNG:写入IDAT数据块
  • JPG:复杂,成功率低

5. 条件竞争攻击

原理:利用"移动→检测→删除"的时间差
方法

  1. 持续快速上传恶意文件
  2. 多线程并发访问上传文件
  3. 在删除前访问到文件即可执行

0x03 中间件解析漏洞

1. Apache HTTPD漏洞

换行解析漏洞(CVE-2017-15715)

影响版本:2.4.0-2.4.29
利用

  1. 上传1.php\x0A
  2. 访问/1.php%0a

多后缀解析漏洞

原理:Apache会解析任意位置的.php后缀
利用

  1. 上传shell.php.jpg
  2. 访问/uploads/shell.php.jpg

2. Nginx解析漏洞

原理:路径解析错误
利用

  1. 上传图片马shell.png
  2. 访问/uploadfiles/shell.png/.php

3. IIS解析漏洞

IIS7.5解析漏洞

条件

  • Fast-CGI模式
  • cgi.fix_pathinfo=1
    利用
  1. 上传shell.jpg
  2. 访问/shell.jpg/.php

IIS6解析漏洞

三种利用方式

  1. 目录解析/asp目录/shell.jpg → 作为ASP执行
  2. 分号截断shell.asp;.jpg → 作为ASP执行
  3. 特殊后缀:.asa, .cer, .cdx 也会被解析

0x04 防御措施

  1. 服务端验证

    • 使用白名单+文件重命名
    • 检查文件内容(不仅仅是头)
  2. 服务器配置

    • Apache:禁止.htaccess覆盖
    • PHP:设置cgi.fix_pathinfo=0
    • IIS:限制脚本执行权限
  3. 其他措施

    • 文件存储与Web分离
    • 设置不可执行权限
    • 使用随机文件名
    • 对上传内容进行病毒扫描

附录:常用工具与命令

  1. 制作图片马
copy /b test.png + shell.php output.png
  1. PNG IDAT块生成
<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7...); // 完整数组见原文
$img = imagecreatetruecolor(32, 32);
// ...生成包含恶意代码的PNG...
imagepng($img,'./malicious.png');
?>
  1. Burp Suite技巧
    • 插入字节修改为0x0A(换行)
    • 使用Intruder进行条件竞争攻击
文件上传绕过与中间件解析漏洞全面指南 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配置中可能包含: 绕过 :上传.php3, .phtml等未被禁止的后缀 .htaccess文件攻击 条件 : Apache服务器 AllowOverride All 未禁止.htaccess上传 方法 : 上传.htaccess文件,内容为: 或 上传图片马(shell.jpg) .user.ini文件攻击 条件 : PHP > 5.3.0 CGI/FastCGI模式 目录下有可执行PHP文件 方法 : 上传.user.ini,内容: 上传图片马(shell.jpg) 访问同目录下的PHP文件触发 Windows特性利用 空格绕过 : file.php → 保存为file.php 点绕过 : file.php. → 保存为file.php ::$DATA : file.php::$DATA → 保存为file.php 3. 白名单绕过技术 MIME伪造 修改Content-Type为允许的类型: 截断技术 %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分离 设置不可执行权限 使用随机文件名 对上传内容进行病毒扫描 附录:常用工具与命令 制作图片马 : PNG IDAT块生成 : Burp Suite技巧 : 插入字节修改为0x0A(换行) 使用Intruder进行条件竞争攻击