ODAT
ODAT (Oracle Database Attacking Tool) es una herramienta de pruebas de penetración de código abierto que evalúa la seguridad de bases de datos Oracle de forma remota.
Ejemplos de uso de ODAT:
- Tiene una base de datos Oracle escuchando de forma remota y desea encontrar SIDs y credenciales válidas para conectarse a la base de datos
- Tiene una cuenta Oracle válida en una base de datos y desea escalar sus privilegios para convertirse en DBA o SYSDBA
- Tiene una cuenta Oracle y desea ejecutar comandos del sistema (por ejemplo, reverse shell) para avanzar en el sistema operativo que aloja la base de datos
Probado en Oracle Database 10g, 11g, 12c, 18c y 19c.
Versión ODAT linux standalone en https://github.com/quentinhardy/odat/releases/. Observe que se recomienda usar la versión de desarrollo (git clone), rama master-python3 (versión python 3).
Registro de cambios
- Versión 5.1.1 (27/04/2022):
- se muestra un mensaje de advertencia cuando ocurre un error "ORA-12519 - TNS:no appropriate service handler found". Este error puede ser provocado por el servidor de base de datos (listener) cuando se han establecido demasiadas conexiones (por ejemplo, al realizar fuerza bruta de credenciales). En este caso, se debe usar la opción --sleep (por ejemplo, --sleep 0.2).
- Versión 5.1 (12/03/2021):
- nueva opción en el módulo all: --nmap-file para cargar todas las bases de datos Oracle desde un archivo de salida XML de nmap
- nueva opción en el módulo all: -l para cargar todos los objetivos desde un archivo de texto (ip:puerto o ip en cada línea)
- En el módulo all, ahora se prueba una conexión TCP en cada objetivo antes de iniciar las pruebas de ODAT. --timeout-tcp-check se puede usar para gestionar el valor de tiempo de espera.
- En el módulo all, ahora se realiza una prueba en cada objetivo para verificar que el listener TNS esté bien configurado. Esta prueba se realiza después de la prueba de conexión TCP.
- nueva opción global: --client-driver. Permite establecer el nombre del cliente para la conexión a la base de datos (client_driver de V$SESSION_CONNECT_INFO). Útil para aplicaciones cuyos usuarios finales no saben que se está usando cx_Oracle. Por defecto, ahora es 'sql*plus'.
- ODAT ahora acepta un archivo sqlnet.ora. Un archivo predeterminado está en conf/. El tiempo de espera de conexión TCP & OUTBOUND (TNS) ahora se establece en 60 segundos por defecto.
- Versión 5.0 (08/02/2021):
- Nuevo módulo importante: Service Name Guesser, para buscar nombres de servicio válidos. Módulo específico llamado snguesser e integrado también en el módulo all. Por defecto, el módulo all ahora busca todos los nombres de servicio válidos después de buscar SIDs. Los SIDs pueden ser idénticos al nombre de servicio. Cuando se encuentra un nombre de servicio pero no un SID, el nombre de servicio se puede usar como SID para la conexión.
- Opción --basic-info en el módulo search para obtener información técnica básica sobre la base de datos/instancia. Obtiene nombre de servicio, SID, bases de datos, estado de Oracle Database Vault, estado de Java, nombre de host, dirección IP del servidor, política de contraseñas, privilegios actuales del sistema, roles actuales, parches (cuando >= 12c y el usuario tiene privilegios), etc. Requiere altos privilegios para información muy interesante (por ejemplo, política de contraseñas y estado de bloqueo).
Características
Gracias a ODAT, puede:
- buscar SID válido en un listener de Oracle Database remoto mediante:
- un ataque de diccionario
- un ataque de fuerza bruta
- ALIAS del listener
- buscar cuentas Oracle usando:
- un ataque de diccionario
- cada usuario de Oracle como la contraseña (necesita una cuenta antes de usar este ataque)
- ejecutar comandos del sistema en el servidor de base de datos usando:
- DBMS_SCHEDULER
- JAVA
- tablas externas
- oradbg
- descargar archivos almacenados en el servidor de base de datos usando:
- UTL_FILE
- DBMS_XSLPROCESSOR
- tablas externas
- CTXSYS
- DBMS_LOB
- subir archivos al servidor de base de datos usando:
- UTL_FILE
- DBMS_XSLPROCESSOR
- DBMS_ADVISOR
- eliminar archivos usando:
- obtener acceso privilegiado usando las siguientes combinaciones de privilegios del sistema (consulte la ayuda para los comandos del módulo privesc):
- CREATE ANY PROCEDURE
- CREATE PROCEDURE and EXECUTE ANY PROCEDURE
- CREATE ANY TRIGGER (y CREATE PROCEDURE)
- ANALYZE ANY (y CREATE PROCEDURE)
- CREATE ANY INDEX (y CREATE PROCEDURE)
- enviar/recibir solicitudes HTTP desde el servidor de base de datos usando:
- escanear puertos del servidor local o un servidor remoto usando:
- UTL_HTTP
- HttpUriType
- UTL_TCP
- capturar una autenticación SMB a través de:
- un índice para desencadenar una conexión SMB
- explotar algunos CVE:
- CVE-2012-3137
- obtener la clave de sesión y la sal para usuarios arbitrarios
- ataque por diccionario en sesiones
- CVE-2012-????: Un usuario autenticado puede modificar todas las tablas que puede seleccionar aunque normalmente no pueda modificarlas (sin privilegio ALTER).
Esta lista no es exhaustiva.
Mapa mental - ODAT y pruebas de penetración en Oracle Database

