文件上传漏洞原理学习

news2025/4/15 10:07:14

什么是文件上传漏洞

        文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。“文件上传” 本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

这种攻击方式是最为直接和有效的,所以我们需要思考的是如何绕过检测和过滤。

漏洞危害

  1. 上传文件是web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行。

  2. 上传文件是病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接 自劢运行

  3. 上传文件是Flash的策略文件 crossdomain.xml,黑客用以控制Flash在该域 下的行为(其他通过类似方式控制策略文件的情况类似);

  4. 上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行;

  5. 上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。

  6. 除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢 出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了PHP脚本,再通过"本地文件包含漏洞(Local File Include)"执行此脚本。

要求条件 

上传的后门文件,需要能被脚本语言解析执行。

说明一:对方服务器运行的PHP环境,你不能上传一个JAVA的后门代码。
说明二:你上传文件的目录可以被脚本语言解析执行,如果你上传的目录没有执行权限也不行
说明三:一般文件上传后会返回你一个地址,如果无妨链接到也不能构成文件上传漏洞。
还有例外情况,非脚本文件也能被成功解析。比如:上传了一个图片🐎,如果对方中间件上存在一些漏洞的话,配合这些漏洞可以实现图片文件按照脚本文件解析。

方法(以upload-labs为例)

在ctf比赛中,一般都是围绕一句话木马实现文件上传漏洞的

那什么是一句话木马?

通常,一句话木马后缀为.php,因为文件上传漏洞通常用于web中,而php是web能够识别的语言(主要是能被对方服务器识别的语言后缀)

其内容是

 <?php eval($_POST['cmd']);?>

        现在来解释一下这个一句话木马,这里的<?php和末尾的?>是php语言的标志,用来声明这是个php语言,而括起来的内容就是php代码。

        eval是php中的一个内置函数里面的内容会被当成命令执行。

        而$_POST['cmd']是通过post传参的方式获取一个名为cmd的参数。

所以如果这个上传的文件被解析,那我们就可以访问这个文件的位置,并通过post传参执行命令。(就像web的命令执行一样),从而访问,修改服务器中的目录文件。

1,Less-1 前端验证

我们直接上传一个一句话木马试一下

这里直接跳出一个弹窗,并显示只能上传的文件类型。

那这大概率是前端验证,因为web中的弹窗通常是通过JavaScript实现

通过看查源代码我们也可以证实

 不过这种检查通常都是本地上传时检查,而在上传过程和后端不会检查,所以这种其实没什么用。

我们有两种方法绕过这种验证

1,直接禁用JavaScript

禁用JavaScript后,这串代码就不能生效了

打开开发者工具台,直接禁用

然后再上传文件,会发现上传成功,然后就可以用蚁剑连接进入后台了 2,抓包

先上传一个满足后缀的名字通过JavaScript检查,然后抓包修改后缀

 

2,Less-2 MIME检查

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。

就是会检查文件类型,单纯的后缀绕过不行了 

直接上传php

我们抓包,将文件类型改为符合的格式 然后就上传成功了

 3,Less-3 后缀绕过

看源码,可以看到对文件后缀名的操作

同时这里是用黑名单的形式进行过滤,所以我们可以用黑名单以外的方法绕过

又因为这里会将文件后缀统一转换为小写,所以大小写绕过不合适了

但我们任然可以用phtml

.phtml 是一种常见的文件扩展名,通常用于表示包含 PHP 代码的 HTML 文件。它是 PHP 和 HTML 结合的产物,通常用于在网页中嵌入动态内容。

还可以用php加上对应的php版本,比如php5,php6,php7进行绕过

将后缀改为phtml就可以上传了

 然后再用蚁剑连接就可以了

4,Less-4 .htaccess

先看黑名单内容

可以看到过滤了php的大小写绕过,版本绕过,和JavaScript等

但是我们可以用.htaccess强制将某种类型的文件作为php文件识别

问ai可以知道这是用于配置apache服务器的配置文件,将其内容设置为

AddType application/x-httpd-php .png
.htaccess的文件写法有很多,如果这个不能成功可以网上搜其他的能运行的

 

这里我没用apache服务器,看能不能识别为php文件

这里先上传了.htaccess配置文件,在上传一个图片马,发现并没有被解析

 换成apache服务器后重复上面的操作,访问对应的png文件

这样就能证明上传成功,且被当作了php文件解析

5,Less-5 .user.ini 

这关过滤了.htaccess,可以用.user.ini

 其中.user.ini的文件内容是

这样当我们执行同目录的其他php脚本就会包含a.jpg中的内容,而文件提示upload中有一个readme.php,我们尝试访问

