找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 1554|回复: 1

MSSQL跨库查询你玩了吗?

[复制链接]

18

主题

62

回帖

109

牛毛

一级牛人

积分
109
发表于 2008-3-12 21:03:40 | 显示全部楼层 来自 福建省厦门市
支持下``

739

主题

468

回帖

4307

牛毛

论坛管理员

狼群

积分
4347
 楼主| 发表于 2008-3-12 19:59:10 | 显示全部楼层 |阅读模式
在黑客技术学习过程中,看了SQL Injection 注入攻击 1月26日课程,突然想到黑防上曾介绍了一篇类似的文章,近期在写一个数据库管理程序时,要用到里面的方法,觉得十分有用,今天再一次发出来大家分享一下,注原文摘下:
  哎!真是无聊,我这个要饭的,日子越来越不好过了.有人居然说我奉旨要饭,我真是没语言了,抽空玩点COOL的,让大家来分享分享,高兴高兴!
  大家都知道SQL跨表查询的东东吧?假如管理员把字段名改得非常复杂的话,那么我们去猜解字段名,将会是一件非常痛苦的事.我不喜欢痛苦,还是去找新的漏洞,绕过这个痛苦的过程.开工吧,让我们来分析一下MSSQL的三个关键系统表.
  MSSQL三个关键系统表
1.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就可以查询出所有库名.
2.SYSOBJECTS
MSSQL中对SYSOBJECTS系统表的说明是:在数据库内创建的每个对象(约束,默认值,日志,规则,存储过程等)在表中占一行.只有在tempdb内,每个临时对象才在该表中占一行.这个是列出数据库对象的系统表,当然数据库表名也在里面,这里为大家列出一些对我们有用的字段名称和相关说明.
name 对象名
id 对象id
xtype 对象类型
uid 所有者对象的用户id
对象类型可以是下列对象类型中的一种:
C=CHECK约束
L=日志
S=系统表
TF=表函数
TR=触发器
U=用户表
X=扩展存储过程
  当然,我们这里只用得到xtype='U'的值,当等于U的时候,对象名就是表名,对象ID就是表的ID值.我们利用SQL语句:select * from ChouYFD.dbo.sysobjects where xtype='U',就可以列出库名称是CHouYFD中所有的表名.
3.SYSCOLUMNS
SQL中SYSCOLUMNS系统表的说明是:每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行,该表位于每个数据库中.这个就是列出一个表中所有的字段列表的系统表.这里我就为大家列出一些对我们有用的字段名称和相关说明:
name 字段名称
id 表ID号
colid 字段ID号
其中的ID是我们SYSOBJECTS得到的表的ID号.
我们利用SQL语句:select * from ChouYFD.dbo.syscolumns where id =123456789得到ChouYFD这个库中表的ID是123456789中的所有字段列表.
好了,简单的介绍了一下这个用法.大家如果有不了解的,可以查看SQL相关说明.
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|NB5社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2025-4-27 02:39 , Processed in 0.188988 second(s), 38 queries .

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表