目录
第01关 前端js过滤绕过
1.禁用js法
(1)禁用js
(2)刷新页面使生效
(3)上传脚本
(4)开启js并刷新页面
2.修改页面法1
(1)右键查询元素
(2)搜索关键字check
(3)删除函数调用
(4)上传脚本
(5)访问脚本
3.bp改包法
(1)分析源码
(2)将脚本后缀改为jpg
(3)上传info.jpg并bp抓包
(4)bp中将info.jpg改名为info.php并发送
(5)访问脚本
第01关 前端js过滤绕过
打开第一关靶场iwebsec 靶场漏洞库iwebsechttp://iwebsec.com:81/upload/01.php
构造脚本info.php,内容为显示php的版本信息<?php phpinfo();?> 如下所示
随手上传info.php,提示失败
右键查询源码,发现源码中过滤文件后缀的函数checkFile是通过前端的js代码实现的,如下所示
1.禁用js法
(1)禁用js
使用firefox的禁用js插件,如下图所示js标签红色时代表启动js,js标签为灰色时代表禁用js
(2)刷新页面使生效
禁用js后刷新页面使禁用生效
(3)上传脚本
再次将构造的info.php进行上传 ,此时点击上传后显示成功
访问info.php,http://iwebsec.com:81/upload/uploads/info.php 如下所示渗透成功。
(4)开启js并刷新页面
为了避免关掉js对之后造成影响,做完了禁用js的操作后,需要开启js并且刷新当前页面使其生效
2.修改页面法
(1)右键查询元素
(2)搜索关键字check
在搜索框内输入check,找到源码分析中的函数调用处 return checkFile,如下所示
(3)删除函数调用
将双引号包含的return checkFile()选中后删除,如下所示
(4)上传脚本
在删除函数调用后,不刷新当前页面,直接上传info.php脚本
如下所示提示上传成功
(5)访问脚本
访问info.php,http://iwebsec.com:81/upload/uploads/info.php 如下所示渗透成功。
3.bp改包法
(1)分析源码
过滤函数的作用是判断文件的后缀,使用白名单的方法(只允许jpg,jpeg,png,gif,bmp这几种类型后缀),如下所示
<script type="text/javascript">
function checkFile() {
var file = document.getElementsByName('upfile')[0].value;
if (file == null || file == "") {
alert("你还没有选择任何文件,不能上传!");
return false;
}
//定义允许上传的文件类型
var allow_ext = ".jpg|.jpeg|.png|.gif|.bmp|";
//提取上传文件的类型
var ext_name = file.substring(file.lastIndexOf("."));
//alert(ext_name);
//alert(ext_name + "|");
//判断上传文件类型是否允许上传
if (allow_ext.indexOf(ext_name + "|") == -1) {
var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
alert(errMsg);
return false;
}
}
</script>
根据源码,可以将info.php改名为info.jpg在客户端绕过过滤,然后使用burpsuite抓包并将报文再次由info.jpg改回info.php发送,这样即可实现上传绕过 。
(2)将脚本后缀改为jpg
将info.php改名为info.jpg,如下所示:
(3)上传info.jpg并bp抓包
bp开启拦截模式
将info.jpg上传
在bp中抓包,并将此包发送给repeater
(4)bp中将info.jpg改名为info.php并发送
将filename中的info.jpg改为info.php
修改后如下所示,并点击发送
如上所示,等待报文相应后可知脚本上传已成功。
(5)访问脚本
访问info.php,http://iwebsec.com:81/upload/uploads/info.php 如下所示渗透成功。
如上所示,渗透成功