Le framework Metasploit est un outil open source, permettant la recherche, l’analyse et l’exploitation de vulnérabilités informatiques. Il dispose de nombreux modules et outils qui peuvent être très utiles dans le cadre de tests d’intrusions, que ce soit sur des applications Web ou sur le système informatique d’une entreprise. 
Alors qu’il est utilisé de manière assez basique, par exemple pour lancer un simple module d’exploitation sur une cible, ce framework dispose d’options et d’outils qui lui permettent de devenir un allié de poids lors d’un pentest. Nous allons donc voir ici comment utiliser le framework Metasploit de manière optimisée. 

Pour la démonstration, nous allons attaquer un réseau local dans lequel nous sommes branchés.

Prérequis

Tout d’abord, nous supposons que le framework Metasploit est installé. Pour Linux, il se trouve souvent dans les dépôts officiels des différentes distributions. Si ce n’est pas le cas, vous pouvez le télécharger sur le site officiel.
Nous allons également supposer que Metasploit est connecté à une base de données. 

Lancement de Metasploit

Le framework Metasploit se lance avec la commande suivante :

Il est possible d’utiliser la commande suivante pour vérifier que Metasploit est bien connecté à la base de données.

Création d’un workspace

Afin de bien séparer les données de chaque audit de sécurité, il est possible de créer différents workspace dans Metasploit. Cela permettra également de supprimer toutes les données relatives à un audit d’un seul coup, en supprimant le workspace.

Découverte des hôtes

Afin d’identifier les différentes machines présentes sur les réseaux et les différents services exposés, nous lançons un scan avec l’outil nmap directement dans Metasploit grâce à la commande suivante :

Cette commande permet donc de scanner le réseau, mais permettra également à Metasploit de mémoriser les différentes informations fournies. Il est également possible d’importer les résultats d’une commande nmap au format xml avec la commande suivante :

Nous pouvons consulter la liste des hôtes qui ont été trouvés de la manière suivante :

Il est également possible de lister les différents services identifiés grâce à la commande suivante :

Ici, le serveur ayant l’adresse IP 192.168.2.1, qui est un contrôleur de domaine Windows semble très intéressant. 
Nous allons donc approfondir la recherche de services, ce qui va compléter les différents éléments mémorisés par le framework.

Recherche de vulnérabilité

Maintenant que nous avons identifié bon nombre de services accessibles sur cette machine, nous allons utiliser certains modules du framework afin de trouver des vulnérabilités. 
Pour la démonstration, nous allons nous attarder sur les services SMB de la machine, mais le principe d’utilisation restera le même pour n’importe quel autre service.
Pour rechercher un module sur le framework, il est possible d’utiliser la commande suivante :

Afin de vérifier si le serveur est vulnérable, nous allons utiliser le module « auxiliary/scanner/smb/smb_ms17_010 » :

Les options de ce module sont les suivantes :

Nous constatons que les options RHOSTS et RPORT sont indispensables. L’option RPORT étant renseignée par défaut, il ne reste plus qu’à spécifier l’option RHOSTS. Cependant, plutôt que de la renseigner à la main, nous allons utiliser la commande suivante pour mettre dans les RHOSTS (-R) tous les hosts qui ont le service 445 (-p) ouvert (-u).

Nous savons également grâce au scan des services que le domaine est « pentest.local ».

Nous pouvons maintenant lancer notre module :

Le module nous indique que le serveur semble vulnérable. Ces informations sont également stockées dans le workspace et sont consultables grâce à la commande suivante :

Exploitation

Maintenant que nous avons identifié une vulnérabilité, nous allons tenter de l’exploiter. Pour ce faire, nous allons donc chercher si un module existe dans Metasploit :

Pour notre exemple, nous allons utiliser le module « auxiliary/admin/smb/ms17_010_command ».

Nous paramétrons l’option RHOSTS du module grâce à la liste des machines et des services déjà identifiés comme vulnérables :

