从 0 到 1:文件上传漏洞的校验、绕过与真实场景利用

本文系作者在网络安全渗透测试领域的学习与实践总结,仅作为技术参考资料,文中观点难免存在局限,恳请读者批评指正。

漏洞测试须在合法授权环境进行,可使用自己搭建的靶场或获书面授权的目标系统,否则将担法律责任。

阅读文章请遵守本文《法律与责任声明》

常规文件上传:

文件上传安全指的是

攻击者通过利用上传实现后门的写入连接后门进行权限控制的安全问题,对于如何确保这类安全问题,一般会从原生态功能中的文件内容,文件后缀,文件类型等方面判断,但是漏洞可能不仅在本身的代码验证逻辑中出现安全问题,也会在语言版本,语言函数,中间件,引用的第三方编辑器等存在缺陷地方配合利用。另外文件上传也有多个存储逻辑,不同的文件存储方案也会给攻击者带来不一样的挑战!

1、无限制

任意上传,什么文件都能上传

2、有限制:

限制后缀格式(判断后缀名(黑白名单),MIME类型,文件头等)

3、测试环境安装参考:

此处我们使用靶场

bash 复制代码
项目地址:https://github.com/sqlsec/upload-labs-docker

此处我把它搭在了云服务器,也可以在本地用继承==集成软件搭建

1、前端JS

假如说网站是php或者java的网站,一般是不会让直接上传php或者jsp文件的

如何判断是否是前端js验证呢?

首先抓包监听,如果上传文件的时候还没有抓取到数据包,但是浏览器就提示文件类型不正确的话,那么这个多半就是前端校验了

确实是前端js验证

或者我们可以通过看前端源码

可以看到有一个点击事件,然后看这个事件的代码做了校验

如果不设置前端校验直接上传php文件就直接控制了,这里很明显不让上传,并且校验代码写在了前端而不是后端校验,这种我们可以直接绕过,有几种绕过方式:

一种是抓包绕过,还有就是本地写一个表单提交绕过

先把源代码扒下来

我们把这个点击事件剪掉或者删掉

或者直接把下面的script代码改掉或者删掉

然后此处由于我们在网页中action空白就表示本地,此处我们就需要写上目标地址,最后生成html文件

上传成功

还有抓包绕过

我们先上传一个图片然后进行抓包

我们可以看到上传了这个照片,然后我们此处就可以将文件后缀改成php,然后并在图片内容中加入一些脚本

2、.htaccess

htaccess 文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。通过 htaccess 文件,可以帮我们实现:网页301重定向、自定义 404 错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能

这个是只有apache中间件才会用的一个文件

我们此处先上传那个后面代码的文件,我们把它修改为png格式上传,然后找到图片连接

此处没用显示什么,是错误的,然后我们创建一个htaccess文件

这个的大概意思就是将解析格式改为php格式

上传这个htaccess文件后再次访问刚刚上传的png图片

3、MIME类型

MIME 类型是网络传输中用来标识文件格式的「格式标签」,它告诉浏览器、服务器等程序当前传输的文件是什么类型(如图片、视频、网页、文档等),让程序能正确解析、打开和处理文件,是 HTTP 协议、邮件传输中必不可少的文件格式标识标准。

当我们上传一个png格式,就会发现有一个

bash 复制代码
Content-Type:image/png

当我们上传php格式

这就是MIME类型的作用

其实有时候并不是文件后缀影响而是这个MIME类型的影响

我们可以将这个MIME类型改为Content-Type:image/png,而文件后缀并不修改

4、文件头判断

我们可以看一下其实每个不同类型的图片开头有一点都是一样的

比如png

再看jpg

其它都是同理

我们可以根据头部信息来识别图片格式,在代码中也会这样检测

这样我们就可以通过伪造,比如上传的是php文件但把头部改成png头部

5、黑名单-过滤不严

正常上传

可以看到被过滤

