寬位元組注入原理與防禦

2021-08-31 04:04:42 字數 507 閱讀 6726

gbk編碼原理

乙個字元佔1個位元組

兩個位元組以上叫寬位元組

設定「set character_set_client=gbk」(gbk編碼設定),通常導致編碼轉換的注入問題,尤其是使用php連線mysql資料庫的時候

乙個gbk漢字佔兩個位元組,取值範圍是(編碼位數):第乙個位元組是(129-254),第二個位元組(64-254)

當設定gbk編碼後,遇到連續兩個位元組,都符合gbk取值範圍,會自動解析為乙個漢字

gbk 兩個位元組 gb2312兩個位元組 utg-8 三個位元組

『號轉義

addslashes函式防止sql注入,將傳入引數值進行轉義。將' 轉義為\『,單引號失去作用

加』不報錯,說明不存在注入

如何繞過:

輸入%df%27,本來\ 會轉義%27(『),但\(%5c)的編碼位數為92,%df的編碼位數為223,%df%5c符合gbk取值範圍(第乙個位元組129-254,第二個位元組64-254),會解析為乙個漢字,這樣\就會是去應有的作用。

寬位元組注入原理

在mysql中,用於轉義的函式有addslashes,mysql real escape string,mysql escape string等,還有一種情況是magic quote gpc,不過高版本的php將去除這個特性。首先,寬位元組注入與html頁面編碼是無關的,筆者曾經看到 就放棄了嘗試,...

寬位元組注入繞過原理

首先我們知道,在計算機中每乙個字元為8位,那麼就是1個位元組,所謂的寬位元組注入就是兩個位元組合併從而進行繞過,例如,韓文,日文,繁體字 都屬於寬位元組型別。下面我來個簡單的演示。當我們輸入單引號的時候,那麼會被轉義成 這樣就無法進行注入 但是進行繞過的話,在id引數加入乙個 df 被轉義後成為 d...

寬位元組注入

大家都知道 df 被php轉義 開啟gpc 用addslashes函式,或者icov等 單引號被加上反斜槓 變成了 df 其中 的十六進製制是 5c 那麼現在 df df 5c 27,如果程式的預設字符集是gbk等寬位元組字符集,則mysql用gbk的編碼時,會認為 df 5c 是乙個寬字元,也就是...