sql注入之寬位元組注入

2022-09-20 10:54:11 字數 1286 閱讀 5500

在介紹寬位元組注入之前,首先引入php的乙個防禦函式和一種編碼格式gbk

這是php自帶的一種防禦函式,該函式會解析使用者提交的資料,如post,cookie等提交過來的資料,並對這些資料中的特殊字元新增轉義符號'\',以確保資料不會出現致命錯誤。單引號,雙引號,反斜線等都會被加上反斜線。

而對於sql注入,某些特殊字元是不可或缺的,所以如何繞過該函式也就成了問題。

gbk全稱為《漢字內碼拓展規範》,gbk是一種多字元編碼。他使用了雙位元組編碼方案,也就是說使用gbk方案的漢字,占用兩個位元組。乙個utf-8編碼的漢字,則占用3個位元組。

舉例子:

0xd50x5c對應漢字『誠』

如果程式設計師設定資料庫編碼為非英文編碼那麼就有可能產生寬位元組諸如人。

假如資料庫mysql的編碼設定為了set names 'gbk'或是set character_set_client = gbk,這樣的設定就有可能引發編碼轉換從而導致注入漏洞。

其根本原因是:寬位元組注入就是php傳送請求到mysql時,mysql如果設定了上訴字元編碼轉換規則,則會跟我們故意設定的位元組相結合組成乙個gbk編碼規則下的雙字元而引起編碼轉換後,繞過了斜線轉義。

例如,如果我們對注入資料加上後引號,魔術引號就會對其進行轉義。

select * from users where id =-'1'' limit 0,1
在magic_quotes_gpc的作用後,變為如下形式

select * from users where id ='1\'' limit 0,1
然後sql語句就讀不到引號內的那個單引號而把它當作引入的普通字元處理。

那麼這個時候就可以使用寬位元組注入了。因為』\『的編碼是%5c,然後我們可以構造以%5c結尾的乙個gbk字元。而%df%5c就剛剛好是這樣的乙個gbk編碼。

構造輸入字元1%df'#

經過phpurl解碼後變為10xdf'#

經過魔術引號轉義,新增轉移符號,轉換為如下形式10xdf0x5c'#

所以注入語句最終為

select * from users where id ='1�\'#' limit 0,1

其中�\即為那個

SQL注入 寬位元組注入

php測試 物件導向寫法 id addslashes get id 獲取id並轉義預定義字元 id get id mysqli new mysqli localhost root root test 連線資料庫 指定資料庫 if mysqli connect errno else else 面向過程...

mysql 寬位元組注入 SQL注入之寬位元組注入

簡介 寬位元組注入是相對於單位元組注入而言的。單位元組注入就是大家平時的直接在帶有引數id的url後面 追回sql語句進行注入。比如 1 1 1 2 這個經典的判斷目標是否存在注入的例子就是單位元組注入。理論上說,只要資料庫連線 設定了gbk編碼,或者是預設編碼就 是gbk,那現在的程式裡到處都是注...

SQL寬位元組注入

什麼是寬位元組注入?寬位元組注入就是因為gbk編碼方式需要兩個ascii碼組合來解碼,所以形象的叫做寬位元組,這個作為了解即可 寬位元組注入的條件 1 資料庫查詢設定為gbk編碼 2 使用了addslashes mysql real escape string mysql escape string...