Loading... 文件上传是很多 web application 所需要的功能。但如果 web application 对上传的文件过滤不严格的话就会产生文件上传漏洞。 ##产生 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不严格,而导致的用户可以越权上传一些非正常文件。如木马,WebShell等。这种攻击方式是最为直接和有效的,并且隐蔽性也较好。 “文件上传”本身没有问题,有问题的是文件上传后,服务器如何对文件进行判断,筛选。如果服务器的处理做的不够安全,则会导致文件上传漏洞的产生。 ##使用 将攻击用的 webshell,木马等文件打包上传即可。(但服务器怎么可能不过滤呢) ##过滤 ###1.前端限制 如以下代码: ```php 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中的限制: ```php 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: ```html 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 最后修改:2019 年 08 月 05 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