Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
odat — Ferramenta de teste de penetração para bancos de dados Oracle que descobre SIDs válidos, realiza força bruta de credenciais, escala privilégios para DBA, executa comandos do sistema e explora CVEs conhecidas. | Kitploit
Ferramentas/GitHubGitHub/quentinhardy/odat
Escalada de PrivilégiosScanners de VulnerabilidadesAtaques de SenhaExploraçãoTestes de PenetraçãoComando e ControleSegurança de Banco de Dados
GitHubquentinhardy/odat

odat

Ferramenta de teste de penetração para bancos de dados Oracle que descobre SIDs válidos, realiza força bruta de credenciais, escala privilégios para DBA, executa comandos do sistema e explora CVEs conhecidas.

Ver Repositório
1.8k349há 4 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Quentin HARDY
[email protected]
[email protected]

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).

Funcionalidades

Graças ao ODAT, podes:

  • pesquisar SID válido num listener Oracle Database remoto através de:
    • um ataque de dicionário
    • um ataque de força bruta
    • ALIAS do listener
  • pesquisar contas Oracle usando:
    • um ataque de dicionário
    • cada utilizador Oracle como a palavra-passe (necessita de uma conta antes de usar este ataque)
  • executar comandos de sistema no servidor de base de dados usando:
    • DBMS_SCHEDULER
    • JAVA
    • tabelas externas
    • oradbg
  • descarregar ficheiros armazenados no servidor de base de dados usando:
    • UTL_FILE
    • DBMS_XSLPROCESSOR
    • tabelas externas
    • CTXSYS
    • DBMS_LOB
  • carregar ficheiros no servidor de base de dados usando:
    • UTL_FILE
    • DBMS_XSLPROCESSOR
    • DBMS_ADVISOR
  • eliminar ficheiros usando:
    • UTL_FILE
  • obter acesso privilegiado usando as seguintes combinações de privilégios de sistema (consulta a ajuda para comandos do módulo privesc):
    • CREATE ANY PROCEDURE
    • CREATE PROCEDURE e EXECUTE ANY PROCEDURE
    • CREATE ANY TRIGGER (e CREATE PROCEDURE)
    • ANALYZE ANY (e CREATE PROCEDURE)
    • CREATE ANY INDEX (e CREATE PROCEDURE)
  • enviar/receber pedidos HTTP a partir do servidor de base de dados usando:
    • UTL_HTTP
    • HttpUriType
  • digitalizar portas do servidor local ou de um servidor remoto usando:
    • UTL_HTTP
    • HttpUriType
    • UTL_TCP
  • capturar uma autenticação SMB através de:
    • um índice para despoletar uma ligação SMB
  • explorar algumas CVE:
    • o CVE-2012-3137
      • obter a chave de sessão e o salt para utilizadores arbitrários
      • ataque por dicionário em sessões
    • o CVE-2012-????: Um utilizador autenticado pode modificar todas as tabelas que consegue selecionar mesmo que normalmente não as possa modificar (sem privilégio ALTER).

Esta lista não é exaustiva.

Mapa mental - ODAT & testes de penetração Oracle Database

Alt text

Plataformas suportadas e dependências

O ODAT é compatível apenas com Linux.