我们此处根据源码是通过匹配过滤的,那我们就构造phphp当中间的php过滤后留下的正好又形成php

6、黑名单-过滤不严

系统大小写敏感属性

换一些大小写,替换后缀名,编码等等

10、逻辑不严-条件竞争


这个条件竞争就是代码逻辑问题,文件先上传然后才验证

此时我们就上传不断发包,然后不断的请求不断发包,就会有触发恶意文件的可能

12、代码审计-数组绕过

可以控制文件上传时的文件名

成功上传

这是因为解析问题导致,此处1.php/.xxxx.jpg其实就是等于了1.php

所以这个漏洞触发条件就是可以对文件进行重命名

应用场景:

1、注册用户上传地方

2、JS或API接口的代码

3、后台或其他管理页面

4、源码泄露或盲测文件

5、三方编辑器上传漏洞

6、特定的源码审计漏洞

不只是这里写的这个,还有很多很多,思维一定要打开!!

演示:

我们主要讲的是肉眼看不到的几个

JS或API接口代码

表面上不知道,但其实他可能执行了某文件上传

比如这个页面,我们并不能够从页面中发现比如文件上传的功能

但其实就是加载了文件上传js文件

此处是因为为了看到清楚才将文件名改为file_upload,实战中可不是直接显示出来的

明显的上传

然后我们可以根据这个代码逻辑写一个上传表单页面

这个id要和目标的接收值相同

还有这个下面的其它三个值也都对应上

地址(js代码)也改好,如果不写这个js代码我们点击上传后就会光访问不执行需要的功能

记得ctrl+s保存

注意我们需要搭到服务器中,不然他会自动默认访问本地文件

然后我们去站点看,成功上传

此处我们只是演示,所以没有做过滤,实战中此处可能会有过滤,就需要进行绕过

我们再看一个案例

然后看数据包,有很多js文件,其实有的文件是登陆后才能看到,但此处js泄露了,然后我们如何查到upload相关js?可以使用搜索

里面就会发现很多相关上传的代码,我们就可以参考代码进行伪造

我们也可以直接访问看看

当然有的网站也会做一些安全防护,需要在地址或者什么地方加入某值才能可以

三方编辑器上传漏洞

这个意思就是可能是使用的编辑器出现了漏洞

我放到一个文件夹里面

此时我们就可以在文件上传时,或者是其它也可以尝试,进行抓包,然后这个编辑器它并不是说后门漏洞,是一个xss漏洞,我们只是说类似这样思路

比如

只需要把action改为uploadfile,filename的后缀改为xml

然后右侧返回了内容

复制代码
{"state":"SUCCESS",
 "url":"xxxxx/php/upload/file/20260417/1776389421721771.xml",
 "title":"1776389421721771.xml",
 "original":"null-2a016d1d1140bda0.xml",
 "type":".xml",
 "size":48198}
  • state":"SUCCESS":文件上传成功了!
  • url:服务器给你返回了上传后的文件路径,你可以通过这个路径直接访问文件。
  • original:你上传的原始文件名
  • type:服务器识别到的文件后缀是 .xml
  • size:文件大小

这个操作的本质是什么?(漏洞原理)

一个典型的文件上传漏洞,核心逻辑是:

  1. 服务器的上传接口,只做了前端 / Content-Type 校验 ,或者只校验了文件内容,却没严格校验文件后缀
  2. 你抓包修改了文件名后缀为 .xml,但保留了图片类型的 Content-Type,服务器没拦住你,成功把 XML 文件上传到了服务器上。
  3. 响应里给你的 url,就是这个 XML 文件在服务器上的访问地址,你可以直接用浏览器打开它。

很多上传功能会限制只能上传 .jpg/.png 等图片格式,你改成 .xml,就是为了绕过服务器的后缀黑名单 / 白名单限制,把非图片文件传上去。

此处由于无法绕过不能够直接上传php文件,是通过文件上传来造成xss

实战遇到的情况:

