Apuntes Ciberseguridad (Cibaism)
HTBGitHubLinkedInNotion (Writeups)
  • Welcome to My Digital Garden
  • About me
  • Hacking notes (Personal)
    • Tratamiento TTY
    • Hacking Web Tecniques
      • File Inclusion
    • Linux Privilage Escalation
    • Arreglar bloodhound
  • Hacking Notes (Learning Path)
    • (HTB) Penetration Tester
      • Getting Started
        • Common Terms
          • Tipos de Shell
          • Puertos importantes
          • OWASP Top 10
        • Service Scanning
          • Nmap
          • Attacking Network Services
            • Captura de banners
            • FTP
            • SMB
            • SNMP
        • Web Enumeration
        • Public exploits
          • Encontrar exploits públicos
          • Introducción a Metasploit
        • Types of Shells
          • Reverse Shell
          • Bind Shell
          • Web Shell
        • Privilage escalation
        • Transferring Files
      • Footprinting
        • Infrastructura Based Enumeration
          • Domain Information
          • Cloud Resources
          • Staff
        • Host Based Enumeration
          • FTP
          • SMB
          • NFS
          • DNS
          • SMTP
          • IMAP / POP3
          • SNMP
          • MySQL
          • MSSQL
          • Oracle TNS
          • IPMI
          • Protocolos de administración remota de Linux
          • Protocolos de administración remota de Windows
      • Introduction to Active Directory Enumeration & Attacks
        • Tools of the Trade
        • Initial enumeration
          • External Recon and Enumeration Principles
          • Initial Enumeration of the Domain
        • Sniffing out a Foothold
          • LLMNR/NBT-NS Poisoning - from Linux
          • LLMNR/NBT-NS Poisoning - from Windows
        • Sighting In, Hunting For A User
          • Password Spraying Overview
          • Enumerating & Retrieving Password Policies
          • Password Spraying - Making a Target User List
        • Spray Responsibly
          • Internal Password Spraying - from Linux
      • File Inclusion
        • File Disclousure
          • Local File Inclusion (LFI)
          • Basic Bypasses
          • PHP Filters
        • Remote Code Execution
          • PHP Wrappers
    • (CRTA) Red Team Analyst
      • (CRTA) Red Team Analyst - Lab
    • (eJPT) Junior Penetration Tester
      • Assessment Methodologies
        • Assessment Methodologies: Footprinting & Scanning
          • Windows Recon: Nmap Host Discovery
          • Scan the Server 1
          • Windows Recon: SMB Nmap Scripts
        • Assessment Methodologies: Enumeration
          • Importing Nmap Scan Results Into MSF
          • T1046 : Network Service Scanning
          • FTP Enumeration
          • Samba Recon: Basics
          • Apache Enumeration
          • MySQL Enumeration
          • SSH Login
          • Postfix Recon: Basics
        • Assessment Methodologies: Vulnerability Assessment
          • Windows: IIS Server DAVTest
          • Shellshock
          • Web App Vulnerability Scanning With WMAP
      • Host & Network Penetration Testing
        • Host & Network Penetration Testing: System/Host Based Attacks
          • Windows
            • Windows: IIS Server: WebDav Metasploit
            • Windows: SMB Server PSexec
            • Windows: Insecure RDP Service
            • WinRM: Exploitation with Metasploit
            • UAC Bypass: UACMe
            • Privilege Escalation: Impersonate
            • Unattended Installation
            • Windows: Meterpreter: Kiwi Extension
          • Linux
            • ProFTP Recon: Basics
            • Samba Recon: Dictionary Attack
            • Cron Jobs Gone Wild II
            • Exploiting Setuid Programs
            • Password Cracker: Linux
        • Host & Network Penetration Testing: Network-Based Attacks
          • NetBIOS Hacking
          • SNMP Analysis
          • DNS & SMB Relay Attack
        • Host & Network Penetration Testing: The Metasploit Framework (MSF)
          • Windows: Java Web Server
          • Windows: HTTP File Server
          • Vulnerable FTP Server
          • Vulnerable File Sharing Service
          • Vulnerable SSH server
          • Vulnerable SMTP Server
          • Meterpreter Basics
          • Upgrading Command Shells To Meterpreter Shells
          • Windows Post Exploitation Modules
          • UAC Bypass: Memory Injection (Metasploit)
          • Exploiting SMB With PsExec
          • Windows: Enabling Remote Desktop
          • Clearing Windows Event Logs
          • Pivoting
  • Blue team notes
    • Digital Forensics
      • Malware Analysis with VirusTotal
      • Wireshark
    • (Falcon) CrowdStrike
      • FALCON 104: Getting Started with the Endpoint Security Module
      • FALCON 106: Customizing Dashboards in Falcon
      • FALCON 180: Falcon Forensics Fundamentals
  • Programming
    • Powershell
