前言
之前在CTFHub做了一些关于文件上传的题目,了解了一些关于文件上传的知识,觉得还蛮好玩儿的。那想进一步的深入了解一下文件上传,所以在自己所搭建的靶场upload-labs,通过这个再来学习一下文件上传漏洞。好,话不多说。开始整活。
Pass-01 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;
}
}
通过代码审计了解到在上传时,只能是上传.jpg|.png|.gif文件,其他的都允许上传。这里有一个文件检查函数,是用JS写的。这就是文件上传前端检测,也就是JS检测。这个时候,我们只需要使用Burpsuite抓包修改绕过客户端文件名检验即可。
那我们先上传一个允许上传的文件——jpg文件,然后抓包,修改成php文件
然后go一下
这就说明上传成功,显示出了路径,那我们放开,上传。使用蚁剑连接一下,测试。
成功了!!!
Pass-02 MIME类型检测
先找出代码进行分析,这是对Content- - Type进行了检测,也就是我们所说的MIME类型检测。对于这样的题我们只需要修改一下Content--Type的值即可。
那就需要bp抓包了
修改Content-Type后go一下就可以得到路径。使用蚁剑连接一下。
成功!!!
Pass-03 黑名单验证
第三关这个属于是黑名单检测,我们先看源码
这个是不允许上传'.asp','.aspx','.php','.jsp',限制了文件类型,不过这个还是不严谨。大大提高了攻击者,攻击手段。虽说它限制了php文件,但是我们可使用.htaccess文件,之前已经在CTFHub当中解释。然后再上传一个允许上传的文件jpg,通过抓包得知路径
成功!!
黑名单绕过的话其实分好多种,这只是其中之一,那具体的我们再题当中会一一解释
Pass-04 .htaccess
第四关与第三关是一样的都是黑名单绕过,方法也是一样的。
通过源代码来看。这个只是更多的限制了文件类型而已