“文件上传”功能一方面带来了良好的体验,另一方面也带来的“安全问题”。目前文件上传漏洞已经成为web安全中经常利用到的一种漏洞形式,对于缺少安全防护的web应用,攻击者可以利用提供的文件上传功能将恶意代码植入到服务器中,之后再通过url去访问以执行代码达到攻击的目的。
文件上传漏洞产生的原因:
1、开源编辅器的上传漏洞
2、服务器配置不当
3、本地文件上传限制被绕过
4、过滤不严或被绕过
5、文件解析漏洞导致文件执行
6、文件路径截断
文件上传漏洞利用的条件:
1、恶意文件可以成功上传
2、恶意文件上传后的路径
3、恶意文件可被访问或执行
一、任意文件上传
这个直接上传一个文件就是了,这里上传的文件名为1.txt, 这里可以看到上传成功,说明后台没有做任何限制。
二、JS限制文件上传
当我们再次上传1.txt时提示错误
提示中说我们不能上传txt文件类型,那么我们试着上传一下它允许的jpg格式的文件(这里是我们用图片格式伪装的木马文件)。
利用burpsuite抓包
将jpg修改成php格式,提示上传成功。(说明成功绕过限制)
三、 MIME限制文件上传
我们上传一个php格式的木马文件点击上传显示上传失败,那么我们利用burpsuite抓包看看。
实际上MIME验证就是检测Content-type字段值的,直接更改上传数据包中的Content-type即可绕过。
在前面js上传文件中也可以看到此处的内容为图片格式:image/jpeg,将此内容修改为image/jpeg即可。
可以看到木马文件成功绕过限制上传成功!
四、扩展名限制文件上传
先了解下服务端扩展名验证绕过方法:
1、找黑名单扩展名的漏网之鱼 - 比如上面就漏掉了 asa 和 cer 之类
2、可能存在大小写绕过漏洞 - 比如 aSp 和 pHp 之类
3、特别文件名构造 - 比如发送的 http 包里把文件名改成 help.asp. 或 help.asp_(下划线为空格),这种命名方式在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改, 然后绕过验证后,会被 windows 系统自动去掉后面的点和空格。
4、IIS 或 nginx 文件名解析漏洞,比如 help.asp;.jpg 或 http://www.xx.com/help.jpg/2.php,这里注意网上所谓的 nginx 文件名解析漏洞实际上是 php-fpm 文件名解析漏洞
5、0x00 截断绕过 - 这个是基于一个组合逻辑漏洞造成的
6、双扩展名解析绕过攻击(1) - 基于 web 服务的解析逻辑,比如上传x.php.rar等文件
7、双扩展名解析绕过攻击(2) - 基于 web 服务的解析方式
那么知道了这些绕过方法,现在我们现在开始上传木马文件
我们同样上传个php木马文件4.php可以看到显示,上传失败!
那么我们抓包看一下,发现Content-type字段的值跟前面的一样,那么我们还是修改回来查看上传结果。
看到前面的绕过方法,修改以下后缀名为.php3显示木马文件上传成功!
修改后缀名为.php.上传成功!
大小写混合绕过,修改后缀名为.pHp上传成功!
五、内容限制文件上传
可以通过自己写正则匹配,判断文件头内容是否符合要求,这里举几个常见的文件头对应关系:
(1)_JPEG;_JPE;.JPG,”JPGGraphic File”
(2).gif,”GIF 89a”
(3).zip,”Zip Compressed”
(4).doc;.xls;.xlt;ppt;.apr;”MS Compound Document vl or Lotus Approach APRfile”
这里试了以上四种就只有GIF 89a可以绕过限制。