BLOG RODRIGO ALMEIDA

Tag: 9i

Técnica de hack em senhas armazenadas pelo Oracle

by Rodrigo Almeida on fev.05, 2010, under Administração

Olá,

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, é 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 ninguem 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

Lógicamente, que 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.

@id
HORA EXECUTADA ------------------- 09-09-2008 11:45:57 INSTANCE_NAME HOST_NAME STATUS --------------- -------------------- ---------- xe DBARODRIGO OPEN USER IS "SYS"
create user RODRIGO
identified by rodrigo;

Usuário criado.

grant create session to RODRIGO;

Concessão bem-sucedida.

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.

conn rodrigo/rodrigo

Conectado.

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.

conn system

Informe a senha:

Conectado.

select username, account_status, password
    from dba_users
    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.

alter user RODRIGO identified by FERNANDA;

Usuário alterado.

5) Pegue o valor gerado para a nova senha.

select username, account_status, password
  from dba_users
  where username = 'RODRIGO';

USERNAME ACCOUNT_STATUS PASSWORD

—————————— ——————————– ——————————

RODRIGO OPEN FB34D454E9FFDE18

Observação
Pode parecer confuso, mais vamos recapitular os valores que são equivalentes as senhas:
F697FBF0BB2DA2EC = RODRIGO
FB34D454E9FFDE18 = FERNANDA

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

conn system

Informe a senha:

Conectado.

alter user RODRIGO identified by values 'F697FBF0BB2DA2EC';

O valor F697FBF0BB2DA2EC (gerado por um algoritmo HASH), é equivalente ao valor RODRIGO.
Agora, veja os testes.

conn rodrigo/fernanda

Conectado.

disco

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

conn system

Informe a senha:

Conectado.

alter user RODRIGO identified by values 'F697FBF0BB2DA2EC';

Usuário alterado.

disco

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

conn rodrigo/rodrigo

Conectado.

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.

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.

ATUALIZAÇÃO

Para as versões 11g essa técnica não é mais aplicada devido as alterações estruturais no banco de dados por parte de segurança, que ficou muito mais confiável. Então, essa técnica se aplica até a versão Oracle Database 10g Release 2.

Abraços,

  • Share/Bookmark
2 Comments :, , , , , , , , , , , more...

RMAN - Encontrando o DBID do banco de dados

by Rodrigo Almeida on jan.18, 2010, under RMAN

Olá,

Uma dos maiores problemas de realizar uma recuperação completa ou uma restauração de um banco de dados para um novo servidor, é o problema de mencionar o DBID (Database Identifier - Identificação do banco de dados) para o catálogo do RMAN.

Pois, para conseguir uma restauração da base, é necessário mencionar o DBID ao catálogo de recuperação para conseguir associar o banco de dados no catálogo e posteriormente restaurar e recuperar seus backups sets.

Agora, vamos mencionar quais os meios que podemos encontrar o DBID de um banco de dados.

1. Dicionário de dados

Podemos realizar um simples select na view v$database para conseguir a informação, veja.

select dbid from v$database;
      DBID
----------
4263396950
1 linha selecionada.

2. RMAN - Inicío de sessão

O DBID também é informado quando você conecta ao RMAN, lembrando, que o DBID será informado se o banco de dados estiver em MOUNT ou OPEN, se apenas com NOMOUNT, não será informado, pois não irá ler o arquivo de controle, ou control file. Exemplo.

[oracle@PELSPOWMS2 ~]$ rman

Recovery Manager: Release 10.2.0.1.0 - Production on Thu Oct 23 17:15:23 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

RMAN> connect target 'rman/##########@wmssp.world';

connected to target database: WMSSP (DBID=4263396950)

3. RMAN - Usando o comando List incarnation

Outro modo de se conseguir o DBID do banco de dados, é após logar-se no banco de dados target e estar conectado ao catálogo de recuperação, utilizar o comando LIST INCARNATION, exemplo:

RMAN> list incarnation;

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
——- ——- ——– —————- — ———- ———-
8451    8458    WMSSP    4263396950       PARENT  1          30/06/2005 19:09:40
8451    8452    WMSSP    4263396950       CURRENT 446075     27/02/2008 09:03:20

Uma dica muito importante é sempre manter uma planilha com todos os bancos de dados, senhas e seus respectivos DBID armazenados após as criação do banco de dados para não correr risco de não saber o DBID do banco de dados criado.

Abraços,

  • Share/Bookmark
5 Comments :, , , , , , , , , , , , , , more...

Publicidade


Friend Connect