可以看到我们的一句话代码被包含 但这样是没有包含上的,我们修改一句话木马,再次访问

像这样,没有显示出我们写入的一句话木马才是被成功解析 

6,pass-6  大小写绕过后缀名

可以看到,在处理后缀名时没有进行大小写的转换,导致漏洞产生

为什么大写PHP也能被解析?

所以我们上传一句话木马,改名为1.phP

成功上传

 

7,Less-7 后缀名+空格

先看对后缀名的处理

 发现与之前少了删除后缀名中空格的操作,而黑名单操作是将后缀名与里面的字符串整个比较,所以多加一个空格就会被认为是不同的字符串

但这只适用于Windows系统,linux系统在解析文件时不会自带去掉末尾的空格

上传文件用bp抓包,在后缀名末尾增添空格

上传会出现错误

 从源码分析应该是成功上传的,但可能因为路径的问题导致上传错误

尝试将php版本降低,成功上传

 8,Less-8 后缀名+点绕过

先看对后缀名进行了什么样的操作

可以看到少了去后缀名中的点操作,这样我们就可以在后缀名后加点构成假后缀名,因为截取后缀名是截取最后一个点后的字符串

 而我们尝试在Windows系统中在后缀中加点

会发现无法命名,并自动去掉最后一个点

而如果在最后在加上正常后缀名,就会将前面的当作文件名 所以,只要加上一个点就能成功绕过后缀名检查,并上传能执行的一句话木马

牢样子,bp抓包,在后缀名中做点修改

windows会自动将这个点删掉,虽然我们访问的1.php.,但任然可以连接,且后台也是1.php

9,Less-9 附加数据流绕过

看查源码对后缀名的操作,发现少了去除::$DATA 

 所以即使不知道::$DATA是什么,但只要知道他能帮助绕过黑名单就行了

bp抓包后,在后缀名里面加上::$DATA就可以了

刚刚传上去就被火绒gank了 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2331763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字的乘阶运算

求数字的乘阶&#xff1a; 例如&#xff1a;6的乘阶运算&#xff1a;6*5*4*3*2*1 例如&#xff1a;3的乘阶运算&#xff1a;3*2*1 class Program{static void Main(string[] args){Console.WriteLine("请输入数字&#xff1a;");int num_01 Convert.ToInt32 (Con…

OpenCV——图像融合

OpenCV——图像融合 一、引言1.1 图像融合分类 二、C代码实现三、效果展示3.1 标准球3.2 铝制底座 一、引言 在许多计算机视觉应用中(例如机器人运动和医学成像)&#xff0c;需要将来自多幅图像的相关信息集成到一幅图像中。这种图像融合将提供更高的可靠性、准确性和数据质量…

基于 Spring Boot 瑞吉外卖系统开发(四)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;四&#xff09; 新增分类 新增分类UI界面&#xff0c;两个按钮分别对应两个UI界面 两个页面所需的接口都一样&#xff0c;请求参数type值不一样&#xff0c;type1为菜品分类&#xff0c;type2为套餐分类。 请求方法都为POST。…

C语言for循环嵌套if相关题目

一、题目引入 以下代码程序运行结果是多少? 二、思路解析 进入一个for循环 a<100 进入第一个if b1不大于20为假 进入第二个if b4 a这时a自增为2 当b4时,满足第二个if条件 1.b4,a2 当b7时,满足第二个if条件 2.bb37,a3 当b10时,满足第二个if条件 …

springAOP终极总结

开头先大致说一下bean的生命周期 创建 Bean 实例 → 填充属性 → 初始化前&#xff1a; → 所有 postProcessBeforeInitialization(bean, name) 执行 init 方法&#xff08;比如 PostConstruct&#xff09; → 所有 postProcessAfterInitialization(bean, name) OK&#xff…

紫光展锐5G SoC T8300:影像升级,「定格」美好世界

影像能力已成为当今衡量智能手机性能的重要标尺之一。随着消费者对手机摄影需求日益提升&#xff0c;手机厂商纷纷在影像硬件和算法上展开激烈竞争&#xff0c;力求为用户带来更加出色的拍摄体验。 紫光展锐专为全球主流用户打造的畅享影音和游戏体验的5G SoC——T8300&#x…

视频设备轨迹回放平台用EasyCVR打造变电站智慧消防远程集中视频监控方案

一、方案背景 近年来&#xff0c;电力系统中变电站火灾事故频发&#xff0c;消防势态不容乐观。强化变电站的消防安全管理&#xff0c;成为电网企业核心的任务之一&#xff0c;预防火灾、消除隐患不容延缓。目前&#xff0c;我国消防安全领域仍面临着诸多的挑战&#xff0c;基…

