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:
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.
LEMBRANDOLogicamente 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.
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 - ProductionSQL> conn rodrigo/rodrigo
Conectado.
SQL> disco
Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - ProductionSQL> 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 F697FBF0BB2DA2ECSQL> alter user RODRIGO identified by FERNANDA;
Usuário alterado.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 = FERNANDASQL> 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 deniedFINISH! 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!
Heitor Moreira
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.
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
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.