【Web实战】Oracle注入专题——注入注意点+排序注入绕过实战之踩坑篇
字数 1525
更新时间 2025-08-10 08:28:37

Oracle注入专题:注入注意点与排序注入绕过实战

一、Oracle注入基础

1. Oracle数据库注入特点

Oracle数据库在注入过程中有以下重要特点:

  • 数据类型敏感:必须在字符型字段使用字符型数据,整型字段使用整型数据
  • 语法严格:相比MySQL更为严格,注释和函数使用有特殊要求
  • 系统表结构特殊:需要了解Oracle特有的系统表和视图

2. Oracle与MySQL注入关键区别

特性 Oracle MySQL
注释 -- 可用,# 不可用 # 和 -- 都可用
数据类型 严格区分字符型和整型 类型转换较灵活
系统表 v$version, user_tables等 information_schema
虚拟表 需要 from dual 不需要虚拟表
延时函数 dbms_pipe.receive_message() sleep()

二、Oracle注入实战技巧

1. 数据类型判断与利用

判断字段类型方法:

' union select 1,2 from dual--  -- 如果报错提示类型不匹配
' union select '1','2' from dual--  -- 如果成功则说明是字符型字段

实际案例:

6340d33754bf402798a6051733698a3c'+union+select+'1','2'+from+dual--

2. 常用Oracle注入函数

获取数据库信息:

-- 获取版本信息
select banner from sys.v_$version where rownum=1

-- 获取当前数据库
select instance_name from V$INSTANCE

-- 获取第一个表名
select table_name from user_tables where rownum=1

延时注入:

dbms_pipe.receive_message('RDS',5)  -- 延时5秒

3. 报错注入利用

-- 使用exp函数(数值大于709会报错)
asc,exp(710)

-- 使用updatexml报错
desc,updatexml(1,concat(0x7e,(database()),0x7e),1)

三、Oracle排序注入实战

1. 排序注入原理

Web应用中排序功能通常使用SQL的ORDER BY实现:

SELECT * FROM users ORDER BY 1 desc/asc

当排序参数可控时,可在desc/asc位置注入恶意代码。

2. 排序注入检测流程

第一步:判断注入点

  • 测试参数对'、"、/0、/1的响应
  • 观察是否影响返回结果

第二步:判断数据库类型

  • 测试#和--哪个能作为注释
  • Java站点+#不可用+--可用 → 可能是Oracle

第三步:验证注入

  • 使用Oracle特有函数验证:
asc,exp(710)  -- 测试报错
asc,DBMS_PIPE.RECEIVE_MESSAGE('RDS',1)  -- 测试延时

3. 绕过WAF技巧

Oracle与MySQL绕过差异:

  • MySQL中可使用多行注释加垃圾字符绕过:
sleep/*大量垃圾字符*/(1)
  • Oracle中这种绕过方式通常无效,语法要求更严格

有效绕过方法:

  • 使用Oracle特有函数如DBMS_PIPE.RECEIVE_MESSAGE
  • 避免使用被拦截的关键字,寻找替代方案

四、实战踩坑与解决方案

1. 常见错误

  1. 数据库类型误判

    • 误将Oracle当作MySQL进行注入
    • 解决方案:通过注释符和特有函数准确判断
  2. 数据类型不匹配

    • 在字符型字段使用整型数据
    • 解决方案:添加引号转为字符型
  3. WAF绕过方法不当

    • 使用MySQL的绕过技巧在Oracle中无效
    • 解决方案:使用Oracle特有的函数和方法

2. 有效解决方案

  1. 准确判断数据库类型

    • 测试#和--哪个能作为注释
    • 测试特有函数如dbms_pipe.receive_message
  2. 正确处理数据类型

    • 当union select 1,2报错时尝试union select '1','2'
  3. 使用Oracle特有注入技术

    • 延时注入:DBMS_PIPE.RECEIVE_MESSAGE('RDS',5)
    • 报错注入:exp(710)或updatexml

五、防御建议

  1. 使用预编译语句

    • 避免SQL拼接,使用参数化查询
  2. 严格过滤输入

    • 对排序参数进行白名单验证(只允许asc/desc)
  3. 最小权限原则

    • 数据库用户只赋予必要权限
  4. WAF规则优化

    • 拦截dbms_pipe.receive_message等危险函数
    • 监控异常的延时请求
  5. 错误信息处理

    • 避免将数据库错误信息直接返回给用户

通过掌握Oracle注入的特性和技巧,结合实战中的经验教训,可以有效进行Oracle数据库的安全测试和防护。

相似文章
相似文章
 全屏