GXYCTF2019-BabySQli

发布于 2021-08-06  63 次阅读


知识点:

​ 当使用联合查询时,查询的数据不存在,联合查询就会暂时构造一个虚拟的数据。

解题:

image-20210517154451618

题目页面只给了一个登陆框,经过简单的测试,页面会跳转到search.php,并且存在三种情况

  1. 用户名不为admin,回显 no user
  2. 用户名为admin,回显 wrong pass!
  3. 输入单引号数据库报错

此外查看search.php页面的源代码,存在如下注释

MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5

base32解密得到,如下信息:

c2VsZWN0ICogZnJvbSB1c2VyIHdoZXJlIHVzZXJuYW1lID0gJyRuYW1lJw==

base64解码得到,如下信息:

select * from user where username = '$name'

综合如上信息分析,不难看出,POST型SQL注入,而且一定存在 admin 这个用户

使用SQLMAP 一把嗦,能够得到如下信息:

image-20210517155532457

尝试md5解密密码,发现密码挺复杂,根本解不出来!

这能通过别的方式,实现登陆。

这里就要提到联合查询时,当查询不存在的数据时,会虚拟这个数据出来。

首先建立一个测试表

image-20210517160250638

执行联合查询语句

image-20210517160559494

我们发现联合查询的语句被成功虚拟了出来

image-20210517161622441

只又在查询的同时才会虚拟出来,这个虚拟是暂时的。

因此我们可以同样来虚拟一个新的用户,进行登录,这里要结合我们sqlmap跑出来的信息,对应好字段。

构造我们的payload

用户处:1' union select 1,'admin','81dc9bdb52d04dc20036dbd8313ed055' #
密码处:1234(81dc9bdb52d04dc20036dbd8313ed055解密之后的值)