漏洞原理
文件上传功能本身是一个正常的业务需求,对于网站来说,很多时候需要用户将文件上传到服务器,例如上传自定义头像,文件共享,发送邮件时添加附件,文件备份与恢复。所以“文件上传”本身没有问题,有问题的是服务器怎样处理和解释文件。如果服务器的处理逻辑不够安全,就可能会会造成文件上传漏洞。 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本获得执行服务端命令的能力。
实例展示
常见的问题有:
1、上传文件是Web脚本语言,服务器解释并执行了用户上传的脚本,导致代码执行;
2、上传文件是病毒、木马文件,黑客以诱骗用户或者管理员下载执行;
3、上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺骗。
实例1:绕过后缀名限制进行Webshell上传
1、攻击者可通过网站扫描工具或者手动查询轻松找到以下上传点。
2、上传点探测
随便上传一个文件进行探测
根据响应提示,该上传页面只能上传后缀名为jpg, jpeg, gif, doc, xls, rar, zip, swf, flv, rm, avi, ra, rmvb的文件。
3、使用工具BurpSuite截取数据包并修改发送,绕过后缀名限制上传文件(BurpSuite安装及使用见附加内容)
这里采用空字节截断技术
空字节截断技术介绍:
0x00截断:在许多语言的常用字符串处理函数中,0x00被认为是终止符,比如应用只允许上传jpg图片,那么可以构造文件名为2.asp.jpg,.jpg绕过了应用的上传文件类型判断,但对于服务器来说,此文件因为字符截断的关系,最终会以2.asp存入路径里。
这里将进行URL解码,构造文件名进行后缀截断:
修改过后向服务器发送请求,页面显示上传成功。
4、寻找上传路径,Getshell
完成上传WebShell并不意味着可以执行,有时候WebShell是上传成功了,但是找到上传路径是一件很费力的事,以下分两种情况介绍。
利用诸如上传头像、上传文件等上传点上传WebShell(包括直接上传、绕过客户端、绕过服务器端文件扩展名、绕过mime类型、绕过文件内容检测、利用过滤不全),此种情况上传文件完成后一般会向用户反馈上传文件的完整url,即使不反馈,这些路径也很容易猜测出来,例如常见的目录有/photo、/image、/upload 等。
这里在请求包中暴露了上传路径。
访问路径下的文件:http://xxx/website/datum/gazette/upload.jsp
5、Webshell的作用
通过该程序可以远程管理服务器上的文件系统,可以新建、修改、删除、下载文件和目录。对于windows系统,还提供了命令行窗口的功能,可以运行一些程序,类似与windows的cmd。
6、用相同的方法在再次上传一个jsp小马,用来连接菜刀(菜刀下载及使用见附加内容)。
实例2:利用服务器漏洞上传Webshell
1、利用工具或手动找到上传点,经典的FCK编辑器漏洞(想了解更多FCK编辑器漏洞访问http://www.chncto.com/heikejishu/10684.html)
2、确定漏洞
首先确定编辑器版本号,使用FCK编辑器常见路径找到对应版本号,可以找到以下页面:
使用wvs漏洞扫描工具可探测服务器类型和版本号(wvs下载和使用见附加内容)
3、利用服务器解析漏洞上传文件
IIS6.0系统漏洞介绍:
漏洞一:
前面提到 0X00字符截断文件名,在IIS和Windows环境下也曾经出过非常类似的漏洞,不过截断字符变成了分号“;”。
当文件命名为 1.asp;xx.jpg 时,IIS6.0 会将此文件解析为 1.asp ,文件名被截断了,从而导致脚本执行。
漏洞二:
因为处理文件夹扩展名出错,导致将/*.asp/目录下的所有文件都作为ASP文件进行解析。比如:
http://www.xx.com/path/1.asp/2.jpg
这个 2.jpg 就会被当做ASP进行解析。
由于该上传页面为图片上传点,对后缀名做了限制,所以基于IIS6.0漏洞,把webshell的文件名构造为webshell.asp;jpg
上传成功可以看到系统把文件按照日期格式重命名为20150917171617527131.asp;jpg
4、Getshell
FCK编辑器上传的文件有一个通用路径/images/userfiles/image/,接下来访问我们上传的文件:http://xxx/images/userfiles/image/20150917171617527131.asp;jpg
成功访问到我们的解析文件,输入密码404,成功进入管理页面。
菜刀使用同案例1,不再演示。
漏洞危害
1、工具危害
以上真实案例可以看出,网站在没有任何防御的情况下,攻击者可以使用任意扫描工具对网站进行扫描和探测,漏洞和敏感路径非常容易被暴露。/upload和FCK编辑器等上传路径被发现后,攻击者绕过限制上传任意文件,控制服务器。
2、信息泄露(实例2)
众所周知,FCKeditor是一个漏洞百出的编辑器,无论是安全从业人员还是黑产工作者对它的利用可谓乐此不疲,FCKeditor与IIS服务器漏洞的搭配堪称经典。但是在实例2中,我们轻易搜索到了FCKeditor版本号和服务器信息,然后利用网络共享的方法轻易Geshell。大大节省了攻击者在渗透过程中的探测时间。
3、权限问题
在很多情况,管理员为了方便行事,在建设网站的时候直接使用最高权限,后期也没有降低权限,这样做存在极大的风险。网站一旦被攻击成功并Getshell,可控制整个服务器。如果该服务器还有别的用户在使用,将会使其他用户同样暴露在危险中。
4、路径暴露问题
在寻找上传路径的时候多数时借助工具,工具中收录了各种常用路径。网站部署时通常使用默认安装路径,这样做的风险是一旦使用的框架出现漏洞,很轻易利用相同的路径找到所有存在该漏洞的网站。不仅如此,很多网站的备份地址,或者一些无用的上传地址不仅没有删除,还对外开放,给攻击者可乘之机。
5、终极危害
文件上传漏洞利用成功后,相当于拥有一个网站管理工具,不仅可以对网站内容进行增删改查和页面篡改,还可以连接数据库,对数据库进行恶意操作,对于拥有高权限的用户,控制整个服务器。
解决方案
1、基于WAF防护
1.1 各种扫描工具和注入工具的防御
NGAF特有的WAF策略能够有效防御各种漏洞扫描工具和敏感目录爬取工具对网站进行探测。
1.2 敏感目录保护机制
NGAF的WAF库中收录了常见上传敏感路径,一旦有攻击者远程访问这些敏感目录,规则库匹配后将立即进行拦截。
1.3 Webshell连接
文件上传成功后,往往需要服务器能够成功解析该文件,并且允许远程访问才能控制服务器。NGAF的WAF库中收录了各种webshell特征,攻击者上传webshell后在访问shell的响应中,WAF规则可成功匹配shell特征,拦截响应。
1.4 菜刀屏蔽
菜刀是一款强大的网站管理工具,同时也是黑客手中攻击网站的利器。WAF中有专门用来匹配菜刀特征的规则,一旦匹配到有菜刀连接shell,立刻进行拦截。
2、基于代码层的防护
2.1 文件上传目录设置为不可执行
2.2 根据文件内容判断文件类型
2.3 使用随机数改写文件名和文件路径
附加内容
1、工具介绍
wvs安装和使用:http://www.freebuf.com/tools/43837.html
菜刀:http://www.freebuf.com/tools/43837.html