WEB漏洞—文件上传之WAF绕过及安全修复

WEB漏洞—文件上传之WAF绕过及安全修复
Yatming的博客WEB漏洞—文件上传之WAF绕过及安全修复
常见绕过方法:
数据溢出-防匹配(xxx…..)简单理解:就是如果在WAF在匹配的时候对你的上传文件进行匹配,如果此时将这个匹配的范围加大,那么这样的话程序可能会有一个阈值,或者说是临界点,从而有几率达到绕过的目的
符号变异-防匹配(’ “ ;)简单理解:假如说,WAF软件的防护代码是匹配到一对双引号,那么这个时候如果我构造一个只有一个双引号,所以就会出现三种情况,第一种就是把一个双引号也当作名字的一部分,这样会拦截,第二种,就是可以识别出这个一个两个双引号的问题,第三种情况就是不识别。如果是不识别,那么就可以实现绕过、
原因分析:就是匹配最后一个双引号,接收前面的数据,那么如果我是:x”x.php这样也是可以上传的,因为是接受最后一个双引号前面的值,或者:”x”x.php
数据截断-防匹配(%00;换行)简单理解:可以通过用分号的方式,进行绕过,因为在编程语句中一个分号表示的是一条语句的结束,所以这个时候,如果是:”x.jpg”;.php这样就有可能上传成功
还有一种方式就是换行,因为在编程语言中换行是“\n”,但是数据包是识别这种方式,所以WAF可能就会因此而被干扰,从而达到绕过的效果
重复数据-防匹配(参数多次)简单理解:就是WAF在匹配的时候,有可能也是匹配一次或者多次,这里也用了一点数据溢出的概念,也就是说,这个时候如果我让让多匹配几次,那么也有可能会达到绕过
还有一种就是用斜杠的方法,也可以达到“截断”的效果
上传参数名解析:需要明确哪些东西可以修改,哪些不行?
content—Disposition:一般可更改
name:表单参数值,不能更改
filename:文件名,可以更改
content—Type:文件MIME,视情况而定
MIME
MIME(Multipurpose Internet Mail Extensiions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
注:Tomcat的安装目录\conf\web.xml中就定义了大量MIME类型。
类型 | 后缀 | MIME |
---|---|---|
Microsoft Word文件 | .word | application/msword |
PDF文件 | application/pdf | |
GIF图形 | .gif | image/gif |
JPEG图形 | .jpeg .jpg | image/jpeg |
au声音文件 | .au | audio/basic |
MIDI音乐文件 | .mid .midi | audio/midi audio/x-midi |
RealAudio音乐文件 | .ra .ram | audio/x-pn-realaudio |
MPEG文件 | .mpg .mpeg | video/mpeg |
AVI文件 | .avi | video/x-msvideo |
正常上传php文件,然后改MIME【数据溢出-防匹配】
被拦截
把后缀改为php,然后在前面加上垃圾数据,记得垃圾数据写完了加上一个分号结尾。如果不成功多试几次然后多加一点。。。
成功
这个垃圾数据不仅可以插入到filename前面,还可以插入到name前面,但是记住这个垃圾数据结尾要写一个分号,因为如果你不写这个分号的话,可能会认为你这个filename之类的关键字也是垃圾数据从而上传失败
【符号变异-防匹配】:这里我这里全都是被安全狗拦截了,所以不发图了,理论开头就说了
【数据截断-防匹配】
方法确实可以上传,但是上传的文件执行不了。
用x.jpg;.php,我这边直接被拦截
换行也不行
【重复数据-防匹配】
个人认为这个是和第一个概念差不多,先判断安全狗是接收哪个数据,得出是接收最后一个值,然后重复数据查看结果
首先尝试重复【filename=“”;】这个的格式
可以上传也可以访问
这里我上传是可以上传但是接收到的文件不是想要的结果
斜杠也被拦截了
fuzz字典:
- https://github.com/fuzzdb-project/fuzzdb
- https://github.com/TheKingOfDuck/fuzzDicts
- https://github.com/jas502n/fuzz-wooyun-org
- https://github.com/TuuuNya/fuzz_dict
文件上传安全修复方案-函数自定义及WAF
文件上传安全修复方案:
- 后端验证:采用服务端验证模式
- 后缀检测:基于黑名单、白名单过滤
- MIME检测:基于上传自带类型检测
- 内容检测:文件头,完整性校验
文件上传安全修改工具:
- 自带函数过滤:参考uploadlabs函数
- 自定义函数过滤:function check_file(){}
- WAF防护产品:宝塔、云盾、安全公司产品等