SQL Server在Adhoc查询方式中存在缓冲溢出发布时间:2002-02-23 更新时间:2002-02-23 严重程度:高 威胁程度:远程管理员权限 错误类型:边界检查错误 利用方式:服务器模式 受影响系统 MSDE, Sql Server 7, Sql Server 2000详细描述 SQL Server可以从多个不同种类数据源分布式查询访问数据可以存储在同一或者 不同机器上,Microsoft SQL Server支持通过使用OLE DB分布式查询,分布式查询 提供SQL server用户可以把分布式数据存在在运行SQL SERVER的多个计算机上, 和不同种类数据存储在可以使用OLE DB可访问的各种相关联和不相关联的数据源中。 你可以在Transact-SQL 声明语句中通过: -Linked servers , OpenQuery 函数. -OpenDataSource 和 OpenRowset 函数. 来参考相关不同种类OLE DB数据源,而OpenDataSource和OpenRowset 函数可以被 所有用户访问并且在其中一个参数中没有正确检查缓冲边界,当在"provider name" 参数中提交超长字符串的时候可以导致缓冲溢出和拒绝服务攻击。 测试代码 Sql server 7在超过6918字符后会出现缓冲溢出: SELECT * FROM OpenDataSource( 'XXXXXXXXXXX...' ---> >=6819 字符 ,'')...nothing SELECT * FROM OPENROWSET( 'XXXXXXXXXXX...' ---> >=6819 字符 ,'', '') Sql server 2000在超过6887字符以上会出现缓冲溢出: SELECT * FROM OpenDataSource( 'XXXXXXXXXXX...' ---> >=6887 字符 ,'')...nothing SELECT * FROM OPENROWSET( 'XXXXXXXXXXX...' ---> >=6887 字符 ,'', '') 解决方案 微软已经为此发布了一个安全公告(MS02-007)以及相应补丁程序: http://www.microsoft.com/technet/security/bulletin/MS02-007.asp 补丁下载: SQL Server7.0: http://support.microsoft.com/support/misc/kblookup.asp?id=Q318268 SQL Server2000: http://support.microsoft.com/support/misc/kblookup.asp?id=Q316333 相关信息 参考:http://marc.theaimsgroup.com/?l=bugtraq&m=101422555428036&w=2 |