寬字節注入發生的位置就是PHP發送請求到MYSQL時字符集使用character_set_client設置值進行了一次編碼。在使用PHP連接MySQL的時候,當設置“character_set_client = gbk”時會導致一個編碼轉換的問題,也就是我們熟悉的寬字節注入。
寬字節注入是利用mysql的一個特性,mysql在使用GBK編碼(GBK就是常說的寬字節之一,實際上只有兩字節)的時候,會認為兩個字符是一個漢字(前一個ascii碼要大于128,才到漢字的范圍)。
GBK首字節對應0×81-0xFE,尾字節對應0×40-0xFE(除0×7F),例如%df和%5C會結合;GB2312是被GBK兼容的,它的高位范圍是0xA1-0xF7,低位范圍是0xA1-0xFE(0x5C不在該范圍內),因此不能使用編碼吃掉%5c。
常見轉義函數與配置:addslashes、mysql_real_escape_string、mysql_escape_string、php.ini中magic_quote_gpc的配置。
寬字節注入步驟
第一步:order by排序
第二步:union select 查詢庫名
第三步:查詢表名
回答所涉及的環境:聯想天逸510S、Windows 10。
寬字節注入發生的位置就是PHP發送請求到MYSQL時字符集使用character_set_client設置值進行了一次編碼。在使用PHP連接MySQL的時候,當設置“character_set_client = gbk”時會導致一個編碼轉換的問題,也就是我們熟悉的寬字節注入。
寬字節注入是利用mysql的一個特性,mysql在使用GBK編碼(GBK就是常說的寬字節之一,實際上只有兩字節)的時候,會認為兩個字符是一個漢字(前一個ascii碼要大于128,才到漢字的范圍)。
GBK首字節對應0×81-0xFE,尾字節對應0×40-0xFE(除0×7F),例如%df和%5C會結合;GB2312是被GBK兼容的,它的高位范圍是0xA1-0xF7,低位范圍是0xA1-0xFE(0x5C不在該范圍內),因此不能使用編碼吃掉%5c。
常見轉義函數與配置:addslashes、mysql_real_escape_string、mysql_escape_string、php.ini中magic_quote_gpc的配置。
寬字節注入步驟
第一步:order by排序
第二步:union select 查詢庫名
第三步:查詢表名
回答所涉及的環境:聯想天逸510S、Windows 10。