安全-Pass01之js绕过(upload-labs)
Posted 小狐狸FM
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全-Pass01之js绕过(upload-labs)相关的知识,希望对你有一定的参考价值。
前言
js
即javascript
是web
编程语言,用于控制网页行为,是一种用于web
前端的语言
第一关中主要是绕过js
的前端检测,服务器后端没有对文件进行再次过滤
一、题目
js
前端代码
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;
}
}
二、WriteUp
[1]. 源码审计
js
的检测是优先于burpsuite
抓包的,所以要提交文件就需要绕过js
检测- 变量
file
存储文件名
JavaScript document getElementByName() 方法
var file = document.getElementsByName('upload_file')[0].value;
- 在下方的
js
代码中,先是定义了一个字符串变量allow_ext
规定允许上传的文件后缀- 然后获取文件名中最后一个小数点右侧的字符串存入变量
ext_name
- 假设文件名为
test1.txt
,ext_name
的值为txt
,ext_name + "|"
就是txt|
因为txt|
字符串.jpg|.png|.gif
中,所以allow_ext.indexOf(ext_name + "|"
的值为-1
,会进入if
语句中跳出错误提示的弹窗并结束程序
JavaScript indexOf() 方法
//定义允许上传的文件类型
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;
}
[2]. js绕过
创建一个文本,修改后缀为
jpg、png或gif
可绕过前端js
的检测
- 因为绕过
js
直接上传到服务器之后仍然是一个图片格式的文件,就算能访问图片还是不能执行里面的代码- 所以上传的同时需要开启
burpsuite
抓包,绕过js
就能被抓到
修改文件名后,点击forward
发送报文
- 成功发送之后,就可以取消抓包,查看上传的情况
- 上传成功后返回了我们上传的图片,右键保存图片的
url
并访问,没有报错就说明php
代码被执行了
shell url
就填写刚刚的复制下来的图片url
地址,使用蚁剑工具连接成功
以上是关于安全-Pass01之js绕过(upload-labs)的主要内容,如果未能解决你的问题,请参考以下文章