Data

19 dez, 2008

Técnica de hack em senhas armazenadas pelo Oracle

Publicidade

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!