1. 漏洞环境与测试目标解析
SQLi-Labs是一个专门用于学习SQL注入技术的开源靶场,其中Less-4是一个典型的基于双引号和括号闭合的字符型GET注入漏洞场景。这个关卡模拟了开发者在拼接SQL查询语句时,未对用户输入的参数进行充分过滤和转义的情况。
与常见的单引号闭合不同,Less-4的特殊之处在于其SQL查询语句使用了双引号(")和括号(())来包裹用户输入。这种闭合方式在实际开发中并不少见,特别是在使用某些框架或ORM工具时可能会遇到。攻击者可以利用这种闭合方式构造特殊的注入payload,绕过常规的防御措施。
注意:本文所有操作仅限在授权的测试环境中进行,未经授权的渗透测试可能涉及法律风险。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 注入原理深度剖析
2.1 SQL查询语句结构分析
通过查看Less-4的源码,我们可以发现其SQL查询语句大致如下:
sql复制SELECT * FROM users WHERE id=("$id") LIMIT 0,1
这里的关键点是:
- 用户输入的$id参数被双引号包裹
- 整个参数部分又被括号包裹
- 查询结果只返回第一条记录(LIMIT 0,1)
这种结构意味着我们需要构造的payload必须能够:
- 正确闭合双引号
- 正确闭合括号
- 在有限的返回结果中获取有效信息
2.2 注入点探测技巧
在开始正式注入前,我们需要确认注入点的存在和类型。以下是常用的探测方法:
- 基础测试:
code复制?id=1" --+
这个payload尝试用双引号闭合前面的引号,并用注释符(--+)注释掉后面的内容。如果页面返回正常,说明可能存在注入。
- 错误触发:
code复制?id=1"
故意不闭合引号,观察是否报错。如果返回数据库错误信息,可以进一步确认注入点。
- 逻辑测试:
code复制?id=1") and 1=1 --+
?id=1") and 1=2 --+
通过布尔逻辑判断注入是否成功。如果两个返回结果不同,说明注入成功。
3. 完整注入流程详解
3.1 确定字段数量
使用ORDER BY子句确定查询返回的字段数量:
code复制?id=1") order by 3 --+
?id=1") order by 4 --+
当ord
