专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 信息/网络安全

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

发布时间:2011-07-03 07:07:36 文章来源:www.iduyao.cn 采编人员:星星草
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 的编码  英文字母 一个字节    汉字编码是三个字节 。

 

 

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

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: