觸發器在 INSERT/UPDATE/DELETE 發生時自動執行,常用於稽核、歷史記錄。但其特性——隱蔽、自動觸發、擁有觸發表相同權限——也使其成為惡意使用者植入後門的理想載體。本文剖析如何利用 db_owner 權限在 DVBBS 論壇資料庫中建立加密觸發器,竊取管理員明文密碼。
db_owner、db_ddladmin 或 sysadmin 等足以建立觸發器的權限。dv_log 表以明文記錄敏感操作(含密碼變更、新增使用者),且密碼在應用層以 MD5 雜湊後才寫入主表,但同步寫入 Log 表時為明文。dv_log 表建立 FOR INSERT 觸發器,攔截含敏感資訊的新增記錄。l_content 欄位,判斷是否為管理員敏感操作(修改密碼、新增帳號)。Userphoto(varchar(255))、Userinfo(text)等欄位。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; 列舉所有使用者觸發器,並檢視定義(含加密觸發器需解密)。CREATE/ALTER TRIGGER 操作。WITH ENCRYPTION 物件,定期由資安團隊解密審查。觸發器本身不是漏洞,但其強大的自動化與隱蔽特性,配合過度授權與敏感資料處理不當,極易成為攻擊者長駐系統的後門。資料庫管理者必須將觸發器納入常態稽核範圍,並從架構層面杜絕明文敏感資料流向。