Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
odat — Outil de test d'intrusion pour bases de données Oracle qui découvre des SID valides, force les identifiants par brute force, élève les privilèges au niveau DBA, exécute des commandes système et exploite des CVE connues. | Kitploit
Outils/GitHubGitHub/quentinhardy/odat
Escalade de PrivilègesScanners de VulnérabilitésAttaques de Mots de PasseExploitationTests d'IntrusionCommandement et ContrôleSécurité des Bases de Données
GitHubquentinhardy/odat

odat

Outil de test d'intrusion pour bases de données Oracle qui découvre des SID valides, force les identifiants par brute force, élève les privilèges au niveau DBA, exécute des commandes système et exploite des CVE connues.

Voir le dépôt
1.8k349il y a 4 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Quentin HARDY
[email protected]
[email protected]

ODAT

ODAT (Oracle Database Attacking Tool) est un outil de test d'intrusion open source qui teste la sécurité des bases de données Oracle à distance.

Exemples d'utilisation d'ODAT :

  • Vous avez une base de données Oracle qui écoute à distance et souhaitez trouver des SID et identifiants valides pour vous connecter à la base de données.
  • Vous disposez d'un compte Oracle valide sur une base de données et souhaitez augmenter vos privilèges pour devenir DBA ou SYSDBA.
  • Vous avez un compte Oracle et souhaitez exécuter des commandes système (par exemple, reverse shell) afin de progresser sur le système d'exploitation hébergeant la base de données.

Testé sur Oracle Database 10g, 11g, 12c, 18c et 19c.

Version ODAT linux standalone disponible à https://github.com/quentinhardy/odat/releases/. Il est recommandé d'utiliser la version de développement (git clone), branche master-python3 (version python 3).

Journal des modifications

  • Version 5.1.1 (27/04/2022) :
    • affiche un message d'avertissement lorsqu'une erreur "ORA-12519 - TNS:no appropriate service handler found" se produit. Cette erreur peut être déclenchée par le serveur de base de données (listener) lorsque trop de connexions ont été établies (lors du bruteforce d'identifiants par exemple). Dans ce cas, l'option --sleep doit être utilisée (par exemple --sleep 0.2).
  • Version 5.1 (12/03/2021) :
    • nouvelle option dans le module all : --nmap-file pour charger toutes les bases de données Oracle depuis un fichier de sortie XML de nmap.
    • nouvelle option dans le module all : -l pour charger toutes les cibles depuis un fichier texte (ip:port ou ip sur chaque ligne).
    • Dans le module all, une connexion TCP est testée sur chaque cible avant de lancer les tests ODAT maintenant. --timeout-tcp-check permet de gérer la valeur du délai d'attente.
    • Dans le module all, un test est maintenant effectué sur chaque cible pour vérifier si le listener TNS est bien configuré. Ce test est effectué après le test de connexion TCP.
    • nouvelle option globale : --client-driver. Permet de définir le nom du client pour la connexion à la base de données (client_driver de V$SESSION_CONNECT_INFO). Utile pour les applications dont les utilisateurs finaux ne savent pas que cx_Oracle est utilisé. Par défaut, 'sql*plus' maintenant.
    • ODAT accepte désormais un fichier sqlnet.ora. Un fichier par défaut se trouve dans conf/. Le délai d'attente TCP et OUTBOUND (connexion TNS) est maintenant fixé à 60 secondes par défaut.
  • Version 5.0 (08/02/2021) :
    • Nouveau module important : Service Name Guesser, pour rechercher des noms de service valides. Module spécifique nommé snguesser et intégré également dans le module all. Par défaut, le module all recherche désormais tous les noms de service valides après avoir recherché les SID. Les SID peuvent être identiques au nom de service. Lorsqu'un nom de service est trouvé mais pas de SID, le nom de service peut être utilisé comme SID pour la connexion.
    • Option --basic-info dans le module search pour obtenir des informations techniques de base sur la base de données/instance. Elle récupère le nom de service, le SID, les bases de données, le statut d'Oracle Database Vault, le statut Java, le nom d'hôte, l'adresse IP du serveur, la politique de mot de passe, les privilèges système actuels, les rôles actuels, les correctifs (quand >= 12c et que l'utilisateur est privilégié), etc. Nécessite des privilèges élevés pour des informations très intéressantes (par exemple, politique de mot de passe et statut de verrouillage).

