upload-labs靶场Pass-01

ops/2024/10/20 19:16:01/

upload-labs靶场Pass-01

在这里插入图片描述

分析

查看提示,提示如下
在这里插入图片描述

查看源码

function checkFile() {var file = document.getElementsByName('upload_file')[0].value;if (file == null || file == "") {alert("请选择要上传的文件!");return false;}//定义允许上传的文件类型var allow_ext = ".jpg|.png|.gif";//提取上传文件的类型var ext_name = file.substring(file.lastIndexOf("."));//判断上传文件类型是否允许上传if (allow_ext.indexOf(ext_name + "|") == -1) {var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;alert(errMsg);return false;}

源码得知只能上传.jpg|.png|.gif,

关于前端检测:

主要是通过javascript代码进行检测,非常容易进行绕过。

1. 原理:
  Web应用系统虽然对用户上传的文件进行了校验,但是校验是通过前端javascript代码完成的。由于恶意用户可以对前端javascript进行修改或者是通过抓包软件篡改上传的文件,就会导致基于js的校验很容易被绕过。

2. 如何判断当前页面使用前端is的验证方式:
  前端验证通过以后,表单成功提交后会通过浏览器发出─条网络请求,但是如果前端验证不成功,则不会发出这项网络请求;可以在浏览器的网络元素中查看是否发出了网络请求。

3. 绕过方法:
删除或者禁用js:火狐浏览器–>about:config–>JavaScriptenable-false (ajax)
使用代理上传文件,Burp Suite;上传符合要求的文件类型,抓包修改文件类型。

方法一

按F12打开检查,

<form enctype="multipart/form-data" method="post" onsubmit="return checkFile()"><p>请选择要上传的图片:</p><p><input class="input_file" type="file" name="upload_file"><input class="button" type="submit" name="submit" value="上传"></p></form>

结合前面的js代码,从此处可以得知,只要我们不要让文件去调用js检查后缀就可以绕过,删掉下图红色的部分,就可以绕过
在这里插入图片描述
我上传一个php文件,文件为php的一句话木马
在这里插入图片描述
上传成功
在这里插入图片描述
可以看到服务器里确实上传成功
在这里插入图片描述
然后就可以使用webshell工具进行连接

方法二

我们将之前上传的文件删除
再次来到pass-01界面
鼠标右键,查看页面源代码
将代码复制,新建txt文件,把代码复制进去,
然后找到

<form  enctype="multipart/form-data" method="post" onsubmit="return checkFile()"><p>请选择要上传的图片:<p><input class="input_file" type="file" name="upload_file"/><input class="button" type="submit" name="submit" value="上传"/></form>

在这form里添加action=“http://192.168.140.130/upload/Pass-01/index.php”,

<form action="http://192.168.140.130/upload/Pass-01/index.php" enctype="multipart/form-data" method="post" onsubmit="return checkFile()"><p>请选择要上传的图片:<p><input class="input_file" type="file" name="upload_file"/><input class="button" type="submit" name="submit" value="上传"/></form>

然后删除文件里的js代码

<script type="text/javascript">function checkFile() {var file = document.getElementsByName('upload_file')[0].value;if (file == null || file == "") {alert("请选择要上传的文件!");return false;}//定义允许上传的文件类型var allow_ext = ".jpg|.png|.gif";//提取上传文件的类型var ext_name = file.substring(file.lastIndexOf("."));//判断上传文件类型是否允许上传if (allow_ext.indexOf(ext_name) == -1) {var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;alert(errMsg);return false;}}
</script>

将文件保存为html,然后打开,进行上传,上传一个php一句话木马,上传 成功

方法三

我们可以将php一句话木马后缀修改为jpg,
在这里插入图片描述
进行提交,因为问价后缀是jpg,前端检验合格
在这里插入图片描述

打开buro suite进行提交的抓包,
在这里插入图片描述
将其红框的jpg修改为php,发包,上传成功。
原理:我们在前端上传的jpg格式文件,在前端检验,然后抓包,修改后缀,到达后端因为后端没有验证,所以为php格式,上传成功
OVER!


http://www.ppmy.cn/ops/127064.html

相关文章

算法-二叉树展开单链表

这道题我们可以利用栈来做&#xff0c;利用栈先进后出的特性 每次先加入右节点再加入左节点&#xff0c;这样的话弹出的时候正好左节点在前面&#xff0c;右节点在后面满足题目要求。 然后至于是构造单链表&#xff0c;我们可以用一个prev节点 prev的left永远都是null 而prev的…

Java中的四种内部类

Java中的四种内部类&#xff0c;我们可以想象成一个家庭里的不同成员&#xff0c;每个成员都有其特殊的角色&#xff1a; 成员内部类&#xff08;Member Inner Class&#xff09; - 就像家里的孩子&#xff0c;它们属于家庭&#xff08;类&#xff09;&#xff0c;并且可以在家…

SpringBoot智能推荐:健康生活新体验

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

力扣 中等 143.重排链表

文章目录 题目介绍题解 题目介绍 题解 class Solution {public void reorderList(ListNode head) {ListNode mid middleNode(head);ListNode head2 reverseList(mid);while (head2.next ! null) {ListNode nxt head.next;ListNode nxt2 head2.next;head.next head2;head2.…

智联云采 SRM2.0 testService SQL注入漏洞复现

0x01 产品简介 智联云采是一款针对企业供应链管理难题及智能化转型升级需求而设计的解决方案,针对企业供应链管理难题,及智能化转型升级需求,智联云采依托人工智能、物联网、大数据、云等技术,通过软硬件系统化方案,帮助企业实现供应商关系管理和采购线上化、移动化、智能…

K8s-pod控制器HPA、DS、Job、CJ

一、Horizontal Pod Autoscaler(HPA) 在上一节&#xff0c;我们已经可以实现通过手工执行kubectl scale命令实现Pod扩容或缩容&#xff0c;但是这显然不符合Kubernetes的定位目标——自动化、智能化。 Kubernetes期望可以实现通过监测Pod的使用情况&#xff0c;实现pod数量的自…

基于SpringBoot+Vue+uniapp的诗词学习系统的详细设计和实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

LeetCode搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 …