27.[GXYCTF2019]BabySQli
这题主要知识点就是mysql在查询不存在的数据时,会自动构建虚拟数据
其次就是base32解密
打开题目:随便输入用户名admin,密码123,提示密码错误。
输入用户名123,密码123,提示错误用户名,从而得知是有admin用户的。
然后查看源代码看到有一串加密字符
了解下base32和base64
base32 只有大写字母和数字数字组成,或者后面有三个等号。
base64 只有大写字母和数字,小写字母组成,后面一般是两个等号。
这个应该是base32,解密得:
解密得到的是一个base64加密字符串:
在解密,得到数据查询语句。
知道数据查询,构造下注入。前面已经知道存在admin数据。
看下有多少字段:发现有检测关键字
发现检测or关键字,可以大写绕过
ORder by 4时超出字段,说明只有3个字段。
union select联合查询,刚开始在查看回显字段,但这里没有回显字段。只能猜测三个字段分别是啥,一般是id、username,password。
查询下admin是否是第二个字段
admin' union select 1,'admin',3#
说明第二个字段是username。
这里关键点是,mysql在查询不存在的数据时,会自动构建虚拟数据,一般数据存储要么明文,要么MD5,这里参考wp
构造一个password,md5查询。123456
最后payload name=1'+union+select+1,'admin','e10adc3949ba59abbe56e057f20f883e'#&pw=123456
这里需要注意下就是name不能等于admin,因为不等于admin才会往后查询,等于admin就不会查询后面了。