文件上传是很多 web application 所需要的功能。但如果 web application 对上传的文件过滤不严格的话就会产生文件上传漏洞。
产生
文件上传漏洞是指由于程序员在对用户文件上传部分的控制不严格,而导致的用户可以越权上传一些非正常文件。如木马,WebShell等。这种攻击方式是最为直接和有效的,并且隐蔽性也较好。
“文件上传”本身没有问题,有问题的是文件上传后,服务器如何对文件进行判断,筛选。如果服务器的处理做的不够安全,则会导致文件上传漏洞的产生。
使用
将攻击用的 webshell,木马等文件打包上传即可。(但服务器怎么可能不过滤呢)
过滤
1.前端限制
如以下代码:
function check(){
var filename=document.getElementById("file");
var str=filename.value.split(".");
var ext=str[str.length-1];
if(ext=='jpg'||ext=='png'||ext=='jpeg'||ext=='gif'){
return true;
}else{
alert("这不是图片!")
return false;
}
return false;
}
这种前端的过滤仅仅只是在本地进行检查,只能算是防止用户误上传用的。
绕过方法
想要绕过的话就先以正常的扩展名上传,再通过抓包将扩展名改回扩展名。
如果使用JS过滤的话禁止JS就好了。
2.文件扩展名判断
一些 web application会通过上传文件的后缀名进行判断。如果后缀名不正常就阻止上传。
两种判断策略:
(1): 黑名单策略
通过禁止不合法的扩展名来过滤。但这种方法并不是很好。(谁知道传上来的是什么扩展名)
(2): 白名单策略
只允许特定的扩展名上传。
如DVWA中的限制:
if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG")
//只有满足这几个扩展名才可以上传
绕过方法
在一些 web server 中存在解析漏洞:
nginx < 8.03 空字节代码执行漏洞
在Fast-CGI关闭的状态下,文件路径 /xx.jpg%00.php 会解析成PHP文件。
apache解析漏洞
apache在解析文件时,是从右往左开始解析,如果遇到不认识的后缀名,就在往左解析。
如解析类似 shell.php.xxx.rar的文件时,rar无法解析,接着往左判断xxx也不可解析,最后到PHP后缀。
(所以说黑名单策略白名单策略)
3.检查HTTP Header中的Content-Type
HTTP协议规定了上传资源的时候在Header中加上一项文件的MIMETYPE,来识别文件类型,这个动作是由浏览器完成的,服务端可以检查此类型来进行过滤。
//MIMETYPE:判断文件真实类型。它是先由文件头判断文件类型,再根据内容和扩展名判断。
绕过方法
使用工具抓包篡改Header即可。
常用的MIMETYPE:
image/jpeg(JPEG图像)
image/png(PNG图像)
video/mpeg(MPEG动画)
application/octet-stream(二进制数据)
application/pdf(PDF文档)
application/(编程语言) 该种语言的代码
application/msword(Microsoft Word文件)
message/rfc822(RFC 822形式)
multipart/alternative(HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)
application/x-www-form-urlencoded(POST方法提交的表单)
multipart/form-data(POST提交时伴随文件上传的表单)
4.分析文件头内容来检查文件类型
这种方法是直接检查文件的开头,利用的是每一个特定类型的文件都会有不太一样的开头或者标志位。
正常情况下,通过判断前10个字节,基本上就能判断出一个文件的真实类型。
绕过方法
在上传的文件前面加上相应的头即可。因为PHP会将 <? 之前的内容当作html文本,不解释而跳过之,后面的代码仍然能够得到执行。
5.限制Web Server对于特定类型文件的行为
文件上传漏洞的根本原因就是 web server 将本应是数据的内容当成了代码而去执行。知道了这点就可以在这方面进行限制。
绕过方法
这一部分视频里是直接将上传文件所在的upload文件夹的执行权限去掉。我没想到如何绕过。
参考资料里的限制后面再看吧(咕咕咕警告)
参考资料:
https://www.jianshu.com/p/5ebba0482980
https://www.kanxue.com/book-6-307.htm