Powered by GitBook
On this page
  • Configuración predeterminada
  • Tnsnames.ora
  • Oyente.ora
  • Oracle-Tools-setup.sh
  • Prueba de ODAT
  • Nmap
  • Nmap - Fuerza bruta de SID
  • ODAT
  • SQLplus - Iniciar sesión
  • Oracle RDBMS - Interacción
  • Oracle RDBMS - Enumeración de bases de datos
  • Oracle RDBMS: extracción de hashes de contraseñas
  • Oracle RDBMS - Carga de archivos
  1. Hacking Notes (Learning Path)
  2. (HTB) Penetration Tester
  3. Footprinting
  4. Host Based Enumeration

Oracle TNS

PreviousMSSQLNextIPMI

Last updated 2 months ago

El servidor Oracle Transparent Network Substrate( TNS) es un protocolo de comunicación que facilita la comunicación entre bases de datos Oracle y aplicaciones a través de redes. Inicialmente introducido como parte de la suite de software , TNS admite diversos protocolos de red entre bases de datos Oracle y aplicaciones cliente, como pilas IPX/SPXde TCP/IPprotocolos. Como resultado, se ha convertido en la solución preferida para la gestión de bases de datos grandes y complejas en los sectores de la salud, las finanzas y el comercio minorista. Además, su mecanismo de cifrado integrado garantiza la seguridad de los datos transmitidos, lo que lo convierte en una solución ideal para entornos empresariales donde la seguridad de los datos es primordial.

Con el tiempo, TNS se ha actualizado para admitir tecnologías más nuevas, incluido IPv6el SSL/TLScifrado, lo que lo hace más adecuado para los siguientes propósitos:

Resolución de nombres

Gestión de conexiones

Equilibrio de carga

Seguridad

Además, permite el cifrado entre la comunicación entre el cliente y el servidor mediante una capa adicional de seguridad sobre el protocolo TCP/IP. Esta función ayuda a proteger la arquitectura de la base de datos contra accesos no autorizados o ataques que intenten comprometer los datos en el tráfico de red. Además, proporciona herramientas y capacidades avanzadas para administradores y desarrolladores de bases de datos, ya que ofrece herramientas integrales de monitorización y análisis del rendimiento, funciones de registro e informes de errores, gestión de la carga de trabajo y tolerancia a fallos mediante servicios de base de datos.

Configuración predeterminada

La configuración predeterminada del servidor Oracle TNS varía según la versión y la edición del software Oracle instalado. Sin embargo, algunos ajustes comunes suelen estar configurados por defecto en Oracle TNS. De forma predeterminada, el receptor detecta las conexiones entrantes en el TCP/1521puerto. No obstante, este puerto predeterminado se puede modificar durante la instalación o posteriormente en el archivo de configuración. El receptor TNS está configurado para admitir varios protocolos de red, como TCP/IP, UDP, IPX/SPXy AppleTalk. También puede admitir múltiples interfaces de red y escuchar en direcciones IP específicas o en todas las interfaces de red disponibles. De forma predeterminada, Oracle TNS se puede administrar remotamente en Oracle 8i/, 9ipero no en Oracle 10g/11g.

La configuración predeterminada del receptor TNS también incluye algunas funciones básicas de seguridad. Por ejemplo, el receptor solo aceptará conexiones de hosts autorizados y realizará una autenticación básica mediante una combinación de nombres de host, direcciones IP, nombres de usuario y contraseñas. Además, utilizará Oracle Net Services para cifrar la comunicación entre el cliente y el servidor. Los archivos de configuración de Oracle TNS se denominan tnsnames.oray listener.oray suelen encontrarse en el $ORACLE_HOME/network/admindirectorio. El archivo de texto sin formato contiene información de configuración para las instancias de base de datos Oracle y otros servicios de red que utilizan el protocolo TNS.

