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

SQL Server 觸發器安全風險深度解析:以 DVBBS 論壇為例的後門植入實戰

     編輯:關於SqlServer

核心觀點:觸發器是雙面刃

觸發器在 INSERT/UPDATE/DELETE 發生時自動執行,常用於稽核、歷史記錄。但其特性——隱蔽、自動觸發、擁有觸發表相同權限——也使其成為惡意使用者植入後門的理想載體。本文剖析如何利用 db_owner 權限在 DVBBS 論壇資料庫中建立加密觸發器,竊取管理員明文密碼。

攻擊前提與環境

  • 已取得 db_owner、db_ddladmin 或 sysadmin 等足以建立觸發器的權限。
  • 目標應用(DVBBS)未使用觸發器,管理員習慣不檢視觸發器定義。
  • DVBBS 於 dv_log 表以明文記錄敏感操作(含密碼變更、新增使用者),且密碼在應用層以 MD5 雜湊後才寫入主表,但同步寫入 Log 表時為明文。

後門設計思路

  1. 觸發點:在 dv_log 表建立 FOR INSERT 觸發器,攔截含敏感資訊的新增記錄。
  2. 資料提取:解析 l_content 欄位,判斷是否為管理員敏感操作(修改密碼、新增帳號)。
  3. 隱蔽存放:將竊取資料寫入一個「普通使用者可見、管理員不易察覺」的欄位。文中選擇新建使用者「汪財」的 Userphoto(varchar(255))、Userinfo(text)等欄位。
  4. 加密混淆:使用 WITH ENCRYPTION 隱藏觸發器定義,增加逆向工程難度。

關鍵程式碼片段

CREATE TRIGGER dv_admin_history
ON Dv_log
WITH ENCRYPTION
FOR INSERT
AS
BEGIN
    -- 解析 inserted 表中的 l_content,提取明文密碼
    -- 將結果 UPDATE 至「汪財」使用者的 Userphoto 或 Userinfo 欄位
END;

防禦與緩解策略

  • 最小權限原則:嚴格控管 db_owner、db_ddladmin 授予對象;開發帳號不應擁有建立觸發器權限。
  • 觸發器審計:定期執行 SELECT * FROM sys.triggers WHERE is_ms_shipped = 0; 列舉所有使用者觸發器,並檢視定義(含加密觸發器需解密)。
  • 敏感資料不落地:避免在 Log、稽核表以明文記錄密碼、Token 等機密資訊;採用單向雜湊或遮罩處理。
  • DDL 觸發器防禦:建立伺服器/資料庫級 DDL 觸發器,記錄或阻擋未經授權的 CREATE/ALTER TRIGGER 操作。
  • 加密觸發器管理:建立清單追蹤所有 WITH ENCRYPTION 物件,定期由資安團隊解密審查。

結語

觸發器本身不是漏洞,但其強大的自動化與隱蔽特性,配合過度授權與敏感資料處理不當,極易成為攻擊者長駐系統的後門。資料庫管理者必須將觸發器納入常態稽核範圍,並從架構層面杜絕明文敏感資料流向。

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