打开后发现是个登录界面
尝试各种万能钥匙
发现都是这个
查看当前页面源码
发现好像是个加密后的字符串
解密一下
经过测试解码,解码顺序是:base32解码->base64解码
发现这是一句用来查询 我们提交的用户名的数据(应该没什么操作空间)
选择测试一下是什么类型的
数字:
单引号:
单引号可用,那就先查一下列
发现依旧报错,那就双写试试
双写绕过也错误,那就换个联合查询看看能不能查出来
发现出现了新的错误提示
Error: The used SELECT statements have a different number of columns
可以使用union select来查询列数,那就再次增加列数来尝试
最终发现密码错误的提示
那就一共三列
尝试一下爆库
发现还是报错
应该有什么被过滤掉了
参考:
【精选】BUUCTF--[GXYCTF2019]BabySQli详解-CSDN博客
我的思路是去用union select查询列数,然后尝试username在哪个列,然后再注入临时用户数据
现在测试username在那个列
第一列:
用户错误,不对
第二列:
密码错误,username就在第二列
尝试注入临时用户数据
name=1' union select 1,'admin','202cb962ac59075b964b07152d234b70'#&pw=123
注意:这里的第三列用的是123进行md5转换后的数据,因为
mysql在查询不存在的数据时会自动构建虚拟数据,一般数据要么明文,要么MD5
修改放包后即可获取flag