Nous spécifions également le domaine :

Ce module permet, si l’attaque réussit, d’exécuter des commandes sur le serveur avec les droits SYSTEM. Nous exécutons donc la commande suivante, permettant de créer un compte utilisateur. De plus, la machine étant un contrôleur de domaine, ce compte est créé dans l’AD :


Voici les options actuellement paramétrées dans notre module :


Nous lançons ensuite l’exploitation :

L’attaque a fonctionné et nous avons maintenant un compte utilisateur créé sur le domaine. Nous allons relancer l’attaque, mais cette fois-ci, en utilisant une commande permettant d’élever ses droits.

Nous avons maintenant un accès Administrateur au serveur. Il est donc possible, par exemple, de lister le contenu du serveur avec l’outil smbclient :

Post exploitation

Nous avons donc accès à l’ensemble du serveur en lecture/écriture, mais nous allons aller encore plus loin. Nous allons placer un reverse shell meterpreter.
Dans un premier temps, nous générons le malware que nous transférons ensuite sur le serveur :

Les options utilisées sont les suivantes :

  • -p : la payload que nous allons utiliser, ici un reverse shell meterpreter pour Windows
  • LHOSTS : l’adresse IP de la machine sur laquelle se connectera le shell, ici la machine de l’attaquant
  • LPORT : le port sur la machine de l’attaquant auquel se connectera le shell
  • -f : le type de fichier généré, ici un exécutable Windows

Une fois le fichier généré, nous transférons sur le serveur grâce au client SMB :

Nous allons donc écouter sur le port 6000 pour recevoir les communications du reverse shell. Pour ce faire, nous allons utiliser le module « exploit/multi/handler » :

Nous allons utiliser le paramétrage suivant :

Le paramètre « ExitOnSession » laisse le service en écoute même après avoir reçu une première connexion d’un reverse shell.

Les options du module sont donc les suivantes :

Nous le lançons maintenant en tâche de fond (-j) :

Il est possible de lister les différents jobs de cette manière :

Maintenant que notre job est en écoute, nous allons pouvoir lancer le reverse shell grâce à la vulnérabilité eternalblue :

Nous constatons ci-dessous qu’une connexion de shell meterpreter a été effectuée. Il est possible de lister les différentes sessions :

Maintenant que nous avons une session, nous pouvons l’utiliser pour nous connecter au serveur et pour utiliser les modules de post exploitation de Metasploit.

Il est possible de lancer de nombreuses commandes. Nous allons en voir quelques-unes, mais il est clair que nous ne pourrons pas être exhaustifs ici.

Récupérer certaines informations sur le système :


Navigation et liste du contenu d’un répertoire :


Lancement d’un shell sur la cible :

Il est possible de sortir du meterpreter tout en gardant la session active :

Il est également possible d’utiliser des modules de post exploitation à travers la session meterpreter. Pour illustrer ce fonctionnement, nous allons tenter de récupérer les hashs des mots de passe de session des utilisateurs.

Pour rechercher un module de post exploitation pour Windows, il est possible d’utiliser la commande suivante :

Ces modules s’utilisent d’une manière similaire à n’importe quel module si ce n’est qu’il faut passer en paramètre une session Meterpreter qu’il utilisera pour effectuer son attaque :

Conclusion

Le framework Metasploit peut être utilisé de manière très basique, mais il peut, comme on l’a vu ici, être utilisé de manière plus poussée et plus précise afin de devenir l’outil principal de pentest d’un système d’information. Nous avons vu dans cet article l’attaque d’une seule machine, mais cet outil prend tout son sens lorsqu’il est utilisé sur des parcs de plusieurs dizaines, voire plusieurs centaines de machines. 
Tout cela est rendu possible par l’utilisation des workspace et des différentes commandes et filtres permettant de stocker et d’utiliser simplement les différents éléments recueillis au fur et à mesure d’un audit de sécurité.