文件上传漏洞原理学习
什么是文件上传漏洞
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。“文件上传” 本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
这种攻击方式是最为直接和有效的,所以我们需要思考的是如何绕过检测和过滤。
漏洞危害
上传文件是web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行。
上传文件是病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接 自劢运行
上传文件是Flash的策略文件 crossdomain.xml,黑客用以控制Flash在该域 下的行为(其他通过类似方式控制策略文件的情况类似);
上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行;
上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。
除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢 出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了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了
相关文章:
文件上传漏洞原理学习
什么是文件上传漏洞 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。“文件上传” 本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全&#…...
数字的乘阶运算
求数字的乘阶: 例如:6的乘阶运算:6*5*4*3*2*1 例如:3的乘阶运算:3*2*1 class Program{static void Main(string[] args){Console.WriteLine("请输入数字:");int num_01 Convert.ToInt32 (Con…...
OpenCV——图像融合
OpenCV——图像融合 一、引言1.1 图像融合分类 二、C代码实现三、效果展示3.1 标准球3.2 铝制底座 一、引言 在许多计算机视觉应用中(例如机器人运动和医学成像),需要将来自多幅图像的相关信息集成到一幅图像中。这种图像融合将提供更高的可靠性、准确性和数据质量…...
基于 Spring Boot 瑞吉外卖系统开发(四)
基于 Spring Boot 瑞吉外卖系统开发(四) 新增分类 新增分类UI界面,两个按钮分别对应两个UI界面 两个页面所需的接口都一样,请求参数type值不一样,type1为菜品分类,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 实例 → 填充属性 → 初始化前: → 所有 postProcessBeforeInitialization(bean, name) 执行 init 方法(比如 PostConstruct) → 所有 postProcessAfterInitialization(bean, name) OKÿ…...
紫光展锐5G SoC T8300:影像升级,「定格」美好世界
影像能力已成为当今衡量智能手机性能的重要标尺之一。随着消费者对手机摄影需求日益提升,手机厂商纷纷在影像硬件和算法上展开激烈竞争,力求为用户带来更加出色的拍摄体验。 紫光展锐专为全球主流用户打造的畅享影音和游戏体验的5G SoC——T8300&#x…...
视频设备轨迹回放平台用EasyCVR打造变电站智慧消防远程集中视频监控方案
一、方案背景 近年来,电力系统中变电站火灾事故频发,消防势态不容乐观。强化变电站的消防安全管理,成为电网企业核心的任务之一,预防火灾、消除隐患不容延缓。目前,我国消防安全领域仍面临着诸多的挑战,基…...
JVM性能调优:参数配置×内存诊断×GC调优实战
🚀前言 “你的Java应用是否还在经历莫名卡顿?半夜被OOM报警惊醒?GC日志像天书看不懂? 本文将用20个真实案例50个关键参数,带你掌握: 参数调优:如何用-XX:UseG1GC让GC暂停从秒级降到毫秒级&…...
如何优化 App 启动速度以实现快速打开
一、启动阶段分析(先明确问题) Android App 启动分为三个阶段: 冷启动(最慢):进程不存在,需初始化系统和 App 资源 温启动:Activity 被销毁但进程存活 热启动(最快&am…...
逍遥模拟器ARM过检测技术全解析
逍遥模拟器ARM框架安装magisk和修改设备型号隐藏应用隐藏root过检测 逍遥模拟器ARMmagisk改设备型号隐藏应用隐藏root 引言 逍遥模拟器以其出色的性能和丰富的功能,深受广大用户喜爱,让用户能在电脑上轻松运行各类安卓应用和游戏。然而,为保…...
每日定投40刀BTC(13)20250404 - 20250408
定投 坚持 《劲松吟》 千山寒雪覆虬枝, 犹自擎空展翠姿。 岂畏风霜摧瘦骨? 心如磐石立崖时。 十年蓄得凌云志, 终向苍穹吐碧丝。 莫道深冬无劲色, 长将孤影刻天墀。...
量子计算模拟中的GPU加速:从量子门操作到Shor算法实现
一、量子模拟的算力困境与GPU破局 量子计算模拟面临指数级增长的资源需求:n个量子比特的态向量需要2^n个复数存储空间。当n>30时,单机内存已无法承载(1TB需求)。传统CPU模拟器(如Qiskit的Aer)在n28…...
牛客 小红杀怪
通过枚举所有使用y技能的次数来枚举出所有方案,选出最合适的 #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 实战教程
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
企业资源计划(ERP)系统:数字化转型的核心引擎
在当今高度数字化的商业环境中,企业资源计划(Enterprise Resource Planning,ERP)系统已成为企业优化运营、提升竞争力的重要工具。本文将从定义与发展、核心功能模块、行业应用场景、优势与挑战以…...
基于二叉堆实现的 PriorityQueue
基于二叉堆实现的 PriorityQueue 是一种常见的数据结构,广泛用于任务调度、路径搜索、事件模拟等场景。下面我将用 Java 语言实现一个简单的基于最小堆的 PriorityQueue,即优先级最小的元素先出队。 ✅ 实现目标 使用数组实现二叉最小堆(即父…...
JVM中常见的垃圾回收器(Garbage Collectors)
JVM中常见的垃圾回收器(Garbage Collectors)的分类和描述: 一、新生代收集器(Young Generation Collectors) 新生代收集器主要负责收集新创建的对象,这些对象通常存活时间较短。 Serial GC • 单线程收集…...
极空间NAS进阶玩法:Debian 系统安装教程
文章目录 第 1 步:下载 Debian 镜像第 2 步:创建虚拟机创建虚拟机安装操作系统第 3 步:登录 Debian第 4 步:使用 Docker 搭建跳板机远程访问参考🚀 本文目标:在极空间 NAS 中安装 Debian 12。 第 1 步:下载 Debian 镜像 下载地址:https://www.debian.org/distrib/ 第…...
煤矿数据机房防静电地板:智能化时代的“隐形守护者”
在煤矿行业,调度室不仅是安全生产的“大脑”,更是数据交互的“神经中枢”。随着智能化升级,如今的煤矿调度室早已不再是传统的电话挂图配置,而是集成了高清监控、精准定位系统、智能传感器等高精密电子设备的数字化空间。然而&…...
操作符详解(下)——包含整形提升
1.讲解剩下的操作符 1.1:逗号表达式 逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果 例题1: //C的值是多少? int main() {int a 1;int b 2;int c (a &g…...
Kairos 的野望:构建“智能体即服务”生态,让万物皆可 “Agent”
随着 AI Agent 成为 AI 领域的主要叙事,AI 赛道的发展也逐渐进入到 2.0 时代。聚焦于 AI Agent 概念本身,其是一种具备感知环境、进行决策和执行任务或服务的智能系统,它们通常能够理解自然语言指令,学习用户偏好,并在…...
LeetCode 2968.执行操作使频率分数最大
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 你可以对数组执行 至多 k 次操作: 从数组中选择一个下标 i ,将 nums[i] 增加 或者 减少 1 。 最终数组的频率分数定义为数组中众数的 频率 。 请你返回你可以得到的 最大 频率分数。 众数指的…...
多模态智能体框架MM-StoryAgent:跨模态叙事视频生成的技术突破
一、研究背景与核心价值 由上海交通大学与阿里巴巴联合研发的MM-StoryAgent系统,基于多智能体协同框架实现了故事创作到视频生成的完整自动化流程。该系统通过整合文本、视觉、语音、音效等多模态生成技术,构建了包含角色一致性保持、跨模态适配优化等创新机制的叙事内容生产…...
Codeforces Round 1013 (Div. 3)
Problem - A - Codeforces 解题思路: 对每个需要的数字进行计数 #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 …...
STM32 CRC校验与芯片ID应用全解析:从原理到实践 | 零基础入门STM32第九十七步
主题内容教学目的/扩展视频CRC与芯片ID原理实现CRC校验和读取芯片ID为单片机应用提供数据验证和身份识别的功能。 师从洋桃电子,杜洋老师 📑文章目录 一、CRC校验功能解析1.1 CRC基本原理1.2 核心功能对比 二、CRC校验应用实战2.1 典型应用场景2.2 程序实…...
巴特沃斯滤波器
一、MATLAB 实现 1. 巴特沃斯滤波器函数(支持图像/信号) function H butterworth_filter(D0, size, n, mode) % BUTTERWORTH_FILTER 生成巴特沃斯滤波器 % - D0: 截止频率 % - size: 滤波器尺寸(图像:[height, width]&…...
银河麒麟系统虚拟机网络ping不通的解决方法
问题描述:使用NAT模式搭建了银河麒麟系统虚拟主机,虚拟机内部可以联网,可以查询到具体的ip地址,同时也可以在虚拟机内部ping同宿主机ip,但使用宿主机却无法ping同银河麒麟虚拟机ip,使用ssh、ftp、sftp等工具…...
大数据学习(105)-大数据组件分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...
基于SpinrgBoot+Vue的医院管理系统-026
一、项目技术栈 Java开发工具:JDK1.8 后端框架:SpringBoot 前端:Vue开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 二、功能介绍 (1)…...

