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).
- Reverse shell implementada en el módulo DbmsScheduler cuando el objetivo es Windows. Inicia un servidor HTTP mínimo, hace que la base de datos Oracle descargue el código de powershell y lo ejecute de forma remota. El usuario tiene un shell PS interactivo. El archivo descargado se elimina automáticamente.
- Opción --make-download implementada en DbmsScheduler para hacer que un objetivo Windows descargue un archivo de script/binario.
- Corrección de errores en la salida del módulo DbmsScheduler (printOSCmdOutput()).
- Mejores explicaciones en el módulo DbmsScheduler (opciones).
- Versión 4.3 (28/06/2020):
- nueva opción: --both-ul. Prueba cada contraseña en minúsculas y mayúsculas si no se ha hecho en el/los archivo(s) de credenciales
- nueva opción: --random-order. Prueba las cuentas en orden aleatorio. Por defecto, usa el orden del archivo de texto
- todas las contraseñas ahora se prueban en minúsculas por defecto (los archivos de cuentas se modificaron de mayúsculas a minúsculas)
- algunas cuentas nuevas
- Versión 4.2 (04/02/2020):
- shell SQL interactivo mínimo en el módulo search
- nueva funcionalidad para descargar archivos con DBMS_XSLPROCESSOR.read2clob en el módulo DbmsXslprocessor
- mejora para obtener el SO remoto después de la autenticación
- corrección de errores (por ejemplo, tamaño de terminal)
- Versión 4.1 (15/01/2020):
- Opción para conexión con SERVICE NAME en lugar de SID
- Codificación UTF-8 por defecto para algunas operaciones (por ejemplo, NVARCHAR2 y NCLOB, VARCHAR2 y CLOB)
- Múltiples correcciones de errores (problemas de codificación)
- Versión 4.0 (10/08/2019):
- Odat con python 3, versión estable
- Versión 3.0 (01/09/2019):
- Compatible con Oracle Database 18c
- Nueva opción en el módulo Java para establecer la ruta al shell (por ejemplo, /usr/bin/sh en CentOS)
- Versión 2.3.2 (16/07/2019):
- Correcciones de errores:
- tabla externa y falso negativo
- Versión 2.3.1 (10/08/2018):
- Versión 2.3 (03/06/2018):
- Correcciones de errores:
- Algunas credenciales de base de datos no se podían detectar en el módulo passwordguesser (cuando intenta conectarse como SYSDBA/SYSOPER antes). ¡Corrección importante!
- PPoutput faltante en el módulo smb (gracias a dirkjanm)
- Falso positivo en el módulo tnspoison
- A veces, imposible obtener la versión de VSNNUM
- Mejoras:
- Mejoras de rendimiento al hacer fuerza bruta de cuentas.
- Opción para conexión con una cadena de conexión TNS
- Nuevas credenciales triviales en el archivo de cuentas
- Mejor método de lectura de archivos en el módulo dbmsLob (gracias a omair2084)
- Versión 2.2.1 (04/12/2017):
- Correcciones de errores:
- Versión en tnscmd (info)
- Módulo externo (Capturar un error de Oracle)
- Capturar error cuando "connection to server failed"
- Tnscmd: "The server SID must be given with the '-d SID' option
- Corrección de TypeError en el módulo tnspoison
- Módulo de envenenamiento TNS cuando puerto!=1521 (error de entero)
- Mejoras:
- Versión 2.2 (25/03/2016):
- Un nuevo módulo (tnspoison) para explotar el ataque de envenenamiento del listener TNS (CVE-2012-1675). Muchas gracias a Joxean Koret y donctl.
- Algunas correcciones de errores
- Mejor menú de ayuda
- Páginas WIKI en el repositorio de ODAT
- Versión 2.1 (04/03/2016):