文件上传总结
字数 1911 2025-08-12 11:33:35
文件上传漏洞全面总结与绕过技术
基础知识
文件上传功能常见于用户头像修改等场景,通常允许上传jpg、png、gif等图片格式,而禁止上传php、asp、jsp等脚本文件。
文件上传流程:前端 → 代理服务器(BurpSuite) → 后端
系统识别方法
-
最优方法:通过文件名大小写敏感性判断
- Windows:不区分大小写
- Linux:严格区分大小写
-
次选方法:通过ping命令的TTL值判断
- Windows通常TTL=128
- Linux通常TTL=64
- 注意:可能因网络不通或人为设置导致不准确
代码审计视角
上传后的文件名通常由三部分组成:
上传后的文件名 = 预备路径 + 带随机数的文件名 + 文件后缀
审计时应关注:
- 哪些部分被拼接到最终文件名中
- 哪些函数能影响这些被拼接的部分
文件上传绕过技术
I. 前端JS检测绕过
特征:
- 上传非法文件时出现前端弹框提示
- BurpSuite抓不到包(未发送到服务器)
绕过方法:
- 开启BurpSuite抓包
- 将文件后缀改为jpg通过前端校验
- 在BurpSuite中将后缀改回php
- 上传到服务器
II. MIME类型校验绕过
MIME标准:
- 多用途互联网邮件扩展类型
- HTTP协议通过Content-Type头标识数据类型
绕过方法:
- 上传jpg文件
- 抓包修改Content-Type为允许的类型(如image/jpeg)
- 将文件后缀改为php后上传
III. 黑名单绕过技术
1. 大小写混淆
特征:黑名单过滤.php、.jsp、.asp等
绕过:使用.PHP、.pHP等变体
2. 特定后缀名
相关后缀:.php1-.php5、.phtml、.pht
原理:Apache配置中可能有.+\.ph(p[345]?|t|tml)正则
3. Windows文件名特性
特征:
- Windows自动去除文件名末尾的点和空格
- 服务器可能先去除点再检测后缀
绕过:
- 使用
xx.php.(末尾有点和空格) - 处理后变为
xx.php
4. 双写::$DATA绕过
特征:服务器未完全过滤::$DATA
绕过:
php$::DATA直接绕过php::$DAT::$DATAA绕过正则过滤
5. %00截断
前提:
- PHP版本<5.3
- magic_quotes_gpc=Off(默认On)
原理:%00(\0)在C语言中表示字符串结束
利用:
- 修改GET传递的路径为
/upload/test.php%00 - 上传合法图片
- 最终文件名为
/upload/test.php
6. .htaccess文件重写
前提:Apache配置AllowOverride=All
利用:
- 上传.htaccess文件定义解析规则
- 上传符合规则的文件(如jpg)
- 服务器将jpg按php解析
7. 服务器解析漏洞
Apache解析漏洞
原理:从右向左解析后缀
利用:上传xx.php.abc,Apache无法识别.abc则解析为php
IIS6.0解析漏洞
相关后缀:.asp、.asa、.cer、.cdx
漏洞1:以这些后缀结尾的目录下所有文件按asp解析
漏洞2:文件名中包含.asp;等时忽略后缀按asp解析
Nginx/IIS7.0/7.5解析漏洞
利用:上传xx.jpg,访问xx.jpg/x.php使jpg按php解析
IV. 条件竞争漏洞
原理:
- 服务器先接收所有文件到临时目录
- 依次检查并删除不合格文件
- 正在访问的文件无法被删除
利用:
- 使用BurpSuite Intruder模块
- 同时多次上传和访问文件
- 在删除前访问到文件使其保留
- 配合file_put_contents()留更多后门
V. 图片马技术
适用场景:脚本文件过滤严格时,配合文件包含漏洞使用
图片马制作方法
-
文本编辑器法:
- 用记事本打开图片插入代码
- 缺点:图片可能无法显示
-
DOS命令法:
copy /b xx.jpg + xx.php = xx.jpg- 二进制流合成,图片可正常显示
-
十六进制编辑器法:
- 在大片00字节处插入代码
- 主要用于绕过二次渲染
二次渲染绕过
原理:服务器用imagecreatefromjpeg()等函数重组图片,破坏插入的代码
绕过步骤:
- 上传正常图片并下载
- 用Hex Editor比较原图与渲染后图
- 找出字节码不变的位置插入代码
- 通常gif格式不变区域较多
防御建议
- 使用白名单而非黑名单
- 文件重命名(避免用户控制文件名)
- 限制文件类型和大小
- 对上传文件进行病毒扫描
- 存储上传文件于非Web目录
- 禁用危险函数(如php执行函数)
- 及时更新服务器软件
通过全面理解这些绕过技术和防御措施,可以有效提升Web应用的文件上传安全性。