寬位元組注入是利用mysql的乙個特性,mysql在使用gbk編碼的時候,會認為兩個字元是乙個漢字(前乙個ascii碼要大於128,才到漢字的範圍),示例如下圖:
php中編碼為gbk,函式執行新增的是ascii編碼(新增的符號為「\」),mysql預設字符集是gbk等寬位元組字符集。如上圖所示%df』被php轉義,單引號被加上反斜槓\,變成了%d』,其中\的十六進製制是%5c,那麼現在%d』=%d%5c%27,如果程式的預設字符集是gbk等寬位元組字符集,則mysql用gbk編碼時,會認為%df%5c是乙個寬字元,也就是縗,也就是說:%df\』 = %df%5c%27=縗』,有了單引號就可以注入了。
字元(character)是組成字符集(character set)的基本單位。對字元賦予乙個數值(encoding)來確定這個字元在該字符集中的位置。
由於ascii表示的字元只有128個,因此網路世界的規範是使用unicode編碼,但是用ascii表示的字元使用unicode並不高效。因此出現了中間格式字符集,被稱為通用轉換格式,及utf(universal transformation format)。
gb2312、gbk、gb18030、big5、shift_jis等這些都是常說的寬位元組,實際上只有兩位元組。寬位元組帶來的安全問題主要是吃ascii字元(一位元組)的現象,即將兩個ascii字元誤認為是乙個寬位元組字元。
url轉碼
』 ——> %27
空格 ——> %20
#符號 ——> %23
\ ——> %5c
addslashes函式:
如何從addslashes函式逃逸出來?
1.\前面再加乙個\(或單數個),變成\ \ ',這樣\被轉義了,'逃出了限制
2.把\弄沒
1.先測試是否可以注入
可以看出,可以注入。
2.繼續注入
sae-chinalover十六進製制是0x7361652d6368696e616c6f766572,用十六進製制來繞過字元轉義
3.在檔案裡找到flag即可
寬位元組注入
大家都知道 df 被php轉義 開啟gpc 用addslashes函式,或者icov等 單引號被加上反斜槓 變成了 df 其中 的十六進製制是 5c 那麼現在 df df 5c 27,如果程式的預設字符集是gbk等寬位元組字符集,則mysql用gbk的編碼時,會認為 df 5c 是乙個寬字元,也就是...
寬位元組注入
在使用php連線mysql的時候,當設定 set character set client gbk 時會導致乙個編碼轉換的問題,也就是我們熟悉的寬位元組注入,當存在寬位元組注入的時候,注入引數裡帶入 df 27,即可把 5c 吃掉,舉個例子。當提交 1 1 23 時,mysql的執行的sql語句為 ...
寬位元組注入
這個md的 是我之前做南郵的一道sql注入題目,我實在是調動目前所學的sql注入知識沒做出來,一直搞不懂將 轉義為 因此去網上看了一下wp,是考寬位元組注入,於是在網上找了教程學習一下,這個文章只是為了記錄一下自己的學習過程,不喜勿噴,有錯希望指正 寬位元組注入指的是mysql資料庫在使用寬位元組 ...