浏览器向服务器发送请求的时候必须指明请求类型(一般是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规则松)。

posted on 2015-02-01 16:16  milantgh  阅读(1044)  评论(0编辑  收藏  举报