文件上传漏洞
“文件上传”功能已经成为现在Web应用的一种常见需求,它不但有助于提供业务效率(例如:企业内部文件共享),更有助于优化用户的体验(例如:上传视频、图片、头像等各种其他类型的文件)。“文件上传”功能一方面带来了良好的体验,另一方面也带来的“安全问题”。目前文件上传漏洞已经成为web安全中经常利用到的一种漏洞形式,对于缺少安全防护的web应用,攻击者可以利用提供的文件上传功能将恶意代码植入到服务器中,之后再通过url去访问以执行代码达到攻击的目的。
文件上传漏洞产生的原因
造成文件上传漏洞的原因有:
- 开源编辑器的上传漏洞
- 服务器配置不当
- 本地文件上传限制被绕过
- 过滤不严或被绕过
- 文件解析漏洞导致文件执行
- 文件路径截断
文件上传漏洞利用的条件
- 恶意文件可以成功上传
- 恶意文件上传后的路径
- 恶意文件可被访问或执行
DoraBox文件上传漏洞分析与研究
任意文件上传
分析:如下图所示,在文件上传时未对文件的类型以及文件的大小、后缀等进行检查,可以上传任意文件
利用:
下面上传一个php一句话木马看看:
链接shell:
JS限制文件上传
JS限制文件上传属于前端检查,对于这种限制我们可以通过burpsuite修改数据包的形式来绕过前端的检查上传任意文件,首先我们来查看一下源代码:
从上面我们可以看到对文件的后缀名进行了检查,下面我们进行测试利用一波~
利用:
首先将shell.php改为shell.jpg,之后上传文件,并使用burpsuite抓取数据包:
之后使用蚁剑来连接该shell:
MIME限制文件上传
MIME属于服务器端检测,对于这种类型的检测方式我们可以通过burpsuite来修改content-type来实现绕过:
分析:源代码:
以上实现了对文件类型的检查,下面我们来利用一波~
利用:
直接上传php文件发现报错“文件类型不正确,请重新上传”
之后上传PHP文件,同时使用burpsuite抓取数据包来修改content-type试试看:
可以发现成功上传文件~
之后使用蚁剑链接试试看~
扩展名限制文件上传
对于扩展名的检查是在服务器端完成的,对于这种类型的检查我们通常有以下几种绕过检测的方法:
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 服务的解析方式
分析:
以上采用黑名单的方式进行检查,这里未严格检查后缀的大小写、同时可以使用“."或者“_”来绕过,下面进行简易的测试利用~
利用:
大小写:
查看upload文件夹下发现确实上传成功~
之后使用蚁剑链接一波看看~
使用"_"来上传:
之后蚁剑链接:
这里很多人好奇为什么“.php_”可以被解析,其实是因为php底层是c语言写的,c语言中“_”可被解析为“空格”,但是在linux中不行。
使用“.”来绕过:
与之前不同的是这里直接显示为了.php文件:
为了避免误会,我这里将下面的.php_文件删除,之后再使用蚁剑链接:
同样的道理,成功上传~
内容检测绕过
对于内容检测这种检测方式确实有点头疼对于一次文件头、文件头+局部内容、一次渲染还好一些,但是碰到二次渲染估计就不太好玩了哦~,下面我们先来分析一波源代码吧:
分析:
从上面的代码可以了解到这里对于文件的大小、文件内容奖项了检查,所以我们要考虑到这几点来进行绕过检测,之后上传文件,这里采用添加文件头的方式:
利用:
成功上传文件:
之后使用蚁剑链接一波看看:
至此,文件上传小结告一段落,后面会继续介绍更加精彩的内容~