ODAT
ODAT (Oracle Database Attacking Tool) é uma ferramenta de teste de penetração open source que testa a segurança de Bases de Dados Oracle remotamente.
Exemplos de uso do ODAT:
- Tens uma base de dados Oracle à escuta remotamente e queres encontrar SIDs e credenciais válidas para te ligares à base de dados
- Tens uma conta Oracle válida numa base de dados e queres escalar os teus privilégios para te tornares DBA ou SYSDBA
- Tens uma conta Oracle e queres executar comandos de sistema (ex. reverse shell) para avançar no sistema operativo que aloja a base de dados
Testado em Oracle Database 10g, 11g, 12c, 18c e 19c.
Versão ODAT linux standalone em https://github.com/quentinhardy/odat/releases/. Nota: recomenda-se usar a versão de desenvolvimento (git clone), branch master-python3 (versão python 3).
Registo de alterações
- Versão 5.1.1 (27/04/2022):
- Exibe uma mensagem de aviso quando ocorre um "ORA-12519 - TNS:no appropriate service handler found". Este erro pode ser despoletado pelo servidor de base de dados (listener) quando demasiadas ligações foram estabelecidas (ao fazer brute-force de credenciais, por exemplo). Neste caso, a opção --sleep deve ser usada (ex. --sleep 0.2).
- Versão 5.1 (12/03/2021):
- Nova opção no módulo all: --nmap-file para carregar todas as bases de dados Oracle a partir de um ficheiro de saída XML do nmap
- Nova opção no módulo all: -l para carregar todos os alvos a partir de um ficheiro de texto (ip:porta ou ip em cada linha)
- No módulo all, é agora testada uma ligação TCP em cada alvo antes de iniciar os testes ODAT. --timeout-tcp-check pode ser usado para gerir o valor de timeout.
- No módulo all, é agora feito um teste em cada alvo para verificar se o listener TNS está bem configurado. Este teste é feito após o teste de ligação TCP.
- Nova opção global: --client-driver. Permite definir o nome do cliente para a ligação à base de dados (client_driver de V$SESSION_CONNECT_INFO). Útil para aplicações cujos utilizadores finais não sabem que cx_Oracle está a ser usado. Por defeito, agora é 'sql*plus'.
- O ODAT aceita agora um ficheiro sqlnet.ora. Um ficheiro predefinido está em conf/. O timeout de ligação TCP & OUTBOUND (TNS) está definido para 60 segundos por defeito agora.
- Versão 5.0 (08/02/2021):
- Novo módulo importante: Service Name Guesser, para procurar nomes de serviço (Service Names) válidos. Módulo específico chamado snguesser e também integrado no módulo all. Por defeito, o módulo all pesquisa agora todos os nomes de serviço válidos após pesquisar SIDs. Os SIDs podem ser idênticos ao Service Name. Quando um Service Name é encontrado mas não um SID, o Service Name pode ser usado como SID para ligação.
- Opção --basic-info no módulo search para obter algumas informações técnicas básicas sobre a base de dados/instância. Obtém Service Name, SID, bases de dados, estado do Oracle Database Vault, estado do Java, hostname, endereço IP do servidor, política de palavras-passe, privilégios de sistema atuais, funções atuais, patches (quando >= 12c e o utilizador tem privilégios), etc. Requer privilégios elevados para informações muito interessantes (ex. política de palavras-passe e estado de bloqueio).
- Reverse shell implementado no módulo DbmsScheduler quando o alvo é Windows. Inicia um servidor http mínimo, faz a base de dados Oracle descarregar o código powershell e executa-o remotamente. O utilizador tem uma shell PS interativa. O ficheiro descarregado é removido automaticamente.
- Opção --make-download implementada no módulo DbmsScheduler para fazer um alvo Windows descarregar um ficheiro script/binário.
- Correção de bug na saída do módulo DbmsScheduler (printOSCmdOutput()).
- Melhores explicações no módulo DbmsScheduler (opções).
- Versão 4.3 (28/06/2020):
- Nova opção: --both-ul. Testa cada palavra-passe em minúsculas e maiúsculas se não for feito no(s) ficheiro(s) de credenciais
- Nova opção: --random-order. Testa contas em ordem aleatória. Por defeito, usa a ordem do ficheiro de texto
- Todas as palavras-passe são agora testadas em minúsculas por defeito (ficheiros de contas modificados de maiúsculas para minúsculas)
- Algumas novas contas
- Versão 4.2 (04/02/2020):
- Shell SQL interativa mínima no módulo search
- Nova funcionalidade para descarregar ficheiros com DBMS_XSLPROCESSOR.read2clob no módulo DbmsXslprocessor
- Melhoria para obter o SO remoto após autenticação
- Correção de bugs (ex. tamanho do terminal)
- Versão 4.1 (15/01/2020):
- Opção para ligação com SERVICE NAME em vez de SID
- Codificação definida para UTF-8 por defeito para algumas operações (ex. NVARCHAR2 e NCLOB, VARCHAR2 e CLOB)
- Múltiplas correções de bugs (problemas de codificação)
- Versão 4.0 (10/08/2019):
- Odat com python 3, versão estável
- Versão 3.0 (01/09/2019):
- Compatível com Oracle Database 18c
- Nova opção no módulo Java para definir o caminho para a shell (ex. /usr/bin/sh no CentOS)
- Versão 2.3.2 (16/07/2019):
- Correções de bugs:
- tabela externa e falso negativo
- Versão 2.3.1 (10/08/2018):
- Versão 2.3 (06/03/2018):
- Correções de bugs:
- Algumas credenciais de base de dados podiam não ser detetadas no módulo passwordguesser (quando tenta ligar como SYSDBA/SYSOPER antes). Correção de bug importante!
- PPoutput em falta no módulo smb (agradecimento a dirkjanm)
- Falso positivo no módulo tnspoison
- Por vezes, impossível obter a versão a partir de VSNNUM
- Melhorias:
- Melhorias de desempenho ao fazer brute-force de contas.
- Opção para ligação com uma TNS Connection String
- Novas credenciais triviais no ficheiro de contas
- Melhor método de leitura de ficheiros no módulo dbmsLob (agradecimento a omair2084)
- Versão 2.2.1 (04/12/2017):
- Correções de bugs:
- Versão no tnscmd (info)
- Módulo externo (Capturar um erro Oracle)
- Capturar erro quando "ligação ao servidor falhou"
- Tnscmd: "The server SID must be given with the '-d SID' option
- Correção de bug TypeError no módulo tnspoison
- Módulo TNS poisoning quando porta!=1521 (bug de inteiro)
- Melhorias:
- Versão 2.2 (25/03/2016):
- Um novo módulo (tnspoison) para explorar o ataque de poisoning do listener TNS (CVE-2012-1675). Muito obrigado a Joxean Koret e donctl.
- Algumas correções de bugs
- Melhor menu de ajuda
- Páginas WIKI no repositório ODAT
- Versão 2.1 (04/03/2016) :
- Um novo módulo (cve) para explorar algumas CVE (Common Vulnerabilities and Exposures). CVE-2012-3137 (talvez este número, não tenho a certeza...) implementada de momento: Um utilizador autenticado pode modificar todas as tabelas que consegue selecionar mesmo que normalmente não as possa modificar (sem privilégio ALTER).
- Nova opção (--accounts-files) para ataque de autenticação remota que utiliza 2 ficheiros distintos: uma lista de logins e uma lista de palavras-passe.