Fonctionnalités

Grâce à ODAT, vous pouvez :

  • rechercher un SID valide sur un listener Oracle Database distant via :
    • une attaque par dictionnaire
    • une attaque par force brute
    • l'ALIAS du listener
  • rechercher des comptes Oracle en utilisant :
    • une attaque par dictionnaire
    • chaque utilisateur Oracle comme mot de passe (nécessite un compte avant d'utiliser cette attaque)
  • exécuter des commandes système sur le serveur de base de données en utilisant :
    • DBMS_SCHEDULER
    • JAVA
    • des tables externes
    • oradbg
  • télécharger des fichiers stockés sur le serveur de base de données en utilisant :
    • UTL_FILE
    • DBMS_XSLPROCESSOR
    • des tables externes
    • CTXSYS
    • DBMS_LOB
  • téléverser des fichiers sur le serveur de base de données en utilisant :
    • UTL_FILE
    • DBMS_XSLPROCESSOR
    • DBMS_ADVISOR
  • supprimer des fichiers en utilisant :
    • UTL_FILE
  • obtenir un accès privilégié en utilisant les combinaisons de privilèges système suivantes (voir l'aide pour les commandes du module privesc) :
    • CREATE ANY PROCEDURE
    • CREATE PROCEDURE et EXECUTE ANY PROCEDURE
    • CREATE ANY TRIGGER (et CREATE PROCEDURE)
    • ANALYZE ANY (et CREATE PROCEDURE)
    • CREATE ANY INDEX (et CREATE PROCEDURE)
  • envoyer/recevoir des requêtes HTTP depuis le serveur de base de données en utilisant :
    • UTL_HTTP
    • HttpUriType
  • scanner les ports du serveur local ou d'un serveur distant en utilisant :
    • UTL_HTTP
    • HttpUriType
    • UTL_TCP
  • capturer une authentification SMB via :
    • un index pour déclencher une connexion SMB
  • exploiter certaines CVE :
    • le CVE-2012-3137
      • récupérer la clé de session et le sel pour des utilisateurs arbitraires
      • attaque par dictionnaire sur les sessions
    • le : Un utilisateur authentifié peut modifier toutes les tables qu'il peut sélectionner même s'il ne peut normalement pas les modifier (pas de privilège ALTER).

Cette liste n'est pas exhaustive.

Carte mentale - ODAT & tests d'intrusion Oracle Database

Texte alternatif

Plateformes supportées et dépendances

ODAT est compatible uniquement avec Linux.

Une version standalone existe pour ne pas avoir besoin d'installer les dépendances (voir https://github.com/quentinhardy/odat/releases/). L'ODAT standalone a été généré grâce à pyinstaller.

Si vous souhaitez installer la version de développement sur votre ordinateur, les outils et dépendances suivants sont nécessaires :

  • Langage : Python 3
  • Dépendances Oracle :
    • Instant Oracle basic
    • Instant Oracle sdk
  • Bibliothèques Python :
    • cx_Oracle
    • passlib
    • pycrypto
    • python-scapy
    • python-libnmap (nouveau depuis python 5.1)
    • colorlog (recommandé)
    • termcolor (recommandé)
    • argcomplete (recommandé)
    • pyinstaller (recommandé)

Installation (optionnelle, pour la version de développement)

Cette partie décrit comment installer instantclient, CX_Oracle et certaines autres bibliothèques Python sur Ubuntu afin d'avoir la version de développement d'ODAT. N'oubliez pas qu'une version standalone d'ODAT existe à https://github.com/quentinhardy/odat/releases/ : Il n'est pas nécessaire d'installer quoi que ce soit pour utiliser la version standalone

  • Clonez le dépôt pour obtenir le code source d'ODAT :
root@kitploit:~
git clone https://github.com/quentinhardy/odat.git
  • Mettez à jour les pages wiki dans ce dépôt pour obtenir la documentation ODAT localement :
root@kitploit:~
cd odat/
git submodule init
git submodule update
  • Obtenez instant client basic, sdk (développement) et sqlplus depuis le site web Oracle :

    • X64 : http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
    • X86 : http://www.oracle.com/technetwork/topics/linuxsoft-082809.html
  • Pour le moment (03/2021), la version 11.2 d'instant client Oracle Database est la meilleure version si vous souhaitez générer l'ODAT standalone avec pyinstaller. Pour utiliser la version de développement d'ODAT, la dernière version du client Oracle peut être utilisée (par exemple version 19).

  • Installez les paquets python3-dev, alien et libaio1 (pour sqlplus) :

root@kitploit:~
sudo apt-get install libaio1 python3-dev alien python3-pip
  • Générez des fichiers DEB à partir des fichiers RPM avec :
root@kitploit:~
sudo alien --to-deb oracle-instantclient19.3-basic-???.x???.rpm
sudo alien --to-deb oracle-instantclient19.3-devel-???.x???.rpm
  • Installez instant client basic, sdk et sqlplus :
root@kitploit:~
sudo dpkg -i oracle-instantclient19.3-basic-???.x???.deb
sudo dpkg -i oracle-instantclient19.3-devel_???_???.deb
  • Ajoutez ces lignes dans votre fichier /etc/profile pour définir les variables d'environnement Oracle :
root@kitploit:~
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
  • Redémarrez votre session (pour appliquer les variables d'environnement)

  • Créez le fichier /etc/ld.so.conf.d/oracle.conf et ajoutez le chemin vers Oracle home :

root@kitploit:~
/usr/lib/oracle/19.3/client64/lib/
  • Mettez à jour le chemin ld en utilisant :
root@kitploit:~
sudo ldconfig
  • Installez CX_Oracle :
root@kitploit:~
sudo -s
source /etc/profile
pip3 install cx_Oracle
  • Testez si tout est bon :
root@kitploit:~
python3 -c 'import cx_Oracle' 

Cette commande devrait simplement retourner sans erreurs.

  • Installez certaines bibliothèques Python :
root@kitploit:~
sudo apt-get install python3-scapy
sudo pip3 install colorlog termcolor pycrypto passlib python-libnmap
sudo pip3 install argcomplete && sudo activate-global-python-argcomplete
  • Téléchargez et installez la version de développement de pyinstaller (http://www.pyinstaller.org/) pour python 3.
root@kitploit:~
python setup.py install
  • Ou installez via pip :
root@kitploit:~
pip3 install pyinstaller
  • Lancez ODAT :
root@kitploit:~
./odat.py -h

Bon travail si vous n'avez pas d'erreurs :)

Documentation et exemples

La documentation et les exemples se trouvent sur le WIKI

Donation

Si vous souhaitez soutenir mon travail en faisant un don, je l'apprécierai grandement :

  • Via BTC : 36FugL6SnFrFfbVXRPcJATK9GsXEY6mJbf
Télécharger l’outil
  • Reverse shell implémenté dans le module DbmsScheduler lorsque la cible est Windows. Démarre un serveur http minimal, fait télécharger le code powershell par la base de données Oracle et l'exécute à distance. L'utilisateur dispose d'un shell PS interactif. Le fichier téléchargé est automatiquement supprimé.
  • Option --make-download implémentée dans DbmsScheduler pour faire télécharger un fichier script/binaire à une cible Windows.
  • Correction de bug dans la sortie du module DbmsScheduler (printOSCmdOutput()).
  • Meilleures explications dans le module DbmsScheduler (options).
  • Version 4.3 (28/06/2020) :
    • nouvelle option : --both-ul. Essaie chaque mot de passe en minuscules et en majuscules si ce n'est pas fait dans le(s) fichier(s) d'identifiants.
    • nouvelle option : --random-order. Teste les comptes dans un ordre aléatoire. Par défaut, utilise l'ordre du fichier texte.
    • tous les mots de passe sont maintenant testés en minuscules par défaut (fichiers de comptes modifiés de majuscules en minuscules).
    • quelques nouveaux comptes.
  • Version 4.2 (04/02/2020) :
    • shell SQL interactif minimal dans le module search.
    • nouvelle fonctionnalité pour télécharger des fichiers avec DBMS_XSLPROCESSOR.read2clob dans le module DbmsXslprocessor.
    • amélioration pour obtenir le système d'exploitation distant après l'authentification.
    • correction de bugs (par exemple, taille du terminal).
  • Version 4.1 (15/01/2020) :
    • Option pour la connexion avec SERVICE NAME au lieu de SID.
    • Encodage UTF-8 par défaut pour certaines opérations (par exemple, NVARCHAR2 et NCLOB, VARCHAR2 et CLOB).
    • Plusieurs corrections de bugs (problèmes d'encodage).
  • Version 4.0 (10/08/2019) :
    • Odat avec python 3, version stable.
  • Version 3.0 (01/09/2019) :
    • Compatible avec Oracle Database 18c.
    • Nouvelle option dans le module Java pour définir le chemin vers le shell (par exemple /usr/bin/sh sur CentOS).
  • Version 2.3.2 (16/07/2019) :
    • Corrections de bugs :
      • table externe et faux négatif.
  • Version 2.3.1 (10/08/2018) :
    • Nouvelle option dans le module Java pour exploiter CVE-2018-3004 : permet à un utilisateur authentifié d'écrire arbitrairement dans des fichiers sur le système d'exploitation (escalade de privilèges en contournant la sécurité Java JVM intégrée d'Oracle). Plus de détails http://obtruse.syfrtext.com/2018/07/oracle-privilege-escalation-via.html.
  • Version 2.3 (03/06/2018) :
    • Corrections de bugs :
      • Certains identifiants de base de données pouvaient ne pas être détectés dans le module passwordguesser (lorsqu'il tente de se connecter en SYSDBA/SYSOPER avant). Correction de bug importante !
      • PPoutput manquant dans le module smb (merci à dirkjanm)
      • Faux positif dans le module tnspoison
      • Parfois, impossible d'obtenir la version à partir de VSNNUM.
    • Améliorations :
      • Améliorations des performances lors du bruteforce de comptes.
      • Option pour la connexion avec une chaîne de connexion TNS.
      • Nouvelles identifiants triviaux dans le fichier de comptes.
      • Meilleure méthode de lecture de fichier dans le module dbmsLob (merci à omair2084).
  • Version 2.2.1 (12/04/2017) :
    • Corrections de bugs :
      • Version dans tnscmd (info).
      • Module externe (Intercepter une erreur Oracle).
      • Intercepter l'erreur lorsque "connection to server failed".
      • Tnscmd : "The server SID must be given with the '-d SID' option".
      • Correction de bug TypeError dans le module tnspoison.
      • Module d'empoisonnement TNS lorsque le port != 1521 (bug d'entier).
    • Améliorations :
      • Nouveaux SID.
  • Version 2.2 (25/03/2016) :
    • Un nouveau module (tnspoison) pour exploiter l'attaque d'empoisonnement du listener TNS (CVE-2012-1675). Un grand merci à Joxean Koret et donctl.
    • Quelques corrections de bugs.
    • Meilleur menu d'aide.
    • Pages WIKI dans le dépôt ODAT.
  • Version 2.1 (04/03/2016) :
    • Un nouveau module (cve) pour exploiter certaines CVE (Common Vulnerabilities and Exposures). CVE-2012-3137 (peut-être ce numéro, je ne suis pas sûr...) implémentée pour le moment : un utilisateur authentifié peut modifier toutes les tables qu'il peut sélectionner même s'il ne peut normalement pas les modifier (pas de privilège ALTER).
    • Nouvelle option (--accounts-files) pour l'attaque d'authentification à distance qui utilise 2 fichiers distincts : une liste de logins et une liste de mots de passe.
    • Affiche les mots de passe 10g pour la compatibilité oclHashcat.
    • Corrections de bugs (écoute avec nc).
  • Version 2.0 (21/02/2016) :
    • Un nouveau module (privesc) pour utiliser les privilèges système d'un utilisateur Oracle (par exemple, CREATE ANY PROCEDURE) afin d'obtenir un accès privilégié (c'est-à-dire DBA). Privilèges système pouvant être utilisés par ODAT dans cette version :
      • CREATE ANY PROCEDURE : exécution de requêtes arbitraires avec les privilèges d'APEX_040200 (par exemple, modification des mots de passe des utilisateurs Oracle).
      • CREATE PROCEDURE et EXECUTE ANY PROCEDURE : exécution de requêtes arbitraires en tant que SYS (par exemple, donne le rôle DBA à un utilisateur).
      • CREATE ANY TRIGGER (et CREATE PROCEDURE) : exécution de requêtes arbitraires en tant que SYS (par exemple, donne le rôle DBA à un utilisateur).
      • ANALYZE ANY (et CREATE PROCEDURE) : exécution de requêtes arbitraires en tant que SYS (par exemple, donne le rôle DBA à un utilisateur).
      • CREATE ANY INDEX (et CREATE PROCEDURE) : exécution de requêtes arbitraires en tant que SYS (par exemple, donne le rôle DBA à un utilisateur).
    • Le module privesc peut être utilisé pour obtenir tous les privilèges système et rôles accordés. Il montre les privilèges système qui peuvent être utilisés pour obtenir un accès privilégié.
    • Nouvelle option (-vvv) pour afficher les requêtes SQL envoyées par ODAT dans les débogages.
    • Version standalone déplacée vers releases (https://github.com/quentinhardy/odat/releases/).
  • Version 1.6 (14/07/2015) :
    • Nouvelle fonctionnalité pour détecter si une cible est vulnérable à l'empoisonnement TNS (CVE-2012-1675).
    • Nouveau module nommé unwrapper pour déwrapper le code source PL/SQL wrappé, à partir d'un fichier ou d'une base de données distante.
    • Quelques améliorations apportées.
  • Version 1.5 (17/03/2015) :
    • Nouveau module nommé search pour rechercher dans les noms de colonnes.
    • Quelques améliorations apportées (ex : sortie des tables).
    • Nouvelle option : encodage de sortie.
  • Version 1.4 (07/12/2014) :
    • Correction de certains faux positifs.
    • Amélioration du module CVE-2012-3137 : vérifie plus facilement si la vulnérabilité peut être exploitée.
  • Version 1.3 (07/10/2014) :
    • Ajout de l'option -C dans le module all. Ce module peut être utilisé pour utiliser un fichier contenant des identifiants (désactive les options -U et -P).
    • Ajout du module tnscmd pour obtenir l'alias TNS, la version de la base de données (grâce à VSNNUM) et le statut TNS.
    • Correction de bug : le nom du serveur peut être donné à l'option -s.
  • Version 1.2 (08/08/2014) :
    • Ajout du module SMB pour capturer une authentification SMB.
    • Ajout d'une option (SHOW_SQL_REQUESTS_IN_VERBOSE_MODE) dans Constants.py pour afficher les requêtes SQL envoyées au serveur de base de données.
  • Version 1.1 (28/07/2014) :
    • Ajout du module DBMS_LOB utile pour télécharger des fichiers stockés sur un serveur distant via Oracle Database.
    • Correction de bug : code source Java : "getenv no longer supported, use properties and -D instead".
  • Version 1.0 (26/06/2014) :
    • Première version d'ODAT.
  • CVE-2012-????
  • le CVE-2012-1675 (alias attaque d'empoisonnement TNS)
  • rechercher dans les noms de colonnes grâce au module search :
    • rechercher un modèle (ex : mot de passe) dans les noms de colonnes
  • déwrapper du code source PL/SQL (10g/11g et 12c)
  • obtenir les privilèges système et rôles accordés. Il est possible d'obtenir également les privilèges et rôles des rôles accordés.
  • exécuter des requêtes SELECT arbitraires (alias shell SQL minimal)