不安全的文件上传漏洞概述

不安全的文件上传漏洞概述
文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。
所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
–验证文件类型、后缀名、大小;
–验证文件的上传方式;
–对文件进行一定复杂的重命名;
–不要暴露文件上传后的路径;
–等等…
你可以通过“Unsafe file upload”对应的测试栏目,来进一步的了解该漏洞。
访问页面查看:
仔细看之后会发现是前端检测
不安全的文件上传漏洞概述
在burp中抓包,更改名字。
不安全的文件上传漏洞概述
不安全的文件上传漏洞-服务端验证
MIME介绍

不安全的文件上传漏洞概述
不同的文件类型,文件名是不一样的
$_FILES()函数
这个函数在你向服务器传输文件的时候可以向服务器传输一些信息
不安全的文件上传漏洞概述
访问首页,上传简单的图片,发现可以
不安全的文件上传漏洞概述
上传个php文件试一下,发现不允许
不安全的文件上传漏洞概述
用burpsuit抓包分析
这是上传图片
不安全的文件上传漏洞概述
这是上传php文件
不安全的文件上传漏洞概述

发现区别了没有,我们在小分析一下后台源码
不安全的文件上传漏洞概述
这个地方的关键点就在于他通过$_FILES来获取了文件的类型,之后在把这个类型和他定义好的$_mime去进行了比较,这个问题出就出在FILES上,这个全局方法是从浏览器的http头里面获取了Content type,这是前段用户可以去控制的 。
所以我们将Content type头里的内容改一下就行了,
不安全的文件上传漏洞概述
尝试一句话木马链接
不安全的文件上传漏洞概述
攻击成功!参考链接
getimagesize()类型验证

这个函数功能会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的
不安全的文件上传漏洞概述
这就是图片的十六进制,前几位都是一样的
不安全的文件上传漏洞概述
按照这样的逻辑,我们是不是可以去伪造一个假图片,让函数以为我们这就是图片,达到绕过的目的
不安全的文件上传漏洞概述
找来图片和一句话木马
不安全的文件上传漏洞概述
我们打开cmd,输入
不安全的文件上传漏洞概述
在winhex里查看,发现一句话已经加进去了
不安全的文件上传漏洞概述
所以我们试着传上去
不安全的文件上传漏洞概述
上传成功,但是这个图片也不会执行
我们需要利用文件包含,构造对应的url即可访问。
不安全的文件上传漏洞概述
不安全的文件上传漏洞概述
不安全的文件上传漏洞概述
攻击成功
参考链接