当前位置: 首页 > news >正文

PortSwigger SQL注入LAB3

库类型与版本信息,并在页面中回显版本字符串。

通过该实验可以理解:UNION 注入攻击的基本流程——包括判断注入点、探测原始查询的列数、使用 NULL 占位符对齐列数,以及如何针对 Oracle 数据库的系统视图(如v$version)构造查询语句以获取系统信息。

【实验目标】
该实验的产品类别过滤器中存在 SQL 注入漏洞。
利用该漏洞,使用 UNION 攻击获取数据库版本字符串

1. 启动实验环境与 Burp Suite

启动实验环境后,可以看到与前几个 LAB 相似的购物页面。本次实验的注入点位于页面中的产品类别过滤器

接下来启动 Burp Suite,进入Proxy模块下的HTTP history子页面。当浏览器中的代理配置生效后,此处将开始记录所有 HTTP 流量。

确认注入点位于过滤器后,就可以直接开始抓取并分析请求。

2. 开启代理并抓取过滤请求

启用浏览器中已配置好的 Burp Suite 代理,准备捕获过滤器请求。

先随意点击一个分类选项,观察 Burp Suite 中捕获到的数据:

根据路径特征(/filter?category=...),可以快速锁定产品类别过滤器对应的请求记录。

接下来我们右键将它发送至Repeater模块,以便后续进行重放与修改测试。

3. 分析请求数据并推测后端 SQL 逻辑

该请求是 GET 参数注入场景,核心请求行为可概括为:GET /filter?category=Pets HTTP/2。据此可推测后端可能执行类似查询:

SELECT * FROM products WHERE category = 'Pets'

4. 构造注入攻击

4.1 定位注入点

要破坏上述查询语句的原有逻辑,可先像之前一样利用单引号'测试字符串边界。尝试在Pets后追加一个单引号,则查询可能变为:

SELECT * FROM products WHERE category = 'Pets''

这会触发 SQL 语法错误。我们在 Repeater 中将category的值改为Pets'并发送请求:

服务器返回500 Internal Server Error,说明单引号被带入 SQL 语句并破坏语法,注入点得到确认。

4.2 为什么不能直接写 UNION

题目已给出目标数据库为Oracle,因此我们需要注入类似SELECT banner FROM v$version的查询。但不能直接写成:

' UNION SELECT banner FROM v$version --

原因是:UNION 两侧 SELECT 的列数必须一致。若列数不一致,数据库会报错。

4.3 什么是“列”

在数据库表中,列(column)就是字段。比如下面这个建表示例中,idnameage就是 3 列:

CREATE TABLE student ( id INT, name VARCHAR(20), age INT );

回到本实验,后端查询里使用了SELECT *,表示取出该表的所有列。UNION 注入时,右侧SELECT必须返回相同列数,否则会报错。

4.4 使用 ORDER BY 探测列数

由于无法直接看到后端查询列数,我们可以用ORDER BY n逐步探测:

  • 先尝试' ORDER BY 1--
  • 再尝试' ORDER BY 2--
  • 继续尝试' ORDER BY 3--...

当某个 n 导致报错时,说明该位置超出列范围,列数即为n-1

在本实验中,当ORDER BY 3报错,说明原查询共有2 列。因此 UNION 语句也必须返回 2 列。

4.5 对齐列数并读取版本信息

既然目标查询需要 2 列,那么可以用NULL作为占位,构造如下 UNION 语句:

SELECT * FROM products WHERE category = '' UNION SELECT NULL, banner FROM v$version --

4.6 构造最终 Payload

各组成部分的作用如下:

  • ':闭合原 SQL 字符串。
  • UNION SELECT:拼接注入查询结果。
  • NULL, banner:对齐 2 列,并让版本信息出现在可回显列中。
  • FROM v$version:读取 Oracle 版本信息。
  • --:注释掉原查询后续内容。

最终可使用的请求示例:

