这几天一直在搞sql注入靶场,写了几关,最新专栏文件上传漏洞来啦
目录
一、文件上传
文件上传
文件上传是网站的常见功能,多用于上传照片、视频、文档等许多类型文件
文件上传流程
①前端选择文件,进行提交
②浏览器形成POST MultiPart报文发送给服务器
③服务器中间件接收到报文,解析后交给相关后端代码进行处理
④后端代码将上传的文件内容写入到临时文件中(PHP特有)
⑤写入到文件中,文件名为提交的文件名或以一定规则生成的文件名
二、文件上传漏洞
当文件上传点未对上传的文件进行严格的验证和过滤时,就容易造成任意文件上传,包括上传动态文件(asp/php/jsp等)
如果上传的目标目录没有限制执行权限,导致所上传的动态文件如webshell可以正常执行并且可以访问,即造成了文件上传漏洞
文件上传漏洞的必要条件
①存在上传点
②可以上传动态文件
③上传目录具有执行权限,并且上传的文件可执行
④可访问到上传的动态文件
防护手段(上传流程中检测)
前端提交时:JavaScript检测 Flash AS检测
数据传输时:WAF拦截 IPS拦截
后端处理时:扩展名检测 文件格式检测 MIME TYPE检测 内容检测
写入文件系统时:文件重命名 杀毒软件查杀
访问文件时:限制执行权限 文件上传到未知位置
三、无防护的文件上传演示
使用了中国剑蚁、DVWA中low级别的文件上传漏洞
构造php文件
先测试一下漏洞,phpinfo()是查看php信息的函数
直接上传并访问
注意这里的路径有两个../意思是回到上层目录,也就是回到了/dvwa
所以文件上传到/dvwa/hackble/uploads/test.php
直接访问一下
看到这个页面就说明上传成功啦
下一步上传一句话木马,用中国剑蚁连接
一句话木马还是比较简单的,网上一搜就有,这里是针对php的一句话木马
直接上传并访问
报错了不要慌,打开剑蚁
添加数据 输入url 密码为cmd
测试连接,连接成功
已经进入网站目录啦,可以对网站数据进行更改!
可以看到文件上传漏洞的威力非常巨大!
四、绕过前端js检测上传
前端的防护中,也许会对上传的文件的后缀名进行检测,判断是否为上传的格式,如头像上传处检测是否为png/jpg/jpeg文件等等。如果上传的格式不对,则会弹出提示文字,此时上传失败
upload-labs靶场举例
可以看到,只让上传jpg/png/gif文件
js绕过手段
①F12查看网页元素,将校验文件后缀名的文件或函数删除,则可以直接进行上传
②先将恶意文件的后缀名改为要求的后缀,再进行抓包修改
绕过演示
①删除校验文件/函数
看到checkFile()函数
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代码,直接给它删了
上传test.php
上传成功了
访问一下upload/test.php
成功了
②抓包
将test.php 改为test.png开启抓包
先删掉前面传的内容
开启抓包
上传test.png
在抓包中修改,ps localhost和127.0.0.1只能抓到上面那部分,也不知道为啥,用自己的ip就可以啦
放包,访问
上传成功!