首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 未公開的登錄存取擴充預存程序詳解與安全風險

     編輯:關於SqlServer

概述

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'

安全建議

  1. 移除 PUBLIC 執行權限:
    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
    
  2. 或使用 sp_dropextendedproc 徹底移除(需重啟服務)。
  3. 實施最小權限原則:應用程式帳號僅授予必要權限,嚴禁使用 sa 連線。

風險提醒

這些程序以 SQL Server 服務帳號權限執行。若服務帳號為高權限(如 LocalSystem),攻擊者可透過 SQL 注入竄改系統登錄、植入後門、關閉防毒軟體等。務必嚴格管控。

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