Oracle TNS se utiliza a menudo con otros servicios de Oracle, como Oracle DBSNMP, Oracle Databases, Oracle Application Server, Oracle Enterprise Manager, Oracle Fusion Middleware, servidores web y muchos más. Se han realizado numerosos cambios en la instalación predeterminada de los servicios de Oracle. Por ejemplo, Oracle 9 tiene una contraseña predeterminada, CHANGE_ON_INSTALLmientras que Oracle 10 no la tiene. El servicio Oracle DBSNMP también utiliza una contraseña predeterminada dbsnmpque conviene recordar cuando nos topemos con esta. Otro ejemplo sería que muchas organizaciones aún utilizan el fingerservicio junto con Oracle, lo que puede poner en riesgo el servicio de Oracle y hacerlo vulnerable si conocemos el directorio principal.

Cada base de datos o servicio tiene una entrada única en el archivo , que contiene la información necesaria para que los clientes se conecten al servicio. La entrada consta del nombre del servicio, su ubicación de red y el nombre de la base de datos o servicio que los clientes deben usar para conectarse. Por ejemplo, un tnsnames.oraarchivo simple podría tener este aspecto:

Tnsnames.ora

ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.129.11.102)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

Aquí vemos un servicio llamado ORCL, que escucha en el puerto TCP/1521de la dirección IP 10.129.11.102. Los clientes deben usar el nombre del servicio orclal conectarse. Sin embargo, el archivo tnsnames.ora puede contener muchas entradas de este tipo para diferentes bases de datos y servicios. Las entradas también pueden incluir información adicional, como detalles de autenticación, configuración de agrupación de conexiones y configuración de balanceo de carga.

Por otra parte, el listener.oraarchivo es un archivo de configuración del lado del servidor que define las propiedades y parámetros del proceso de escucha, que es responsable de recibir las solicitudes entrantes del cliente y reenviarlas a la instancia de base de datos Oracle adecuada.

Oyente.ora

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PDB1)
      (ORACLE_HOME = C:\oracle\product\19.0.0\dbhome_1)
      (GLOBAL_DBNAME = PDB1)
      (SID_DIRECTORY_LIST =
        (SID_DIRECTORY =
          (DIRECTORY_TYPE = TNS_ADMIN)
          (DIRECTORY = C:\oracle\product\19.0.0\dbhome_1\network\admin)
        )
      )
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = orcl.inlanefreight.htb)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = C:\oracle

En resumen, el software Oracle Net Services del lado del cliente utiliza el tnsnames.oraarchivo para resolver los nombres de servicio en direcciones de red, mientras que el proceso de escucha utiliza el listener.oraarchivo para determinar los servicios que debe escuchar y el comportamiento del oyente.

Las bases de datos Oracle pueden protegerse mediante la llamada Lista de Exclusión de PL/SQL ( PlsqlExclusionList). Se trata de un archivo de texto creado por el usuario que debe ubicarse en el $ORACLE_HOME/sqldeveloperdirectorio y que contiene los nombres de los paquetes o tipos de PL/SQL que deben excluirse de la ejecución. Una vez creado, el archivo de Lista de Exclusión de PL/SQL puede cargarse en la instancia de la base de datos. Funciona como una lista negra a la que no se puede acceder a través de Oracle Application Server.

Configuración

Descripción

DESCRIPTION

Un descriptor que proporciona un nombre para la base de datos y su tipo de conexión.

ADDRESS

La dirección de red de la base de datos, que incluye el nombre de host y el número de puerto.

PROTOCOL

El protocolo de red utilizado para la comunicación con el servidor.

PORT

El número de puerto utilizado para la comunicación con el servidor

CONNECT_DATA

Especifica los atributos de la conexión, como el nombre del servicio o SID, el protocolo y el identificador de la instancia de la base de datos.

INSTANCE_NAME

El nombre de la instancia de base de datos a la que el cliente desea conectarse.

