大家都知道%df』 被php轉義(開啟gpc、用addslashes函式,或者icov等),單引號被加上反斜槓\,變成了 %df\』,其中\的十六進製制是 %5c ,那麼現在 %df\』 = %df%5c%27,如果程式的預設字符集是gbk等寬位元組字符集,則mysql用gbk的編碼時,會認為 %df%5c 是乙個寬字元,也就是縗』,也就是說:%df\』 = %df%5c%27=縗』,有了單引號就好注入了。比如:
以下為引用的內容:
$conn = mysql_connect(」localhost」,」root」,」2sdfxedd」);
mysql_query(」set names 『gbk』」);
mysql_select_db(」test」,$conn);
$user = mysql_escape_string($_get['user']);
$pass = mysql_escape_string($_get['pass']);
$sql = 「select * from cms_user where username = 『$user』 and password=』$pass』」;
$result = mysql_query($sql,$conn);
while ($row = mysql_fetch_array($result, mysql_assoc))
?>
則通過以下注入即可:
對應的sql是:
select * from cms_user where username = 『運』 or 1=1 limit 1,1#』 and password=」
解決方法:就是在初始化連線和字符集之後,使用set character_set_client=binary來設定客戶端的字符集是二進位制的。如:
以下為引用的內容:
mysql_query(」set character_set_client=binary」);
寬位元組注入
在使用php連線mysql的時候,當設定 set character set client gbk 時會導致乙個編碼轉換的問題,也就是我們熟悉的寬位元組注入,當存在寬位元組注入的時候,注入引數裡帶入 df 27,即可把 5c 吃掉,舉個例子。當提交 1 1 23 時,mysql的執行的sql語句為 ...
寬位元組注入
這個md的 是我之前做南郵的一道sql注入題目,我實在是調動目前所學的sql注入知識沒做出來,一直搞不懂將 轉義為 因此去網上看了一下wp,是考寬位元組注入,於是在網上找了教程學習一下,這個文章只是為了記錄一下自己的學習過程,不喜勿噴,有錯希望指正 寬位元組注入指的是mysql資料庫在使用寬位元組 ...
寬位元組注入
寬位元組注入是利用mysql的乙個特性,mysql在使用gbk編碼的時候,會認為兩個字元是乙個漢字 前乙個ascii碼要大於128,才到漢字的範圍 示例如下圖 php中編碼為gbk,函式執行新增的是ascii編碼 新增的符號為 mysql預設字符集是gbk等寬位元組字符集。如上圖所示 df 被php...