每日定投40刀BTC(13)20250404 - 20250408

定投 坚持 《劲松吟》 千山寒雪覆虬枝&#xff0c; 犹自擎空展翠姿。 岂畏风霜摧瘦骨&#xff1f; 心如磐石立崖时。 十年蓄得凌云志&#xff0c; 终向苍穹吐碧丝。 莫道深冬无劲色&#xff0c; 长将孤影刻天墀。

牛客 小红杀怪

通过枚举所有使用y技能的次数来枚举出所有方案&#xff0c;选出最合适的 #include<iostream> #include<cmath> #include<algorithm> using namespace std;int a, b, x, y; int ans500;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>&…

部署大模型不再难:DeepSeek + 腾讯云 HAI 实战教程

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

JVM中常见的垃圾回收器(Garbage Collectors)

JVM中常见的垃圾回收器&#xff08;Garbage Collectors&#xff09;的分类和描述&#xff1a; 一、新生代收集器&#xff08;Young Generation Collectors&#xff09; 新生代收集器主要负责收集新创建的对象&#xff0c;这些对象通常存活时间较短。 Serial GC • 单线程收集…

极空间NAS进阶玩法:Debian 系统安装教程

文章目录 第 1 步:下载 Debian 镜像第 2 步:创建虚拟机创建虚拟机安装操作系统第 3 步:登录 Debian第 4 步:使用 Docker 搭建跳板机远程访问参考🚀 本文目标:在极空间 NAS 中安装 Debian 12。 第 1 步:下载 Debian 镜像 下载地址:https://www.debian.org/distrib/ 第…

煤矿数据机房防静电地板:智能化时代的“隐形守护者”

在煤矿行业&#xff0c;调度室不仅是安全生产的“大脑”&#xff0c;更是数据交互的“神经中枢”。随着智能化升级&#xff0c;如今的煤矿调度室早已不再是传统的电话挂图配置&#xff0c;而是集成了高清监控、精准定位系统、智能传感器等高精密电子设备的数字化空间。然而&…

操作符详解(下)——包含整形提升

1.讲解剩下的操作符 1.1:逗号表达式 逗号表达式&#xff0c;就是用逗号隔开的多个表达式。 逗号表达式&#xff0c;从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果 例题1&#xff1a; //C的值是多少&#xff1f; int main() {int a 1;int b 2;int c (a &g…

Kairos 的野望:构建“智能体即服务”生态,让万物皆可 “Agent”

随着 AI Agent 成为 AI 领域的主要叙事&#xff0c;AI 赛道的发展也逐渐进入到 2.0 时代。聚焦于 AI Agent 概念本身&#xff0c;其是一种具备感知环境、进行决策和执行任务或服务的智能系统&#xff0c;它们通常能够理解自然语言指令&#xff0c;学习用户偏好&#xff0c;并在…

LeetCode 2968.执行操作使频率分数最大

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 你可以对数组执行 至多 k 次操作&#xff1a; 从数组中选择一个下标 i &#xff0c;将 nums[i] 增加 或者 减少 1 。 最终数组的频率分数定义为数组中众数的 频率 。 请你返回你可以得到的 最大 频率分数。 众数指的…

多模态智能体框架MM-StoryAgent:跨模态叙事视频生成的技术突破

一、研究背景与核心价值 由上海交通大学与阿里巴巴联合研发的MM-StoryAgent系统,基于多智能体协同框架实现了故事创作到视频生成的完整自动化流程。该系统通过整合文本、视觉、语音、音效等多模态生成技术,构建了包含角色一致性保持、跨模态适配优化等创新机制的叙事内容生产…

Codeforces Round 1013 (Div. 3)

Problem - A - Codeforces 解题思路&#xff1a; 对每个需要的数字进行计数 #include<bits/stdc.h> using namespace std;int main() {int t;cin >> t;while (t--){int n;cin >> n;int two 2;int zero 3;int five 1;int three 1;int one 1;int flag …

银河麒麟系统虚拟机网络ping不通的解决方法

问题描述&#xff1a;使用NAT模式搭建了银河麒麟系统虚拟主机&#xff0c;虚拟机内部可以联网&#xff0c;可以查询到具体的ip地址&#xff0c;同时也可以在虚拟机内部ping同宿主机ip&#xff0c;但使用宿主机却无法ping同银河麒麟虚拟机ip&#xff0c;使用ssh、ftp、sftp等工具…

大数据学习(105)-大数据组件分析

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…