Existe uma versão standalone para não ser necessário instalar dependências (ver https://github.com/quentinhardy/odat/releases/). O ODAT standalone foi gerado graças ao pyinstaller.

Se quiseres ter a versão de desenvolvimento instalada no teu computador, estas ferramentas e dependências são necessárias:

  • Linguagem: Python 3
  • Dependências Oracle:
    • Instant Oracle basic
    • Instant Oracle sdk
  • Bibliotecas Python:
    • cx_Oracle
    • passlib
    • pycrypto
    • python-scapy
    • python-libnmap (novo desde python 5.1)
    • colorlog (recomendado)
    • termcolor (recomendado)
    • argcomplete (recomendado)
    • pyinstaller (recomendado)

Instalação (opcional, para versão de desenvolvimento)

Esta parte descreve como instalar instantclient, CX_Oracle e algumas outras bibliotecas python no Ubuntu para ter a versão de desenvolvimento do ODAT. Não te esqueças que existe uma versão standalone do ODAT em https://github.com/quentinhardy/odat/releases/: Não é necessário instalar nada para usar a versão standalone

  • Clonar o repositório para obter o código fonte do ODAT:
root@kitploit:~
git clone https://github.com/quentinhardy/odat.git
  • Atualizar as páginas wiki neste repositório para obter a documentação do ODAT localmente:
root@kitploit:~
cd odat/
git submodule init
git submodule update
  • Obter instant client basic, sdk (devel) e sqlplus do site da Oracle:

    • X64: http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
    • X86: http://www.oracle.com/technetwork/topics/linuxsoft-082809.html
  • Por enquanto (03/2021), a versão 11.2 do instant client Oracle Database é a melhor se quiseres gerar o ODAT standalone com pyinstaller. Para usar a versão de desenvolvimento do ODAT, pode ser usada a última versão do cliente Oracle (ex. versão 19).

  • Instalar o pacote python3-dev, alien e libaio1 (para sqlplus):

root@kitploit:~
sudo apt-get install libaio1 python3-dev alien python3-pip
  • Gerar ficheiros DEB a partir de ficheiros RPM com:
root@kitploit:~
sudo alien --to-deb oracle-instantclient19.3-basic-???.x???.rpm
sudo alien --to-deb oracle-instantclient19.3-devel-???.x???.rpm
  • Instalar instant client basic, sdk e sqlplus:
root@kitploit:~
sudo dpkg -i oracle-instantclient19.3-basic-???.x???.deb
sudo dpkg -i oracle-instantclient19.3-devel_???_???.deb
  • Colocar estas linhas no ficheiro /etc/profile para definir as variáveis env Oracle:
root@kitploit:~
export ORACLE_HOME=/usr/lib/oracle/19.3/client64/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export PATH=${ORACLE_HOME}bin:$PATH
  • Reiniciar a sessão (para aplicar as variáveis de ambiente)

  • Criar o ficheiro /etc/ld.so.conf.d/oracle.conf e adicionar o caminho para o Oracle home:

root@kitploit:~
/usr/lib/oracle/19.3/client64/lib/
  • Atualizar o ldpath usando:
root@kitploit:~
sudo ldconfig
  • Instalar CX_Oracle
root@kitploit:~
sudo -s
source /etc/profile
pip3 install cx_Oracle
  • Testar se está tudo bem:
root@kitploit:~
python3 -c 'import cx_Oracle' 

Este comando deve apenas retornar sem erros.

  • Instalar algumas bibliotecas python:
root@kitploit:~
sudo apt-get install python3-scapy
sudo pip3 install colorlog termcolor pycrypto passlib python-libnmap
sudo pip3 install argcomplete && sudo activate-global-python-argcomplete
  • Descarregar e instalar a versão de desenvolvimento do pyinstaller (http://www.pyinstaller.org/) para python 3.
root@kitploit:~
python setup.py install
  • ou instalar através do pip:
root@kitploit:~
pip3 install pyinstaller
  • Executar o ODAT:
root@kitploit:~
./odat.py -h

Bom trabalho se não tiveres erros:)

Documentação e exemplos

A documentação e exemplos estão no WIKI

Doação

Se quiseres apoiar o meu trabalho fazendo uma doação, agradeço muito:

  • Via BTC: 36FugL6SnFrFfbVXRPcJATK9GsXEY6mJbf
Baixar ferramenta
  • 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):
    • Nova opção no módulo Java para explorar CVE-2018-3004: Permite a um utilizador autenticado escrever arbitrariamente em ficheiros no SO (Escalação de privilégios com bypass à segurança JVM Oracle incorporada). Mais detalhes em http://obtruse.syfrtext.com/2018/07/oracle-privilege-escalation-via.html.
  • 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:
      • Novos SIDs
  • 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.
    • Imprime palavras-passe 10g para compatibilidade com oclHashcat.
    • Correções de bugs (ao escutar com nc).
  • Versão 2.0 (21/02/2016) :
    • Um novo módulo (privesc) para usar privilégios de sistema de um utilizador Oracle (ex. CREATE ANY PROCEDURE) para obter acesso privilegiado (ou seja, DBA). Privilégios de sistema que podem ser usados pelo ODAT nesta versão:
      • CREATE ANY PROCEDURE: execução de pedidos arbitrários com os privilégios de APEX_040200 (ex. modificação de palavras-passe de utilizadores Oracle)
      • CREATE PROCEDURE e EXECUTE ANY PROCEDURE: execução de pedidos arbitrários como SYS (ex. atribui função DBA a um utilizador)
      • CREATE ANY TRIGGER (e CREATE PROCEDURE): execução de pedidos arbitrários como SYS (ex. atribui função DBA a um utilizador)
      • ANALYZE ANY (e CREATE PROCEDURE): execução de pedidos arbitrários como SYS (ex. atribui função DBA a um utilizador)
      • CREATE ANY INDEX (e CREATE PROCEDURE): execução de pedidos arbitrários como SYS (ex. atribui função DBA a um utilizador)
    • O módulo privesc pode ser usado para obter todos os privilégios de sistema e funções concedidas. Mostra privilégios de sistema que podem ser usados para obter acesso privilegiado.
    • Nova opção (-vvv) para mostrar pedidos SQL enviados pelo ODAT em depuração
    • Versão standalone movida para releases (https://github.com/quentinhardy/odat/releases/)
  • Versão 1.6 (14/07/2015) :
    • Nova funcionalidade para detetar se um alvo é vulnerável a TNS poisoning (CVE-2012-1675)
    • Novo módulo chamado unwrapper para desembrulhar código fonte PL/SQL embalado, a partir de um ficheiro ou de uma base de dados remota
    • Algumas melhorias feitas
  • Versão 1.5 (17/03/2015) :
    • Novo módulo chamado search para procurar em nomes de colunas
    • Algumas melhorias feitas (ex: saída de tabelas)
    • Nova opção: codificação de saída
  • Versão 1.4 (07/12/2014) :
    • Corrigir alguns falsos positivos
    • Melhorar o módulo CVE-2012-3137: verificar mais facilmente se a vulnerabilidade pode ser explorada
  • Versão 1.3 (07/10/2014) :
    • Adicionar a opção -C no módulo all. Este módulo pode ser usado para usar um ficheiro que contém credenciais (desativa as opções -U e -P)
    • Adicionar o módulo tnscmd para obter alias TNS, versão da base de dados (graças a VSNNUM) e estado TNS
    • Correção de bug: o nome do servidor pode ser fornecido à opção -s
  • Versão 1.2 (08/08/2014) :
    • Adicionar o módulo SMB para capturar uma autenticação SMB
    • Adicionar uma opção (SHOW_SQL_REQUESTS_IN_VERBOSE_MODE) em Constants.py para mostrar pedidos SQL enviados ao servidor de base de dados
  • Versão 1.1 (28/07/2014) :
    • Adicionar o módulo DBMS_LOB útil para descarregar ficheiros armazenados num servidor remoto através da base de dados Oracle.
    • Correção de bug: código fonte java: "getenv no longer supported, use properties and -D instead"
  • Versão 1.0 (26/06/2014) :
    • Primeira versão do ODAT.
  • o CVE-2012-1675 (também conhecido como ataque TNS poisoning)
  • pesquisar em nomes de colunas graças ao módulo search:
    • pesquisar um padrão (ex: password) em nomes de colunas
  • desembrulhar código fonte PL/SQL (10g/11g e 12c)
  • obter privilégios de sistema e funções concedidas. É possível obter também privilégios e funções de funções concedidas
  • executar pedidos SELECT arbitrários (também conhecido como shell SQL mínima)