Backtrack 101-4-Hydra
La série Backtrack 101 a pour objectif de faire découvrir aux débutants plusieurs outils distribués avec Backtrack Linux. Ainsi, en suivant ces articles, un débutant peut participer aux jeux du hackfest et commencer son apprentissage des techniques de test de pénétration.
Dans ce troisième article, nous allons parler d'un outil nommé hydra.
Site officiel du projet: http://www.thc.org/thc-hydra/
Synopsie:
L'outil hydra peut être utilisé pour attaquer tous (presque) types de login. Que ce soit un login ftp, ssh, web form ou autre, hydra peut être utilisé pour tenter de trouver le nom d'un utilisateur ainsi que son mot de passe. Heureusement pour l'attaquant, hydra supporte l'utilisation de plusieurs processeurs pour ainsi augmenter la rapidité d'une attaque.
Comment est-ce que ça fonctionne?
Hydra peut être utilisé de deux manières:
- Force brute (on aime le bon français)
- Attaque de dictionnaire
Dans le premier cas, l'utilisation de la force brute, l'outil générera lui-même les mots de passe à utiliser lors de l'attaque. Cela a l'avantage que "toutes" les possibilités pourront être soumises lors de l'attaque. Malheureusement, une attaque par force brute peut être beaucoup plus longue, cependant, la réussite quant à elle est plus probable. Contrairement à l'attaque par force brute, une attaque de type dictionnaire utilisera uniquement les mots présents dans une liste donnée. Lors d'une telle attaque, vous êtes donc dépendant des mots présents dans la liste. L'attaque de dictionnaire sera plus rapide. Il est aussi généralement possible de focusser nos efforts sur certains aspect de l'utilisateur ciblé lors d'une telle attaque (on y revient!).
Les bases
Pour les besoins de la cause, comme mon environnement de test ne possède qu'un serveur SSH et un serveur HTTP, nous allons commencer par s'attaquer à SSH. Dans le but d'éviter que ce soit trop long, j'ai préparé une petite liste de mots dans le fichier smallTestList créé pour l'occasion. Voici le contenu de ce fichier:
Cette liste, contient le mot de passe de l'utilisateur root de l'environnement de test. Comme elle est courte, hydra découvrira le mot de passe de l'utilisateur root très rapidement. Pour utiliser la liste dans une attaque, il suffit d'utiliser la commande suivante:
root@bt:# hydra 192.168.1.1 ssh -P smallTestList -l root
Lors de l'exécution de la commande, hydra essaiera tous les mots de passe de la liste en les associant avec le nom d'utilisateur root, tel qu'expliqué par la liste des options utilisées dans cette commande:
- -P : fichier contenant les mots de passe à utiliser lors de l'attaque
- -l : nom d'utilisateur à utiliser lors de l'attaque
- ssh : protocol qui sera attaqué
Ainsi, les quatres mots de passe de la liste seront utilisés pour trouver le mot de passe de l'utilisateur root. Lors de l'exécution de la commande, le mot de passe est bel et bien découvert par hydra tel que montré par la figure suivante:
Hydra a donc trouvé le mot de passe 12345 pour l'utilisateur root sur l'hôte 192.168.1.1. C'est bel et bien le bon mot de passe! Hydra pourrait aussi être utilisé dans d'autres situations. Par exemple, on pourrait l'utiliser avec un formulaire web. Pour les besoins de l'exemple, j'ai fait un petit formulaire d'authentification web qui accepte l'utilisateur admin avec le mot de passe 12345. Voici le formulaire en question:
L'utilisation d'hydra sur un formulaire web demande une petite analyse du formulaire en question. Pour être en mesure de lancer hydra, il faut avant tout savoir quels sont les paramètres du formulaire devant être configurés. Voici le code html de notre formulaire:
On y apprend que les paramètres de nom d'utilisateur et de mot de passe portent respectivement le nom username et password. Pour mener à bien l'attaque, nous avons aussi besoin d'une information qui ne sera pas sur la page suite à la réussite de l'authentification. Dans notre cas, il y a fort à parier que please login ne sera pas sur la page lorsque l'authentification sera une réussie. Armé de ces informations, nous pouvons commencer l'attaque. Voici la commande qui devrait être utilisée pour attaquer ce formulaire web:
root@bt:# hydra 192.168.1.1 -l admin -P smallTestList http-post-form "/test.php:username=^USER^&password=^PASS^:please login"
Avant d'exécuter la commande, voyons comment celle-ci est préparée.
- hydra 192.168.1.1 - Hydra attaquera l'hôte 192.168.1.1
- -l admin - Hydra utilisera seulement le nom d'utilisateur admin
- -P smallTestList - Hydra utilisera les mots présents dans le fichier smallTestList pour faire l'attaque sur les mots de passe
- http-post-form - Le protocole HTTP sera utilisé. Plus précisément, une requête de type POST sera faite
- "/test.php:username=^USER^&password=^PASS^:please login" - Dans cette chaine, il y a trois paramètre sépparés par le caractère ":". Le premier paramètre (/test.php) indique la page sur laquelle le formulaire devant être attaqué se trouve. Le deuxième paramètre (username=^USER^&password=^PASS^) indique les noms de paramètre à utiliser. Les ^USER^ et ^PASS^s seront remplacés lors de la requête par le nom d'utilisateur admin ainsi que pas les mots présents dans la liste de mots. Le dernier paramètre (please login) est la chaîne de caractères qui ne devrait pas être sur la page lorsque l'authentification est réussie.
Ainsi, l'exécution de cette commande sur le formulaire d'authentification web donnera le résultat suivant:
Comme il est possible de l'observer, hydra a bien trouvé le mot de passe.
Considérations importantes
Note: L'information présente dans cette section n'est pas présentée comme une contre mesure à l'outil hydra mais simplement comme une considération importante pour l'utilisateur de l'outil. Nous ne recommandons PAS cette mesure pour contrer une éventuelle attaque par un outil comme hydra sur un formulaire web.
Dans l'exemple précédent, la chaine please login était utilisée par hydra pour détecter que l'authentification est une réussite. L'outil s'attend donc à ne pas trouver cette chaîne en cas de réussite. L'exemple fonctionne bien, mais pour que cela fonctionne, la chaîne please login doit absolument ne pas être présente lorsque l'authentification est une réussite. Ainsi, si le programmeur, dans une tentative de contrer un outil comme hydra avait ajouté le commentaire html:
à la page suite à l'authentification d'un utilisateur, la chaîne serait présente sur la page mais invisible à l'utilisateur. L'outil hydra ne pourrait donc pas être en mesure de de déterminer si l'authentification est une réussite tel que le montre la figure suivante, qui présente une attaque hydra sur une page contenant please login en commentaire html suite à l'authentification de l'utilisateur:
Dans cette situation, il faudrait trouver une autre chaîne qui pourrait être utilisée pour valider la réussite de l'attaque.
Protocoles supportés
Hydra supporte plusieurs protocoles. Voici une liste non exhaustive des protoles supportés par hydra:
- ssh
- ftp
- http-post-form
- http-get-form
- RDP
- MYSQL
- SIP
- SMB
- Telnet
- XMPP
- etc...
Liste de mots dans backtrack
Tel que vu jusqu'à maintenant, les listes de mots occupent une place importante dans l'utilisation de l'outil hydra. Heureusement, la distribution backtrack contient plusieurs listes de mots situées principalement dans le répertoire /pentent/passwords/wordlist. Ces listes de mots contiennent une foule de mots pouvant être utilisés lors d'une attaque à l'aide d'hydra. Cependant, il pourrait arriver, dans certaines situations, que vous désiriez utiliser une liste de mot personnalisée à votre cible. Imaginons le scénario suivant:
- Vous connaissez certaines informations au sujet de l'administrateur d'un site web.
- Son nom: John Doe
- Son surnom: SuperJohn
- Le nom de sa femme: Janne Doe
- Le surnom de sa femme: SexyJanne
- Le nom de son fils: Mini Doe
- Le nom de son chien: Wouf
- La marque de sa voiture: bmw
- Le modèle de sa voiture: 323
- Le nom de son employeur: Hacme
- Sa passion: dormir
- et bien plus...
Ces informations, que vous pourriez très bien avoir trouvées à l'aide des réseaux sociaux ont de bonnes chances de se retrouver à l'intérieur du mot de passe de M. Doe. Backtrack contient un outil pour générer une liste de potentiels mots de passe en fonction d'informations sur la cible. Cet outil s'appelle cupp. Vous pouvez le retrouver à l'intérieur du répertoire /pentest/passwords/cupp. Nous ne nous étendrons pas sur l'utilisation de l'outil, nous alons simplement parler de son utilisation de base. Il est possible de lancer l'outil à l'aide de la commande:
root@bt:# ./cupp.py -i
Lorsque nous sommes à l'intérieur du répertoire de cupp.
Cette commande lancera un mode interactif dans lequel l'outil nous posera une liste de questions sur notre cible tel que montré par la figure suivante:
Suite à l'exécution, l'outil cupp génère une liste de 35 776 mots dans le but de faire une attaque ciblée contre une personne. L'attaque aura donc une plus grande chance de réussite. La liste générée se trouve dans le répertoire de l'outil cupp à la fin de l'exécution de l'outil.
Mot de la fin
Ainsi, tel que nous l'avons vu, hydra possède une foule de fonctionnalités intéressantes pour attaquer différents protocoles affin de découvrir les noms d'utilisateurs et les mots de passe valides. Cependant, une attention particulière doit être apportée pour personnaliser la commande utilisée dans le but de s'assurer que la commande fonctionnera exactement tel que désiré. De plus, l'utilisation d'une liste de mots bien adaptée à la situation est primordiale pour la réussite de l'attaque. L'utilisation d'une liste de mots français sur un site exclusivement anglais par exemple aura moins de chance de réussite. Sur ce, je vous souhaite bonne exploration!
Vous avez aimez cet article?
Vous aimeriez lire un article sur un outil qui ne vous est pas famillier? Laissez simplement le nom de l'outil en commentaire, s'il est disponible dans Backtrack, un article sera écrit sur l'outil en question.