SERVICE_NAME

El nombre del servicio al que el cliente desea conectarse.

SERVER

El tipo de servidor utilizado para la conexión de la base de datos, como dedicado o compartido.

USER

El nombre de usuario utilizado para autenticarse con el servidor de base de datos.

PASSWORD

La contraseña utilizada para autenticarse con el servidor de base de datos.

SECURITY

El tipo de seguridad para la conexión.

VALIDATE_CERT

Si desea validar el certificado mediante SSL/TLS.

SSL_VERSION

La versión de SSL/TLS que se utilizará para la conexión.

CONNECT_TIMEOUT

El límite de tiempo en segundos para que el cliente establezca una conexión a la base de datos.

RECEIVE_TIMEOUT

El límite de tiempo en segundos para que el cliente reciba una respuesta de la base de datos.

SEND_TIMEOUT

El límite de tiempo en segundos para que el cliente envíe una solicitud a la base de datos.

SQLNET.EXPIRE_TIME

El límite de tiempo en segundos para que el cliente detecte que una conexión ha fallado.

TRACE_LEVEL

El nivel de seguimiento de la conexión a la base de datos.

TRACE_DIRECTORY

El directorio donde se almacenan los archivos de seguimiento.

TRACE_FILE_NAME

El nombre del archivo de seguimiento.

LOG_FILE

El archivo donde se almacena la información de registro.

Antes de poder enumerar el oyente TNS e interactuar con él, necesitamos descargar algunos paquetes y herramientas para nuestra Pwnboxinstancia, en caso de que aún no los tenga. Aquí hay un script de Bash que lo hace todo:

Oracle-Tools-setup.sh

sudo apt-get install libaio1 python3-dev alien -y
git clone https://github.com/quentinhardy/odat.git
cd odat/
git submodule init
git submodule update
wget https://download.oracle.com/otn_software/linux/instantclient/2112000/instantclient-basic-linux.x64-21.12.0.0.0dbru.zip
unzip instantclient-basic-linux.x64-21.12.0.0.0dbru.zip
wget https://download.oracle.com/otn_software/linux/instantclient/2112000/instantclient-sqlplus-linux.x64-21.12.0.0.0dbru.zip
unzip instantclient-sqlplus-linux.x64-21.12.0.0.0dbru.zip
export LD_LIBRARY_PATH=instantclient_21_12:$LD_LIBRARY_PATH
export PATH=$LD_LIBRARY_PATH:$PATH
pip3 install cx_Oracle
sudo apt-get install python3-scapy -y
sudo pip3 install colorlog termcolor passlib python-libnmap
sudo apt-get install build-essential libgmp-dev -y
pip3 install pycryptodome

Después de eso, podemos intentar determinar si la instalación fue exitosa ejecutando el siguiente comando:

Prueba de ODAT

./odat.py -h

Oracle Database Attacking Tool ( ODAT) es una herramienta de pruebas de penetración de código abierto escrita en Python y diseñada para enumerar y explotar vulnerabilidades en bases de datos Oracle. Permite identificar y explotar diversas vulnerabilidades de seguridad en bases de datos Oracle, como la inyección SQL, la ejecución remota de código y la escalada de privilegios.

Ahora vamos a usarlo nmappara escanear el puerto de escucha TNS de Oracle predeterminado.

Nmap

sudo nmap -p1521 -sV <ip> --open

Podemos ver que el puerto está abierto y el servicio se está ejecutando. En Oracle RDBMS, un Identificador de Sistema (SID SID) es un nombre único que identifica una instancia de base de datos específica. Puede tener varias instancias, cada una con su propio SID. Una instancia es un conjunto de procesos y estructuras de memoria que interactúan para gestionar los datos de la base de datos. Cuando un cliente se conecta a una base de datos Oracle, especifica el SID de la base de datos SIDjunto con su cadena de conexión. El cliente utiliza este SID para identificar a qué instancia de base de datos desea conectarse. Si el cliente no especifica un SID, tnsnames.orase utiliza el valor predeterminado definido en el archivo.

