我的黑客生活
我的黑客生活
我是黑客吗?没有人给我回答 我还是学生.还要完成我的学业 注意: 本人可以回答问题 第一个免费,第二个免费,第三个收费,以后可以考虑打折!
临川一中不是人待的地方!!
博客信息
博主:DataBaseOwner 
栏目分类
最新文章
最新评论
标签列表
博客搜索
日志存档
·2009-1 ( 1 )
·2008-10 ( 4 )
·2008-7 ( 4 )
·2008-6 ( 5 )
·2008-5 ( 1 )
·2008-4 ( 3 )
·2008-2 ( 10 )
·2008-1 ( 53 )
友情链接
统计信息
访问:91148 次
今日访问:6次
日志: -165篇
评论: 29 个
留言: 9 个
建站时间: 2008-1-12
博客成员
DataBaseOwner 管 理 员
数字狼 管 理 员
最近访客



扔掉工具 跟我一起学ASP手工注入! (2)
作者:DataBaseOwner 提交日期:2008-1-27 19:27:00 正常| 访问量:643

4。猜解列的值!
 这是重点了,相信大家看到这里也会激动起来吧?好,费话不多说,现在我就教大家怎么来猜!用到的语句是
and (select top 1 asc(mid(列,X,1)) from 表)>N,这个句子里的N和X都是数字!先来给大家讲一下这个语句中用到的两个函数!第一个就是asc(),这个函数是用来得到()里的字符串的 ASCII码。什么是ASCII码呢?计算机内部采用二进制的方式计数,那么它为什么又能识别十进制数和各种字符、图形呢?其实,不论是数值数据还是文字、图形等,在计算机内部都采用了一种编码标准。通过编码标准可以把它转换成二进制数来进行处理,计算机将这些信息处理完毕再转换成可视的信息显示出来。常用的字符代码是 ASCII码,它原来是美国的国家标准,1967年被定为国际标准。这是我从网上找的,因为我也不知道怎么跟大家说,大家知道一下就行了,能理解更好!简单地说任何字符都可以用数字来表示,这个数字就是这个字符所对应的 ASCII码。(不知道对不对,我是这么理解的)!比如a所对应的ASCII码就是97,好了,这个明白了,下面再看另一个函数:mid(字符串,A, N) ,这个函数是用来截取()里字符串从第A个长度起往后截取N个字符!比如吧,mid(username,2,3),这个小句子的意思呢,就是从 username的第二位截取3个字符!截取完后也就是ser了!明白了吧!注意,我们在注入的时候用这个函数的时候都是这么用的!mid(列,A, 1),最后面那个数字是1,为什么呢!因为asc()这个函数一下就只把一个字符转换成ASCII码,所以我们用mid()函数来截取列值的时候只截取一位!函数介绍到这里!大家看完这两个函数后应该就可以看明白上面那个句子的意思了吧。就是:(再讲一下SQL语句是有运算先后顺序的,就好像数学一样,先算乘除,后算加减,不过如果加了括号就先算括号里的,SQL也是这样归定的!)先用mid函数截取出从第X位开始往后一位的字符(注,包括第X位,其实说白了就是截取第X位的字符)!然后再用asc()函数来得到这个字符的ASCII码,前面的select top 1前面已经讲过了。from 表就更不用说了!那个>X呢,就像刚才猜列值长度一样,用来猜所截获的字符的ASCII码的大小的!光这么说可能有的朋友还是不懂,所以我打算做一下教程出来。不过时间可能慢点!用这个句子就可以把列值的第一位的ASCII码猜出来:select top 1 asc(mid(username,1,1) from admin)>N
就这样把username列值的第一位猜出来!如果要猜第二位怎么办呢,很简单,把mid(username,1,1)改成mid(username,2,1)就可以了,刚才我们不是已经用上面讲过的猜列值长度的句子把长度猜出来了么,那如果一个列值的长度是7 我们就一直改变到mid(username,7,1)就可以把值全部猜出来!如果想猜别的列就把username改成别的列的名字!对了,现在说一下,在注入过程中,会有一些特殊的情况!这些情况以后再给大家讲。再说一点,我以后用的例子都是参数是数字型的注入点!如果是字符型的,就按我前面说的方法稍微把语句改动一下就可以了!
5。懒人的绝招!union联合查询!
 怎么样,看完刚才猜列值的语句,是不是觉得很麻烦啊!呵呵,现在我来教大家一种快速度得到列值的方法!不过这种方法有一定的局限性,不是在哪里都可以用的!至于是什么局限性,那就是我问大家的问题了。呵呵,我也不知道哎~我去网上查过N多资料去过N多论坛问过,郁闷,都没人回答,所以,知道的朋友一定要告诉我啊!好了,进入正题!
 先简单地介绍一下union,这个也是数据库里的一个小知识了。所以,劝大家去学学数据库,对脚本入侵很有帮助的!!union是用来把两个查询语句联合起来的,所以用union的语句我都叫它联合查询语句!比如这两个查询语句!select * from admin, select * from user,我想把它们的查询结果保存到一个表里,这个时候union就起到作用了!我们可以用这个语句来实现我们的目的!select * from admin union select * from user!怎么样?很简单吧?对,它就是这么简单!不过他在入侵时的作用可不简单哦!现在来说用union联合查询来快速得到列值的方法!注:union 所连接的两个查询语句,它们所查询的字段数据一定要相同,不然会出错的!比如前面那个句子查询了一个字段,后面那个句子查了两个,那这个句子就是错的!一定要一样哦!根据union的这个性质!我们要想用union联合查询,就一定要知道注入点所对应的SQL查询语句查询了多少个字段!我们可以一个一个地猜,比如注入点是
