ODAT
ODAT (Oracle Database Attacking Tool) è uno strumento di penetration testing open source che testa la sicurezza dei database Oracle in remoto.
Esempi di utilizzo di ODAT:
- Hai un database Oracle in ascolto in remoto e vuoi trovare SID e credenziali validi per connetterti al database
- Hai un account Oracle valido su un database e vuoi escalare i tuoi privilegi per diventare DBA o SYSDBA
- Hai un account Oracle e vuoi eseguire comandi di sistema (es. reverse shell) per muoverti ulteriormente nel sistema operativo che ospita il database
Testato su Oracle Database 10g, 11g, 12c, 18c e 19c.
Versione ODAT linux standalone su https://github.com/quentinhardy/odat/releases/. Si noti che si consiglia di utilizzare la versione di sviluppo (git clone), ramo master-python3 (versione Python 3).
Changelog
- Versione 5.1.1 (27/04/2022):
- Viene stampato un messaggio di avviso quando si verifica un errore "ORA-12519 - TNS: nessun gestore di servizi appropriato trovato". Questo errore può essere attivato dal server database (listener) quando sono state stabilite troppe connessioni (ad esempio durante il brute forcing delle credenziali). In questo caso, deve essere usata l'opzione --sleep (es. --sleep 0.2).
- Versione 5.1 (12/03/2021):
- Nuova opzione nel modulo all: --nmap-file per caricare tutti i database Oracle da un file di output nmap in formato XML
- Nuova opzione nel modulo all: -l per caricare tutti i target da un file di testo (ip:porta o ip su ogni riga)
- Nel modulo all, ora viene testata una connessione TCP su ogni target prima di avviare i test ODAT. --timeout-tcp-check può essere usato per gestire il timeout.
- Nel modulo all, ora viene eseguito un test su ogni target per verificare che il listener TNS sia configurato correttamente. Questo test viene eseguito dopo il test di connessione TCP.
- Nuova opzione globale: --client-driver. Permette di impostare il nome del client per la connessione al database (client_driver da V$SESSION_CONNECT_INFO).
Utile per applicazioni i cui utenti finali non sanno che cx_Oracle viene utilizzato. Di default, ora è 'sql*plus'.
- ODAT accetta ora un file sqlnet.ora. Un file predefinito si trova in conf/. Il timeout della connessione TCP e OUTBOUND (TNS) è ora impostato a 60 secondi per impostazione predefinita.
- Versione 5.0 (08/02/2021):
- Nuovo modulo importante: Service Name Guesser, per la ricerca di nomi di servizio validi. Modulo specifico denominato snguesser e integrato anche nel modulo all. Per impostazione predefinita, il modulo all cerca ora tutti i nomi di servizio validi dopo aver cercato i SID. I SID possono essere identici al nome del servizio. Quando viene trovato un nome di servizio ma non un SID, il nome del servizio può essere usato come SID per la connessione.
- Opzione --basic-info nel modulo search per ottenere alcune informazioni tecniche di base sul database/istanza. Ottiene Nome del Servizio, SID, database, stato di Oracle Database Vault, stato di Java, hostname, indirizzo IP del server, policy delle password, privilegi di sistema correnti, ruoli correnti, patch (quando >= 12c e l'utente è privilegiato), ecc. Richiede privilegi elevati per informazioni molto interessanti (es. policy delle password e stato di blocco).
Caratteristiche
Grazie a ODAT, puoi:
- cercare un SID valido su un listener di database Oracle remoto tramite:
- un attacco dizionario
- un attacco brute force
- ALIAS del listener
- cercare account Oracle utilizzando:
- un attacco dizionario
- ogni utente Oracle come password (necessita di un account prima di utilizzare questo attacco)
- eseguire comandi di sistema sul server database utilizzando:
- DBMS_SCHEDULER
- JAVA
- tabelle esterne
- oradbg
- scaricare file memorizzati sul server database utilizzando:
- UTL_FILE
- DBMS_XSLPROCESSOR
- tabelle esterne
- CTXSYS
- DBMS_LOB
- caricare file sul server database utilizzando:
- UTL_FILE
- DBMS_XSLPROCESSOR
- DBMS_ADVISOR
- eliminare file utilizzando:
- ottenere accesso privilegiato utilizzando le seguenti combinazioni di privilegi di sistema (vedi aiuto per i comandi del modulo privesc):
- CREATE ANY PROCEDURE
- CREATE PROCEDURE e EXECUTE ANY PROCEDURE
- CREATE ANY TRIGER (e CREATE PROCEDURE)
- ANALYZE ANY (e CREATE PROCEDURE)
- CREATE ANY INDEX (e CREATE PROCEDURE)
- inviare/ricevere richieste HTTP dal server database utilizzando:
- scansionare le porte del server locale o di un server remoto utilizzando:
- UTL_HTTP
- HttpUriType
- UTL_TCP
- catturare un'autenticazione SMB attraverso:
- un indice per attivare una connessione SMB
- sfruttare alcune CVE:
- il CVE-2012-3137
- ottenere la chiave di sessione e il salt per utenti arbitrari
- attacco dizionario sulle sessioni
- il CVE-2012-????: Un utente autenticato può modificare tutte le tabelle che può selezionare anche se normalmente non può modificarle (nessun privilegio ALTER).
Questo elenco non è esaustivo.
Mappa mentale - ODAT e test di penetrazione Oracle Database

ODAT è compatibile solo con Linux.
Esiste una versione standalone per non dover installare le dipendenze (vedi https://github.com/quentinhardy/odat/releases/).
La versione standalone di ODAT è stata generata grazie a pyinstaller.
Se si desidera avere la versione di sviluppo installata sul proprio computer, sono necessari i seguenti strumenti e dipendenze:
- Linguaggio: Python 3
- Dipendenze Oracle:
- Instant Oracle basic
- Instant Oracle sdk
- Librerie Python:
- cx_Oracle
- passlib
- pycrypto
- python-scapy
- python-libnmap (nuovo da Python 5.1)
- colorlog (consigliata)
- termcolor (consigliata)
- argcomplete (consigliata)
- pyinstaller (consigliata)
Installazione (opzionale, per la versione di sviluppo)
Questa parte descrive come installare instantclient, CX_Oracle e alcune altre librerie Python su Ubuntu per avere la versione di sviluppo di ODAT.
Non dimenticare che esiste una versione standalone di ODAT su https://github.com/quentinhardy/odat/releases/: Non è necessario installare nulla per utilizzare la versione standalone
- Clonare il repository per ottenere il codice sorgente di ODAT:
git clone https://github.com/quentinhardy/odat.git
- Aggiornare le pagine wiki in questo repository per ottenere la documentazione ODAT localmente:
cd odat/
git submodule init
git submodule update
-
Ottenere instant client basic, sdk (devel) e sqlplus dal sito web Oracle:
-
Per il momento (03/2021), la versione 11.2 di Oracle Database instant client è la migliore se si desidera generare la versione standalone di ODAT con pyinstaller.
Per utilizzare la versione di sviluppo di ODAT, è possibile utilizzare l'ultima versione del client Oracle (es. versione 19).
-
Installare i pacchetti python3-dev, alien e libaio1 (per sqlplus):
sudo apt-get install libaio1 python3-dev alien python3-pip
- Generare file DEB dai file RPM con:
sudo alien --to-deb oracle-instantclient19.3-basic-???.x???.rpm
sudo alien --to-deb oracle-instantclient19.3-devel-???.x???.rpm
- Installare instant client basic, sdk e sqlplus:
sudo dpkg -i oracle-instantclient19.3-basic-???.x???.deb
sudo dpkg -i oracle-instantclient19.3-devel_???_???.deb
- Inserire queste righe nel file /etc/profile per definire le variabili di ambiente Oracle:
export ORACLE_HOME=/usr/lib/oracle/19.3/client64/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export PATH=${ORACLE_HOME}bin:$PATH
/usr/lib/oracle/19.3/client64/lib/
- Aggiornare il ldpath usando:
sudo -s
source /etc/profile
pip3 install cx_Oracle
- Testare se tutto è a posto:
python3 -c 'import cx_Oracle'
Questo comando dovrebbe restituire senza errori.
- Installare alcune librerie Python:
sudo apt-get install python3-scapy
sudo pip3 install colorlog termcolor pycrypto passlib python-libnmap
sudo pip3 install argcomplete && sudo activate-global-python-argcomplete
- o installare tramite pip:
Ottimo lavoro se non si hanno errori:)
Documentazione ed esempi
La documentazione e gli esempi si trovano sul WIKI
Donazioni
Se desideri supportare il mio lavoro con una donazione, lo apprezzerò molto:
- Tramite BTC: 36FugL6SnFrFfbVXRPcJATK9GsXEY6mJbf