SQL Server 內建數個未文件化的擴充預存程序,可直接讀寫 Windows 登錄。自 SQL Server 7.0 起存在,2000 版保留,未來版本可能移除。常被惡意利用進行系統滲透,生產環境強烈建議停用。
| 程序 | 功能 | 語法 |
|---|---|---|
xp_regenumvalues | 以多重結果集傳回所有鍵值 | xp_regenumvalues '根鍵', '子鍵路徑' |
xp_regread | 讀取指定值 | xp_regread '根鍵', '子鍵路徑', '值名稱' |
xp_regwrite | 寫入登錄值 | xp_regwrite '根鍵', '子鍵路徑', '值名稱', '型別', '值' |
xp_regdeletevalue | 刪除指定值 | xp_regdeletevalue '根鍵', '子鍵路徑', '值名稱' |
xp_regdeletekey | 刪除整個鍵(含子值) | xp_regdeletekey '根鍵', '子鍵路徑' |
USE master
GO
EXEC xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
EXEC xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'CommonFilesDir'
EXEC xp_regwrite 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion',
'TestValueName', 'REG_SZ', 'hello'
型別說明: REG_SZ = 字串,REG_DWORD = 整數。
EXEC xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestValueName'
EXEC xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\TestKey'
USE master
REVOKE EXECUTE ON xp_regenumvalues TO PUBLIC
REVOKE EXECUTE ON xp_regread TO PUBLIC
REVOKE EXECUTE ON xp_regwrite TO PUBLIC
REVOKE EXECUTE ON xp_regdeletevalue TO PUBLIC
REVOKE EXECUTE ON xp_regdeletekey TO PUBLIC
sp_dropextendedproc 徹底移除(需重啟服務)。sa 連線。這些程序以 SQL Server 服務帳號權限執行。若服務帳號為高權限(如 LocalSystem),攻擊者可透過 SQL 注入竄改系統登錄、植入後門、關閉防毒軟體等。務必嚴格管控。