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

SQL 注入攻擊全接觸:進階篇 (一) - 通用注入步驟與表名猜解

     編輯:關於SqlServer

第一節:SQL 注入的通用執行步驟

成功的 SQL 注入遵循固定流程:判斷環境 → 尋找注入點 → 識別資料庫類型 → 重構 SQL 語句 → 猜解表名/欄位 → 提取資料。

根據參數類型重構原始 SQL

注入點參數類型決定了 SQL 重構方式:

參數範例類型原始 SQL 結構注入 Payload 結構
ID=49數值型SELECT * FROM table WHERE col = 49ID=49 AND [條件]
Class=連續劇字串型SELECT * FROM table WHERE col = '連續劇'Class=連續劇' AND [條件] AND ''='
KeyWord=關鍵字搜尋型 (LIKE)SELECT * FROM table WHERE col LIKE '%關鍵字%'KeyWord=' AND [條件] AND '%'='

關鍵點: Payload 需閉合原始查詢並保持語法合法(如字串型需補單引號與註解符)。

布林盲注猜解表名

利用 AND (SELECT COUNT(*) FROM 表名) > 0 判斷表是否存在:

  • 頁面回應正常(同原頁) → 條件成立 → 表存在。
  • 頁面異常/報錯/空白 → 條件不成立 → 表不存在。

遍歷常見表名或字典,直至猜中。同理猜解欄位名:將 COUNT(*) 換為 COUNT(欄位名)。

現實提醒: 猜解高度依賴命名規律。複雜無規律命名幾乎無法窮舉。但 SQL Server 系統表可直接洩露結構資訊(詳見高級篇)。

提取資料:ASCII 逐字解碼法

確認表、欄位後,逐字提取欄位值:

  1. 測長度:AND (SELECT TOP 1 LEN(欄位) FROM 表) > N 遞增測試。
  2. 取字元:MID(欄位, 位置, 1) 截取單字元 → ASC() 取 ASCII 碼 → 二分法縮小範圍猜解。

雖慢但通用。編寫自動化腳本可大幅提速。

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