Sexta-feira, 19 de dezembro de 2008 às 10h00

Técnica de hack em senhas armazenadas pelo Oracle

Olá, amigos!

Uma das táticas mais "sujas", diga-se de passagem, é a alteração de senha do usuário sem a sua permissão, pois pode ocorrer em diversos momentos do dia-a-dia, por exemplo:

  • O cara saiu de férias e deixou algum objeto no owner dele.
  • Preciso pegar algumas informações da tabela do FULANO.
  • É necessário fornecer algumas permissões do usuário X para Y.
  • Ou a MELHOR! Existe um owner na aplicação que foi criado em 1900 e bolinhas e, agora, precisa de manutenção e ninguém tem acesso a esse usuário, porque ninguém sabe a senha.

Bom, para resolver esses "probleminhas", existe uma técnica no Oracle que podemos utilizar para ter acesso completo a um específico usuário, um pequeno "hack" no dicionário Oracle, mas para conseguir a façanha, é necessário que tenha acesso a view DBA_USERS, que foi utilizado nesse exemplo.

LEMBRANDO

Logicamente todos os exemplos que citei acima poderiam ser feitos pelo DBA da empresa ou alguém que tenha acesso a usuários gerenciais do banco de dados, como SYSTEM, usuários com role de DBA e etc. Isso é apenas um exemplo de como se aplicar a técnica.

Agora, vou passar o exemplo prático de como funciona.

1) Vamos criar um usuário.

SQL> @id

HORA EXECUTADA

-------------------

09-09-2008 11:45:57

INSTANCE_NAME   HOST_NAME            STATUS

--------------- -------------------- ----------

xe              DBARODRIGO          OPEN

USER IS "SYS"

SQL> create user RODRIGO

  2  identified by rodrigo;

Usuário criado.

SQL> grant create session to RODRIGO;

Concessão bem-sucedida.

SQL> disco

Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

2) Teste a conexão do novo usuário no banco de dados.

SQL> conn rodrigo/rodrigo
Conectado.

SQL> disco

Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

3) Conectado com um usuário administrativo, faça um select básico na view DBA_USERS.

SQL> conn system
Informe a senha:
Conectado.

SQL> select username, account_status, password
  2  from dba_users
  3  where username = ´RODRIGO´;

USERNAME                       ACCOUNT_STATUS                   PASSWORD
------------------------------ -------------------------------- ------------------------------
RODRIGO                        OPEN                             F697FBF0BB2DA2EC

4) Altere a senha do usuário desejado, no exemplo, vou alterar a senha para FERNANDA.

SQL> alter user RODRIGO identified by FERNANDA;

Usuário alterado.

5) Pegue o valor gerado para a nova senha.

SQL> select username, account_status, password
2  from dba_users
3  where username = ´RODRIGO´;

USERNAME                       ACCOUNT_STATUS                   PASSWORD
-------------------- --------------------- --------------------

RODRIGO                        OPEN                             FB34D454E9FFDE18

[cor1][b]Observação[/b][/cor1]

Pode parecer confuso, mas vamos recapitular os valores que são equivalentes às senhas:

F697FBF0BB2DA2EC = RODRIGO
FB34D454E9FFDE18 = FERNANDA

6) Para voltar à senha anterior, apenas utilize a opção VALUES junto com IDENTIFIED BYcom o valor da coluna password.

SQL> conn system

Informe a senha:

Conectado.

SQL> alter user RODRIGO identified by values ´F697FBF0BB2DA2EC´;

O valor F697FBF0BB2DA2EC (gerado por um algoritmo HASH) é equivalente ao valor RODRIGO.

Agora, veja os testes.

SQL> conn rodrigo/fernanda
Conectado.
SQL> disco
Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
SQL> conn system
Informe a senha:
Conectado.
SQL> alter user RODRIGO identified by values ´F697FBF0BB2DA2EC´;

Usuário alterado.

SQL> disco
Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
SQL> conn rodrigo/rodrigo
Conectado.
SQL> disco

Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

Como eu não alterei o valor para a senha FERNANDA, se eu tentar logar com essa senha, terei erros, veja.

SQL> conn rodrigo/fernanda

ERROR:

ORA-01017: invalid username/password; logon denied

FINISH! Uma técnica de hack bem conhecida entre os DBAS, que até a versão 10gR2 (no Patchset 10.2.0.4) ainda continua, eu não sei ainda se nas versões 11g já possui algum tipo de segurança nesse ponto, então aprecie com moderação.

Abraços!

2 comentários

 Heitor Moreira
19/12/2008 23h36

Não entendi...

Rodrigo não manjo de Oracle vim ler por curiosidade, mas não consegui entender em absoluto como vc chegou a conclusão de que o HASH F697FBF0BB2DA2EC representava a string "RODRIGO"??

Sei que o HASH FB34D454E9FFDE18 representa a string "FERNANDA" pq foi a string utilizada para gerar a senha. Agora como vc regrediu o HASH F697FBF0BB2DA2EC não ficou claro.

Poderia por gentileza explicar melhor?

Desde já obrigado.

 Rodrigo Almeida
20/12/2008 13h03

HASH para a String RODRIGO

Heitor,

O valor para "F697FBF0BB2DA2EC" é equivalente a minha senha inicial quando criei o usuário RODRIGO, veja no início do artigo, quando eu crio o usuário RODRIGO com a senha "rodrigo", é gerado para mim o valor "F697FBF0BB2DA2EC" no dicionário, feito automaticamente ao criar o usuário.

E nada verdade, o resultado da coluna PASSWORD não é exatamente um valor string, e sim um resultado gerado pelo algoritmo MD5, que gera em formato hexadecimal. Para quem trabalha com segurança sabe que o MD5 não é exatamente um formtado seguro de criptografia.

Com isso, ao decorrer do artigo, eu troca a senha para FERNANDA, que irá gerar outro valor para mim, e quando tenho os dois valores gerados em mão e utilizando a cláusula BY VALUES '' com o IDENTIFIED BY, eu consigo passar ao usuário a senha antiga (rodrigo) e nova (fernanda), por isso que com esses dosi valores eu posso se quizer regredir para a senha rodrigo.

Abraços,
Rodrigo Almeida

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


Sobre o Autor
Rodrigo Almeida formando em analise de banco de dados pela IBTA-SP, especialista em microeletrônica pela INSA-AIME na França e Oracle Certified Associate 9i. Já trabalhou em empresas como BTC Texaco, DuPont do Brasil, Vivo São Paulo, Procwork, DBACorp e atualmente é DBA Oracle da Affinia Automotiva.
3G

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.