第68天-Web攻防实战:文件上传漏洞(JS提取/源码审计/编辑器利用)深度学习笔记

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

文章总结: 该文档系统阐述了文件上传漏洞的攻防体系,核心在于利用解析机制与验证逻辑缺陷实现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 做文件检测。

判断方法:

  1. 打开 BurpSuite

  2. 抓包监听

  3. 上传文件

如果出现:

浏览器提示文件类型错误
但抓包工具没有看到上传请求

说明:

验证发生在前端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提取 / 源码审计 / 编辑器利用)深度学习笔记》

评论:0   参与:  0