Los SID son una parte esencial del proceso de conexión, ya que identifican la instancia específica de la base de datos a la que el cliente desea conectarse. Si el cliente especifica un SID incorrecto, el intento de conexión fallará. Los administradores de bases de datos pueden usar el SID para supervisar y gestionar las instancias individuales de una base de datos. Por ejemplo, pueden iniciar, detener o reiniciar una instancia, ajustar su asignación de memoria u otros parámetros de configuración, y supervisar su rendimiento mediante herramientas como Oracle Enterprise Manager.

Hay varias maneras de enumerar, o mejor dicho, de adivinar los SID. Por lo tanto, podemos usar herramientas como nmap, hydra, odat, y otras. Usemos nmapprimero.

Nmap - Fuerza bruta de SID

sudo nmap -p1521 -sV <ip> --open --script oracle-sid-brute

Podemos usar la odat.pyherramienta para realizar diversos análisis para enumerar y recopilar información sobre los servicios de base de datos de Oracle y sus componentes. Estos análisis pueden recuperar nombres de bases de datos, versiones, procesos en ejecución, cuentas de usuario, vulnerabilidades, configuraciones incorrectas, etc. Usemos esta allopción y probemos todos los módulos de la odat.pyherramienta.

ODAT

./odat.py all -s <ip>

En este ejemplo, encontramos credenciales válidas para el usuario scotty su contraseña tiger. Después, podemos usar la herramienta sqlpluspara conectarnos a la base de datos Oracle e interactuar con ella.

SQLplus - Iniciar sesión

sqlplus scott/tiger@<ip>/XE
sudo sh -c "echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf";sudo ldconfig

Oracle RDBMS - Interacción

select table_name from all_tables;
select * from user_role_privs;

En este caso, el usuario scottno tiene privilegios administrativos. Sin embargo, podemos intentar usar esta cuenta para iniciar sesión como administrador de la base de datos del sistema ( sysdba), lo que nos otorga mayores privilegios. Esto es posible cuando el usuario scottcuenta con los privilegios adecuados, generalmente otorgados por el administrador de la base de datos o utilizados por él mismo.

Oracle RDBMS - Enumeración de bases de datos

sqlplus scott/tiger@<ip>/XE as sysdba
select * from user_role_privs;

Una vez que accedemos a una base de datos Oracle, podemos seguir diversos enfoques. Esto depende en gran medida de la información disponible y de la configuración completa. Sin embargo, no podemos agregar nuevos usuarios ni realizar modificaciones. A partir de este punto, podríamos recuperar los hashes de contraseñas sys.user$e intentar descifrarlos sin conexión. La consulta para esto sería similar a la siguiente:

Oracle RDBMS: extracción de hashes de contraseñas

select name, password from sys.user$;

Otra opción es cargar un shell web al destino. Sin embargo, esto requiere que el servidor ejecute un servidor web y necesitamos conocer la ubicación exacta del directorio raíz del servidor web. No obstante, si conocemos el tipo de sistema con el que trabajamos, podemos probar las rutas predeterminadas, que son:

Sistema operativo

Camino

Linux

/var/www/html

Ventanas

C:\inetpub\wwwroot

En primer lugar, siempre es importante probar nuestro enfoque de explotación con archivos que no parezcan peligrosos para los sistemas antivirus o de detección/prevención de intrusiones. Por lo tanto, creamos un archivo de texto con una cadena y lo usamos para subirlo al sistema objetivo.

Oracle RDBMS - Carga de archivos

echo "Oracle File Upload Test" > testing.txt
./odat.py utlfile -s <ip> -d XE -U scott -P tiger --sysdba --putFile C:\\inetpub\\wwwroot testing.txt ./testing.txt

Finalmente, podemos probar si la subida de archivos funcionó correctamente curl. Por lo tanto, usaremos una GET http://<IP>solicitud o podremos acceder a través del navegador.

curl -X GET http://<ip>/testing.txt

Si encuentra el siguiente error sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory, ejecute lo siguiente, tomado de .

Existen muchos que podemos usar para enumerar la base de datos manualmente. Por ejemplo, podemos listar todas las tablas disponibles en la base de datos actual o mostrar los privilegios del usuario actual, como se muestra a continuación:

Oracle Net Services
tnsnames.ora
aquí
comandos SQLplus