1. 程式人生 > >寬字節SQL註入

寬字節SQL註入

tro 反斜杠 輸入 client 配置 mys 錯誤 dds mysql

註入產生的原理:

數據庫設置為GBK編碼:

  寬字節註入源於程序員設置MySQL連接時錯誤配置為:set character_set_client=gbk,這樣配置會引發編碼轉換從而導致的註入漏洞.

  1、正常情況下,當GPC開啟或者使用addslashes函數會過濾GET或POST提交的參數時,黑客使用的單引號(‘)會被轉義成:\‘;

  2、但如果存在寬字節註入,我們輸入%df%27時,首先經過上面提到的單引號轉義變成了%df%5c%27(%5c是反斜杠),之後在數據庫查詢

    前由於使用了GBK多字節編碼,即在漢字編碼範圍內兩個字節會編碼為一個漢字.從而造成註入漏洞.

數據庫設置為UTF-8編碼:

  utf-8轉GBK

  這裏思考下“錦”這個字,它的utf-8編碼是e98ca6,它的gbk編碼是%e5%5c,而上面提到過反斜杠\正好為%5c.所以如果我們將title設置

為:‘錦‘,首先經過addlashes函數或GPC對單引號轉義變為:錦\‘, 然後會經過iconv函數會對"錦"轉化為gbk編碼,最後就是%e5%5c%5c%27.

反斜杠被轉義了(%5c%5c),從而單引號逃逸出來就會引發註入漏洞。

寬字節SQL註入