MITM, proxy, Metasploit et keylogger

Salut les srab, je n’ai pas trop eu le temps dernièrement de poster des articles sur mon blog malgré la découverte de concepts et techno intéressants.

Aujourd’hui je vais vous parler de MITM (man in the midle), Proxy Web, injection de code et pour finir un keylogger javascript, non pas le mien mais celui de Metasploit.  On va principalement s’appuyer sur des principes déjà connus et des outils déjà connus. C’est vraiment pour mettre en oeuvre une façon de faire plutôt que d’essayer de trouver cette façon de faire. Vous me suivez ?

 

 

0x01 Se placer en MITM

Pour ceux qui ne le savent pas ou qui n’ont pas regardé le lien vers Wikipédia, l’attaque de l’homme du milieux (ça claque moins qu’en anglais j’avoue) consiste à se placer tel un intermédiaire entre la victime et le serveur. Cela repose sur l’ARP poisoning (mais pas que), on va répondre au requête ARP avant le serveur legit et donc les machines auront dans leurs caches ARP -> @IP de la gateway (192.168.1.1) = notre @mac.

Ainsi tout le trafic passera par notre machine avant de rejoindre par le vrai routeur. Comme je suis bon je vous file un schéma que je n’ai pas fait qui résume cela.

 

Il existe différents outils qui propose de le faire Ettercap, Cain & Abel etc. Mais on aurait pu également le coder nous même, chose que je n’ai pas faite  (au moment ou j’ai écris l’article). Je vais utiliser dans cet article Ettercap bien que je n’approuve pas l’éthique de l’entreprise qui l’a coder je dois avouer que ça marche plutôt bien. Ettercap est disponible de base avec Kali Linux mais il est disponible sous windows (il me semble) et en téléchargement ici.

Il faut avant tout activer l’IP forwarding :

On va lancer la commande suivante :

  • -T pour lancer ettercap en mode texte et non graphique
  • -q pour ne pas avoir trop d’output dans la console
  • -M pour lancer une attaque de type MITM
  • arp:remote car on veut faire du arp poisoning et remote car on veut que tout le traffic passe par nous
  • /// /// signifie que l’on va mettre tout le réseau sous le joug du MITM
  • -i spécifie notre interface (wlan0 pour ma part)

 

Si vous regarder dans le cache ARPdes victimes (admettons sous windows) avec arp -a vous verrez l’adresse IP de la gateway (192.168.1.1) associée à l’adresse MAC de votre machine attaquante.

Félicitation vous êtes en position de  MITM. On peut voir passer les paquets de tout le réseau sur notre machine via wireshark, jetons un œil (mon IP attaquante est 192.168.1.33)  :

 

 

0x02 Mettre en place notre proxy web et l’injection de code

Je vais utiliser le proxy web mitmproxy disponible de base sous kali linux ou téléchargeable sur son site officiel. Ce petit proxy vas nous permettre de faire plein de chose mais surtout d’injecter du code dans les réponses HTTP. J’ai découvert cet outil sur ce site web.

Il nous faut 2 fichier : 1 en python qui va être utiliser pour injecter le javascript et l’autre qui va contenir notre javascript.

Maintenant on peut lancer notre commande

  • -T pour le mode transparent
  • -p 81 spécifie que le proxy écoutera sur le port 81
  • -s pour exécuter notre script injector.py avec notre script en argument

On notera que j’héberge moi même le script sur ma propre machine avec apache

 

On voit toute les requêtes HTTP. Cependant si vous essayer autre part que sur votre PC attaquant cela ne marche pas car votre trafic ne passe pas encore par le proxy. Il faut ainsi rediriger tout le flux destiné au port 80 vers le port 81 de votre PC. Pour cela on va ajouter une règle dans iptables.

Maintenant on lance une page sans HTTPS depuis le navigateur de la victime et … ohh. On voit bien dans le code source de la page web que notre script payload.js a été injecté.

 

0x03 Mise en place du keylogger

Comme je l’ai dit dans l’introduction on va utiliser le keylogger de Metasploit qui fonctionne à merveille. On lance Metasploit et on utilise l’auxiliaire http_javascript_keylogger

On sait maintenant que notre script est hébergé à l’adresse suivante : http://192.168.1.33:1312/keylogger/anyname.js . Il suffit alors d’injecter ce script avec notre proxy.

On retourne sur une page sans HTTPS, on remplit notre formulaire

 

Pendant ce temps la sur notre PC attaquant

 

 

0x04 Conclusion et perspectives d’évolution

Ce dispositif peut paraître assez inquiétant car on peut exécuter du code javascript sur une machine distante mais il ne l’est pas tant que ça

  • Contrecarrer un man in the middle est plutôt facile pour un bon sysadmin.
  • Cela ne marche que pour du HTTP, passez au HTTPS
  • On se mange un connexion not trusted immonde sur les site avec SSL/TLS pas très discret
  • Si l’utilisateur regarde les paquets qui sortent de sa carte réseau il va peux être remarquer quelque chose qui cloche ……

Pour les évolutions il en existe pleins

  • Cacher le script dans le code source, par exemple dans le head ou noyé dans du code
  • Créer un faux AP wifi au lieu de passer par un MITM
  • Insérer autre chose qu’un keylogger

 

0x05 Ah non c’est fini

Par contre tu peux cliquer ici si tu sais pas quoi faire ->                 <-