ODAT es compatible solo con Linux.
Existe una versión independiente para no tener que instalar dependencias (ver https://github.com/quentinhardy/odat/releases/).
La versión independiente de ODAT se ha generado gracias a pyinstaller.
Si desea tener la versión de desarrollo instalada en su computadora, se necesitan las siguientes herramientas y dependencias:
- Lenguaje: Python 3
- Dependencias Oracle:
- Instant Oracle basic
- Instant Oracle sdk
- Librerías Python:
- cx_Oracle
- passlib
- pycrypto
- python-scapy
- python-libnmap (nuevo desde python 5.1)
- colorlog (recomendado)
- termcolor (recomendado)
- argcomplete (recomendado)
- pyinstaller (recomendado)
Instalación (opcional, para versión de desarrollo)
Esta parte describe cómo instalar instantclient, CX_Oracle y algunas otras librerías de Python en Ubuntu para tener la versión de desarrollo de ODAT.
No olvide que existe una versión independiente de ODAT en https://github.com/quentinhardy/odat/releases/: No es necesario instalar nada para usar la versión independiente.
- Clone el repositorio para obtener el código fuente de ODAT:
git clone https://github.com/quentinhardy/odat.git
- Actualice las páginas wiki en este repositorio para obtener la documentación de ODAT localmente:
cd odat/
git submodule init
git submodule update
-
Obtenga instant client basic, sdk (devel) y sqlplus desde el sitio web de Oracle:
-
Por el momento (03/2021), la versión 11.2 de Instant Client de Oracle Database es la mejor versión si desea generar la versión independiente de ODAT con pyinstaller.
Para usar la versión de desarrollo de ODAT, se puede usar la última versión del cliente Oracle (por ejemplo, versión 19).
-
Instale los paquetes python3-dev, alien y libaio1 (para sqlplus):
sudo apt-get install libaio1 python3-dev alien python3-pip
- Genere archivos DEB a partir de archivos RPM con:
sudo alien --to-deb oracle-instantclient19.3-basic-???.x???.rpm
sudo alien --to-deb oracle-instantclient19.3-devel-???.x???.rpm
- Instale instant client basic, sdk y sqlplus:
sudo dpkg -i oracle-instantclient19.3-basic-???.x???.deb
sudo dpkg -i oracle-instantclient19.3-devel_???_???.deb
- Agregue estas líneas en su archivo /etc/profile para definir las variables de entorno de Oracle:
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
/usr/lib/oracle/19.3/client64/lib/
- Actualice la ruta ld usando:
sudo -s
source /etc/profile
pip3 install cx_Oracle
- Pruebe si todo está bien:
python3 -c 'import cx_Oracle'
Este comando debería regresar sin errores.
- Instale algunas librerías de Python:
sudo apt-get install python3-scapy
sudo pip3 install colorlog termcolor pycrypto passlib python-libnmap
sudo pip3 install argcomplete && sudo activate-global-python-argcomplete
- o instale a través de pip:
¡Buen trabajo si no tiene errores:)
Documentación y ejemplos
La documentación y los ejemplos están en la WIKI
Donación
Si desea apoyar mi trabajo haciendo una donación, lo apreciaré mucho:
- Vía BTC: 36FugL6SnFrFfbVXRPcJATK9GsXEY6mJbf