GET /filter?category=' UNION SELECT NULL,banner FROM v$version-- HTTP/2

4.7 执行攻击请求

在 Repeater 中将category参数修改为' UNION SELECT NULL,banner FROM v$version--,点击Send发送:

返回200 OK说明语法层面可执行。随后切换到浏览器访问对应 URL:

可以看到页面成功回显数据库版本字符串,右上角也显示LAB Solved,实验目标达成。

【本题最终 Payload】

' UNION SELECT NULL,banner FROM v$version--

5. 总结与防御建议

本实验是一次典型的基于 UNION 联合查询的 SQL 注入攻击。其根本成因包括:

  • 产品类别过滤器参数被直接拼接到 SQL 语句中,未做安全处理;
  • 应用将数据库错误直接回显给客户端,为列数探测提供反馈;
  • 未采用参数化查询(Prepared Statement)或 ORM 安全接口。

防御措施:

  • 参数化查询—— 将 SQL 代码与用户数据彻底分离;
http://www.gsyq.cn/news/1583966.html

相关文章:

  • 猫抓浏览器扩展:你的网页视频资源一站式下载解决方案
  • 为什么83%的AI项目ROI测算失真?:深度拆解SITS 2026框架下AISMM价值锚点重构逻辑
  • Win11Debloat:让Windows 11重获新生的终极优化神器
  • 终极指南:如何在Mac上使用Whisky流畅运行Windows软件和游戏
  • 2026年6月烟台4000平米二级口腔专科医院种植牙实战测评
  • 【SITS 2026权威认证指南】:AI伦理成熟度四级跃迁路径、评估工具包与企业落地避坑清单
  • 一个方案设计卡壳的下午,芯查查数字FAE让我提前下班
  • Linux版微信开发者工具:在Linux系统上轻松开发微信小程序的完整指南
  • HTML转Figma终极指南:从网页到设计的完整高效转换方案
  • 百度网盘macOS版破解插件:解锁SVIP特权与下载速度限制的技术解析
  • 华硕笔记本风扇异常终极修复指南:用G-Helper智能掌控散热系统
  • 美国亚马逊双板滑雪用头盔和单板滑雪用头盔
  • 山西太阳能薄膜企业技术领先全国
  • AISMM价值评估黄金三角模型发布,仅限首批认证机构使用的SITS 2026 ROI动态测算引擎首次解密
  • 亲测靠谱!高性价比视频号团购服务商分享
  • 原生后台与增效工具全域对比:依托达秘补齐建联短板,搭建TikTok高效达人运营体系
  • 3DS游戏存档管理完整指南:使用JKSM保护你的游戏进度
  • 搞定论文数据难题!Okbiye 一站式 AI 数据分析功能,科研人告别 SPSS 繁琐操作
  • AISMM价值创造评估实战手册:手把手教你用SITS 2026标准测算AI项目真实IRR(附可验证Excel模板)
  • IO流(五)高级流——>序列化流和反序列化流
  • Download Full Installer终极指南:如何轻松下载macOS完整安装包
  • 【长视频AI工业化落地白皮书】:基于17个真实项目验证的工具选型矩阵与ROI测算模型
  • 5分钟快速上手:用GeoIP实现精准IP地理位置查询的完整指南 [特殊字符]
  • SITS 2026不是新标准,而是旧文化的“手术刀”:AISMM Level 5组织级持续改进文化落地失败的3个隐蔽陷阱
  • Windows 11终极优化指南:用Win11Debloat轻松提升系统性能51%
  • 弄懂 4 个筛选维度后,固体饮料代加工哪家性价比高该如何理性判断?
  • 计算机毕业设计之基于机器学习的职业与心理疾病相关性研究与分析设计与实现
  • 139k Star背后的AI Agent技能工程化革命
  • 免费开源Win11Debloat工具:3分钟彻底清理Windows 11臃肿系统完整指南
  • 接口测试和单元测试详解