文件上传漏洞总结
漏洞简介
文件上传漏洞是由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者webshell等。这种攻击方式是最为直接有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的逻辑做的不够安全,则会导致严重的后果。
漏洞危害
如果网站存在文件上传漏洞,攻击者可以借此上传webshell,并且成功执行,则会导致服务器沦陷。
利用方式
文件上传漏洞,顾名思义,只有存在上传点的网站可能出现这个漏洞。这个利用条件听起来严苛,但是正常网站,为了满足用户的需求,都会设置上传位置。最常见的上传点就是用户后台自己上传头像;其次,就是网站后台为了满足需求而设置的文件上传点;再然后,tomcat默认登录页面在被攻击者破解之后,同样存在文件上传点。
因为文件上传漏洞危害较大,且绕过方式极多,故利用方式也多样,这里不多赘述。
绕过方式
1.前端验证绕过。
这是最简单的一种绕过方式,因为有的网站会将上传的验证放在前端,进行一个js的验证。对于这种验证,我们可以先将脚本改为允许上传的后缀,在通过了前段验证后,再在抓包进行修改,这样就可以完成绕过目的。
2.只验证content-type
这种验证,是验证了数据包中的content-type,也就是上传文件的类型。
最简单的一种绕过方式是在上传脚本前修改脚本后缀,改为允许上传的后缀,然后抓包将后缀改回。
这种做法的简单之处在于,网站会根据上传文件的后缀自己生成content-type,这样我们只需要修改后缀,不需要去管content-type属性。
3.黑名单绕过
这是一种比较常见的网站防御手段,通过将所有可能的脚本后缀都设置为黑名单,以此来防止你上传可能会危害到网站的脚本文件。而且因为验证是后端进行的,所以前端抓包修改文件属性显然不行绕过。
这里可以使用陌生的,但是会被网站解析的后缀名进行,比如 .phtml .php3 .php5 这些后缀都会被当做php解析。
4.配合解析漏洞进行绕过
在网站防御严格,陌生后缀也在黑名单内的情况,我们可以利用符合网站中间件的解析漏洞配合文件上传漏洞进行绕过。
例如:apache解析漏洞,apache解析文件的规则是从右到左判断解析,如果后缀名为不可识别文件解析,就再往左判断。配合这个解析漏洞,我们可以通过在文件后缀后面再随便加一个不存在的后缀。后端验证的时候,因为后缀不再黑名单中,所以可以通过,又因为这个不存在的后缀不会被解析,所以我们正确的脚本就被成功上传并且可以执行了。
5.大小写绕过
有的网站黑名单可能不包含大写后缀,这里我们就可以将后缀进行大写,以绕过黑名单,完成文件上传。
6.点绕过/空格绕过
windows特性会将文件末尾的点和空格过滤,不会影响文件的正常解析,而点和空格又可以帮助我们绕过黑名单过滤,所以在网站使用黑名单,并且又为windows系统的情况下,我们可以使用点绕过或者空格绕过。
7.::$DATA绕过
这个绕过是利用windows下NTFS文件系统的一个特性,即NTFS文件系统的存储数据流的一个属性DATA。当我们访问a.asp::DATA时,就是请求a.asp本身的数据,如果a.asp还包含了其他的数据流,比如a.asp:lake2.asp,请求a.asp:lake2.asp::$DATA,则是请求a.asp中的流数据lake2.asp的流数据内容。
简单来说,就是如果网站没有过滤$DATA字符串,我们可以利用这个字符串绕过黑名单。
8.双写绕过
网站可能会通过黑名单来判断文件后缀,并且将其转换为空,如果这个转换至进行一次的话,我们可以使用单词双写来进行绕过。
例如:.php写成.pphphp
9.00截断
简单来说,00截断的原理,就是网站会把00后面的数据过滤,但是在上传的时候,我们又可以通过00截断绕过黑名单或者白名单。
www.xxx.com/qq.php%00.jpg => www.xxx.com/qq.php
PS:绕过还有很多种,上面写的九种都是我在靶场或者实际情况中尝试成功的,后面如果对其他绕过手段有了更深层的了解,会再继续补充。