WEB开发网
开发学院数据库MSSQL Server 有孔就入 SQL Injection的深入探讨 阅读

有孔就入 SQL Injection的深入探讨

 2007-05-19 09:43:25 来源:WEB开发网   
核心提示: http:///showspecial.asp?Specialid=1817 and 1<>(select count(email) from [user])也存在,好了,有孔就入 SQL Injection的深入探讨(3),到这里,我们的平台已经搭建好了,接下来,我们要根据得

http://********/showspecial.asp?Specialid=1817 and 1<>(select count(email) from [user])

也存在,好了,到这里,我们的平台已经搭建好了。

二、深入研究,让SQL自己招数据库结构

很多时候,我们只能猜到大家比较熟用的表名,如果是非原程序公开下载的,我们很猜到他的真实数据库结构,有时候猜半天都猜不到,令人很郁闷,那么该如何拿到他的表结构呢?我们知道SQL SERVER的每一个数据库都会有用户表和系统表,根据SQL SERVER的联机帮助描述是系统表sysobjects:在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行,那么也就是说当前数据库的表名都会在该表内有存在,(对象名 admin 无效。大家可以看到上面出现的报错把表名描述成对象)。

我们要用的是其中的3个,描述如下(详细的见SQL SERVER的联机帮助):

name 数据表的名字;

xtype 数据表的类型 u为用户表;

id 数据表的对象标志;

status 保留字段,用户表一般都是大于0的。

在查询分析器执行以下SQL语句(以我本地的数据库为例子):

select top 1 name from sysobjects where xtype=u and status>0

我们马上就可以得到该数据库下用户表的第一个表名gallery:

select top 1 id from sysobjects where xtype=u and name=gallery

我们马上就可以得到该数据库下用户表的第一个表名gallery的对象标志2099048:

select top 1 name from sysobjects where xtype=u and id>2099048

再得到第2个表名gb_data,这里用到的是id>2099048,因为对象标志id是根据由小到大排列的。

以此类推,我们可以得到所有的用户表的名字了。接下来,我们要根据得到的表名取他的字段名,这里我们用到的是系统自带的2个函数col_name()和object_id(),在查询分析器执行以下SQL语句(以我本地的数据库为例子):

上一页  1 2 3 4 5  下一页

Tags:SQL Injection 深入

编辑录入:coldstar [复制链接] [打 印]
赞助商链接