上传漏洞利用方法比较多,基本的任意文件上传不再赘述,大概说一下简单的绕过和一些问题
我们为了此漏洞关注各种上传点,而各大厂商也会密切关注并及时作出对应策略。大致的绕过分为前端验证绕过和后端验证绕过。
一、前端验证绕过
有的网站会将验证上传阶段放在前端,进行一个js的验证。
这种绕过我们可以做一个截断,就可以绕过前端验证了(抓包工具抓取数据包,然后改包就好)
其次,js验证的话,我们可以在浏览器设置禁用js,或者右键审查中找到对应js代码删除。
二、后端验证
这个才是主要的验证方式了,很多姿势都是在与此对抗中产生,
有些服务端只检查mime类型是否为允许上传的类型,符合则绕过。如下:
检查后缀型:
如果是iis中间件,可以搜集其解析漏洞进行利用,比如iis6.0 的1.php;.jpg解析问题。
对于黑名单限制还可以利用大小写混合绕过、文件名后加空格和点绕过。
一般web的系统是php asp jsp三种主流语言编写而成,默认后缀为.php .asp .jsp 等,然而web服务器还支持其他可解析后缀:
ASP:asp|aspx|asa|cer|cdx|ashx|ascx|asax|asmx|cfc|cfm|
PHP:php|php2|php3|php4|php5|phtml|phtm|
JSP:jsp|jspa|jspx|jsw|jsv|jspf|jtml|
类似如图:
还有一个针对ntfs文件系统的上传漏洞,其特性为ads,用于ntfs交换数据流,上传文件时,系统对正文的filename匹配不当可能会导致绕过。
其实,还有很多比如后缀双写绕过,配合其他解析漏洞绕过等等姿势,本人十分懒,所以不一一列举,只最后说一个比较混乱的点:
00截断
00截断有两种截断方式:%00和0x00 php也是c写的,所以%00和0x00代表结束,不会再读取其后的数据,这个缺点在php5.3.4版本已修复
而且不是每种场景下都随意适用(意思就是说,两种方法有两个符合使用的场景,而且不能用错),因为这里很多人搞混,他们的使用原理和效果是一样的,但是%00截断是用在路径上,
如上图,有显示上传路径,也可以说就是上传路径可控的时候,使用%00截断的方式,
方法就是这样了,由于我虚拟机php版本是最新的,其他地方也没临时找到%00利用的上传点,所以触发不了这个洞,所以就看下这个方法,结果的话传过去…/upload/x.php /xxx.jpg这样,访问的时候只访问到php就可以成功建立连接。
这个直接在参数中+%00是由于传递时会将%00编码,所以不用再做过多操作。而另外一种0x00截断,则是在post数据包中修改,,,不知道怎么说,上图:
比如我们上传一个jian.php;.jpg,我们使用十六进制打开,找到对应的地方,将;代表的3b修改为00
最后上传后:
还有一种0x00截断的情况 ,和%00阶段那张图一样,只不过%00路径在get请求包中,而另一者在post数据包内,其使用方法:
大同小异
其实%00和0x00是一样的,0x00就是%00的十六进制表示,但是为了不将%00和0x00混淆,只需要记得post提交想到0x00 get提交想%00,差不多就这样吧,只要自己能区分就好了,
其实,还有内容型的上传漏洞里的二次渲染,文件头等;逻辑型上传漏洞的条件竞争等,这些倒不是很难理解,故而以后的实战文章中遇到了再顺带一说,不再过多赘述。
对于攻击,我们因该从攻击者的角度去看待问题:
最好的设置是白名单。
上传目录禁止运行
检查内容,重新渲染。
就水到这儿,祝大家都免疫冠状病毒。