1、执行权限

文件上传后存储目录不给执行权限

我们此处上传一个php文件

没问题

然后我们访问

也没有问题

但假设此处网站管理员限制了上传的文件目录权限不给读写执行权限,然后再次访问我们上传的文件时

报错,没用权限的原因

2、解码还原

上传一个图片

正常是显示路径和文件名

而此处我们在我们搭好的靶场中上传

表面上看着正常

而此处我们上传后再查看图片链接,会显示一堆乱码的东西

这就是对这个图片进行编码,其实url显示的这堆内容解码后就是图片的核心内容

正常我们数据是做存储,而选择是编码并告诉浏览器编码方式,当我们访问时浏览器就会以那种编码方式来解析加载图片,文件并不在服务器存储,解析固定(文件后缀名无关)

文件上传后利用编码传输解码还原

可以从源代码中看到,就是先编码,当我们访问会告知浏览器以某种形式解密数据然渲染显示,文件没在服务器存储,此时我们即使上传了后门也是无法解析执行,无法直接绕过

3、分站存储

upload.xxxxx.com 上传,但存储在images.xxxxx2.com

主页上传我文件后访问执行的是另一个域名/ip/服务器下的某个地方,绕过就需要看这个上传后的这个网站的策略

4、OSS对象

类似分站存储,但细节里面不同

就是搞好上传文件后,链接阿里云的oss存储,当我们上传后就会直接上传到阿里云的oss,就算是php文件可上传,但我们访问时由于阿里云安全设置也只能够下载。

本篇完 | 实践出真知,交流共进步

每一篇文章都是一次沉淀,感谢你的阅读。技术没有捷径,唯有不断积累、不断输出。期待下次继续与你分享更多实战经验,一起前行。

《法律与责任声明》

本内容仅用于网络安全漏洞的技术研究、学习与交流。

一、合法性要求

  • 严格遵守《中华人民共和国网络安全法》及相关法律法规,严禁将所学技术用于非法活动,如未经授权的攻击、窃取信息等。例如,不得对未授权的真实生产环境网站做漏洞测试。
  • 漏洞测试须在合法授权环境进行,可使用自己搭建的靶场或获书面授权的目标系统,否则将担法律责任。

二、风险与责任

  • 若因参考本内容对第三方造成损失,本人不承担法律责任,使用者自行担责。

三、传播限制

  • 禁止将本内容用于恶意传播,如制作恶意教程、培训非法黑客组织,应维护良好网络安全环境。
  • 发现有人利用本内容非法活动,应及时举报。

四、版权声明

本文为本人独立创作,有完整知识产权。未经书面许可,任何单位或个人不得转载、复制或以其他方式使用,违者依法追责。

阅读并使用本文章内容即表示同意声明条款

相关推荐
写代码的学渣2 小时前
Windows安全基线核查加固助手
安全
云空2 小时前
《安全可用的AI Agent选型指南》
网络·人工智能·安全
一只机电自动化菜鸟2 小时前
一建机电备考笔记(21):石油化工设备(含考频+易错点)
经验分享·笔记·学习·职场和发展·课程设计
Pentane.2 小时前
力扣HOT100:T.1 两数之和|循环遍历算法笔记及打卡(12/100)
c++·笔记·算法·leetcode
傻啦嘿哟2 小时前
验证代理是否生效:OpenClaw中查看当前出口IP的3种方法
网络·网络协议·tcp/ip
IMPYLH2 小时前
Linux 的 readlink 命令
linux·运维·服务器·网络·bash
夜瞬2 小时前
NLP学习笔记07:文本相似度计算——从 TF-IDF 到 BERT
笔记·学习·自然语言处理
恋恋风尘hhh2 小时前
Web 前端安全机制分析:以瑞数(RisShu)为例
前端·安全
2401_873479402 小时前
通过IP地址查询判断网络风险,有哪些具体指标和判断方法?
网络·tcp/ip·网络安全