http://www.xxx.com/xx.asp?x=1,那我们就可以用这个句子来猜这个注入点所对应的查询语句查询了多少个字段!http://www.xxx.com/xx.asp?x=1 union select 1,2 from 表!如果返回的信息是
Microsoft JET Database Engine 错误 '80040e14'
在联合查询中所选定的两个数据表或查询中的列数不匹配。
这就说明我们猜的字段数不对,然后我们接着猜,一个一个数往后加,注意喽!有的注入点查询了几十个字段呢!哈哈!那什么时候算是猜对字段了呢?那当然是不报错的时候啦!还要注意,这里的不报错指的是不报出刚才那个错误,而是在网面里显示出了几个数字!这个时候就说明我们查询字段查对了!现在我们就可以直接得到列值了,再注意,表名和列名我们一定要事先已经知道或者已经猜出来了。不然没用!如果我们猜到第10个字段的时候,页面里显示出了数字!
http://http://www.xxx.com/xx.asp?x=1 union select 1,2,3,4,5,6,7,8,9,10 from admin 。比如语句是这样的,这个时候我们就看页面里显出了哪几个数字!比如显出了3,那我们就把3换成我们要猜的列名!比如我们要猜username,就把注入语句改成
http://www.xxx.com/xx.asp?x=1 union select 1,2,username,4,5,6,7,8,9,10 from admin 。要猜其它的也一样!呵呵,这样快多了吧!如果在猜查询多少个字段的时候显示的错误不是上面那个 “在联合查询中所选定的两个数据表或查询中的列数不匹配。” 那就说明不可以用联合查询了,这招也就没用了!可能又有朋友要说了,如果查询的字段很多,那一个一个猜不是要累死么?呵呵,真是的!哪有那么多的牢骚!好,再教你们另一个快速猜字段的方法!
order by!这两个单词在SQL里是给查询结果排序用的!这个大家知道就行!怎么用这个句子来猜字段数呢!大家看!还是这个注入点!
http://www.xxx.com/xx.asp?x=1,在后面加上order by N (N是数字!),就成了http://www.xxx.com/xx.asp?x=1 order by N,这里我让N为10,就是http://www.xxx.com/xx.asp?x=1 order by 10,如果返回正常!就接着加大这个数字,如果加到20返回正常,到21返回错误,那就是查询了20个字段!就是这样猜查询了多少个字段!如果我们猜出来它查询了20个,就和刚才一下提交这个语句:
http://www.xxx.com/xx.asp?x=1 union select 1,2,3........20 from 表! 然后看看哪个数字会显示在页面里,把那个数字改成你要猜的字段,就可以了!呵呵!如果这招不行就只能一个一个猜列值喽!
6。汉字的猜解!
 刚才忘了这里了,直到在做教程的时候碰到一个用户名是汉字的,才想起来!
有的时候大家会遇到这样的情况,用逐字猜解列值的方法,有的时候是 >0 页面还是返回错误!看到这样的情况不要慌!不大于0就说晚这个值的ASCII码是负数,也就是汉字喽!这个时候我们要想得到它的ASCII码,就要用到一个函数了!abs()这个函数是用来返回一个值的绝对值的!我们只要把这个函数加在句子里,就可以按照平常的方法猜ASCII码了。具体是这么加的: and (select top 1 abs(asc(mid(列,X,1))) from admin)>N 就是这样了,不过等猜出来后不要忘了加负号哦!猜出ASCII码后就可以用字符转换工具转换成字符了!我以前写了一个小工具,大家可以下载用用!这里提醒大家一下,汉字的ASCII码都是很小的,也就是说在取它们的绝对值后他们会变的很大!所以最好从10000猜起,这样快点!


#日志日期:2008-1-27 星期日(Sunday) 晴 送小红花 推荐指数:复制链接 举报


登录 | 新人注册>>
输入您的评论:(不支持HTML标签)


验证码
本文所属博客:我的黑客生活
引用地址:


copyright blog.tianya.cn

© 天涯社区