HFSEC(HFCTF)——SQL3数据获取/配合burpsuit进行密码猜解

  有几天没有更新了,一个是最近参加第一次ct比赛的复赛,结果就是去签了个到,深刻认识到自己毕竟还是个新手,crypto是600多位的RSA惟公钥解密,虽然自己密码学学得不错,当时也查了不少资料,奈何工具方面我一个也没用过,更别说工具的推荐位数是512位,600多位不知道一天能不能跑完(虽然我并不知道到底是不是直接用工具进行猜解),web则是当下ctf刚火起来的spring框架漏洞,结合字符串绑定和HQL注入漏洞,恕我直言,这几个我都是第一次听说,做的时候一脸懵,提示都找不到,全靠赛事进行一半时,主办方给公告提示,才能查阅资料继续做下去。唯一一个xss题目,在我看来是最简单的一题,也是要结合cookie伪造和markdown语法,作为新手当然不大了解,哈哈哈,重在参与嘛。

  赛后继续投入web安全的学习中来,找到一个很不错的国产ctf平台——HFCTF,上面的web环境很稳定,提示也是循序渐进、参考资料也都给出来了,难度也不高,可以具有针对性地进行练习,最近在上面刷了不少题目,复习了很多好久没拾起来的知识点。话不多说,进入正题。

  这次的题目是一个阶段性sql注入题目,第一阶段是sql语法练习,第二阶段是万能密码任意登录,第三阶段是构造sql语句伪造登录,到了这一题,名字是数据获取,但是就是前几个阶段结合起来利用,不同的点在于这里需要用到不少sql函数进行信息获取,最终达到猜解密码(这里密码无法直接读取)的目的。

  页面如下:

  如果直接使用万能密码,也能进入,进入时直接跳转到提示页面:

  可以想到,登录并不会给你flag,登陆成功只会跳转到这个html页面,真正的flag就是admin用户的密码。

  提示页面给的信息比较多,总结下来就是:

 

  1. ‘ and 1=2 union select...语句使得union前面语句无效,执行后边语句。

  2.union select 1,2,3或者order by 3来猜解表的字段数是不是3个(经测试题目的表字段数为2个),其中order by username 可以猜解字段名(经测试为username和password)。

  3.表名也需要猜解,经测试为user。

  4.密码的具体猜解需要mid、length甚至ASCII函数,配合burpsuit得到。

 

  表名和字段的猜解就不截图了,根据提示走就行了,只要猜对了,就可以登陆成功(也就是转到提示页面),最费时的在密码猜解这里。

  经过之前的构造,我们的语句初步为:' and 1=2 union select * from user where username='admin' and function(password,x)= xxx #

  首先判断长度,使用length(password)>10等条件判断,缩小范围,最终在=32处成功跳转,说明密码长32。

  提示里给出一种方法:mid(password,n,1)=‘j’这个函数可以判断密码第n位是不是字符‘j’,如果返回true,那么就会跳到提示html页面,否则回显“失败”。利用这个我们可以使用burpsuit的intruder,爆破n和j这两个字段,payload分别载入1-32和0-9、a-z、A-Z。

  我使用的方法是ascii函数,ascii(substring(password,n)) = 48,同样使用burp爆破n和48:

 

   payload分别加载我自己用python生成的1-32(应该是33)和ascii可见字符范围32-126:

 

  start attack,跑了不到一分钟后结果出来了:

 

   可以看到1812长度的都是返回302状态码,就是跳转了,正好也是29个(之前猜解了前两位,我设置的3-32漏了最后一位),然后delete掉其余几千个结果,只保留这29个,根据payload1排序,依次输入到python里,然后根据脚本输出flag:

 

   最后补充上前两位,自己猜解最后一位,补全flag,成了!

 

posted @ 2019-11-06 18:11  An_Emotional_Killer  阅读(343)  评论(0编辑  收藏  举报