upload-labs通关笔记-第01关 文件上传之前端绕过(3种渗透方法)
目录
一、实验准备
1.构造脚本
2.打开靶场第1关
二、源码分析
三、修改页面法渗透
1.右键inspect
2.定位checkFile函数
3.修改页面并上传
4.获取页面地址
5.访问脚本
四、改包法渗透
1.修改后缀为jpg
2.bp设置拦截状态
3.上传jpg后缀木马
4.bp拦截并发到repeater
5.修改后缀并发包
6.获取脚本路径
7.访问脚本
五、禁用js法
1.清空上传文件
2.禁用js并刷新页面
3.上传脚本
4.获取脚本地址
5.访问脚本
本文通过《upload-labs靶场通关笔记系列》来进行upload-labs靶场的渗透实战,本文讲解upload-labs靶场第一关文件上传客户端绕过渗透实战,通过三种方法完成渗透。
一、实验准备
1.构造脚本
构造文件上传的脚本,内容为获取服务器的php版本信息,脚本code内容如下所示。
<?php phpinfo();?>
- 脚本命名为ljn_info.php
2.打开靶场第1关
firefox打开upload靶场第一关,http://127.0.0.1:8004/Pass-01/index.php,进入基于客户端的文件上传关卡,点击清空上传文件。
Note:
(1)这里要注意打开的是需要打开靶场pass01关卡
(2)需点击清空上传文件,确保此次实验为最新结果,并在没有上传目录时构建upload文件夹
二、源码分析
右键view-source查看源码,分析文件上传pass01关卡,发现文件上传的过滤使用JavaScript的函数checkFile进行过滤。而checkFile函数在onsubmit中调用,即在浏览器操作界面中,点击“上传”按钮时调用。
完整的代码如下所示。
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;}
}
分析得出三种渗透思路:
- 禁用js法:通过禁用js使得onsubmit调用的checkFile并不生效。
- 修改前端页面法:将onsubmit调用的函数更改为空函数,将php脚本上传到服务器。
- 改包法:将脚本改为jpg后缀后上传,使通过前端过滤函数的检查, 然后将报文发送给bp,在bp中将报文改为php后缀并上传到服务器。
三、修改页面法渗透
1.右键inspect
upload-labs靶场中浏览(browse)选中获取phpinfo的脚本,暂不点击上传,右键inspect。
2.定位checkFile函数
定位到onsubmit调用checkFile函数的位置,如下图红框所示。
3.修改页面并上传
将onsubmmit函数调用checkFile函数的位置替换为空函数,并且不刷新当前页面的情况下点击上传,如下所示。
4.获取页面地址
上传成功后,右键图片获取上传脚本地址,脚本地址如下所示。
http://127.0.0.1:8004/upload/ljn_info.php
5.访问脚本
访问上传成功的脚本,获取到php版本信息,如下所示渗透成功。
四、改包法渗透
1.修改后缀为jpg
将php脚本的后缀改名为jpg,为了具有区分度将文件名的尾部改为_info_日期.jpg。
如下所示,复制脚本ljn_info.php,并将其重命名为ljn_info_0314.jpg,通过文本编辑器打开图片后效果如下所示。
2.bp设置拦截状态
打开burpsuite,proxy-intercept配置为intercept is off状态。
3.上传jpg后缀木马
upload-labs靶场上传后缀改为jpg的脚本,点击上传。
4.bp拦截并发到repeater
burpsuite.抓包后,在http history历史记录中找到此post报文,点击选中此报文,并将报文送到repeater。
在repeater中找到此报文,注意如下红圈圈住的部分为要修改的文件名,需要将后缀jpg改为php。
5.修改后缀并发包
在burpsuite intruder中的repeater中将jpg后缀改为php,并点击send,同时在response的render中查看图形化结果,如下所示上传成功。
6.获取脚本路径
在response的raw中获取图片上传后的路径。
分析获取上传后的脚本在服务器的地址。
如上所示,上传的脚本在服务器的地址为../upload/ljn_info _0314.php
当前文件上传的关卡路径为http://127.0.0.1:8004/Pass-01/index.php
相对于index.php,可以得到上传到服务器后的脚本路径
http://127.0.0.1:8004/upload/ljn_info _0314.php
7.访问脚本
访问上传成功后的脚本,如下所示上传成功。
五、禁用js法
1.清空上传文件
打开靶场第一关,由于我们要用新的方法实现渗透,为避免同一文件多次上传而后台未重命名文件,导致明明这一次渗透没有上传成功,却因为同一文件之前上传成功过,而不清楚本次上传失败,故而每次开始渗透,都要养成清空上传文件的好习惯。
注意浏览器的右上角,有安装好js插件,这个插件目前是红色的,代表开启了js功能。
2.禁用js并刷新页面
windows的firefox打开文件上传靶场第一关,点击禁用js插件,并刷新页面(注意:如果不刷新禁用不会生效)。
3.上传脚本
选择ljn_info.php并点击文件上传,如下所示。
4.获取脚本地址
上传成功后,右键图片获取上传脚本地址,脚本地址如下所示。
http://127.0.0.1:8004/upload/ljn_info.php
5.访问脚本
上传成功的脚本,获取到php版本信息,如下所示渗透成功。
做完实验开启js并刷新页面,否则很多页面会打不开。