Metasploit : plongeon dans le framework

0

À travers cet article, nous allons voir comment mettre en place son environnement de développement, écrire son module et enfin le partager avec la communauté.

Le guide officiel pour mettre en place son environnement de développement est disponible à cette adresse : https://github.com/rapid7/metasploit-framework/wiki/Setting-Up-a-Metasploit-Development-Environment mais nous ne l’utiliserons que partiellement. En effet, nous allons nous servir de Docker pour faire tourner le framework Metasploit.

Pré-requis :

  • Installer Git
  • Disposer d’un compte Github

Créer son fork

Si vous ne le saviez pas encore, le dépôt GitHub est ici https://github.com/rapid7/metasploit-framework
Vous pouvez dès à présent le forker et cloner votre version sur votre machine :

git clone https://github.com/zs/metasploit-framework (remplacer zs par votre username Github)
cd metasploit-framework

À présent, il faut configurer le suivi des modifications du framework grâce à :

git remote add upstream https://github.com/rapid7/metasploit-framework.git
git fetch upstream
git checkout -b upstream-master --track upstream/master

Il reste également à changer notre docker-compose pour utiliser la version de développement. Concrètement cela va créer un volume de notre dossier courant contenant les sources des modules.
Pour cela, il suffit d’utiliser la commande suivante qui va ajouter la variable d’environnement COMPOSE_FILE dans un fichier .env qui sera interprété par docker-compose :

echo "COMPOSE_FILE=./docker-compose.yml:./docker/docker-compose.development.override.yml" >> .env

Tout est à présent configuré, il est temps de lancer Metasploit grâce à Docker :

docker-compose run --rm --service-ports ms

Si tout se passe bien, vous devriez obtenir la console msfconsole avec un écran similaire à celui ci-dessous :

Capture du 2017-05-09 16:34:03

Vous voilà maintenant prêt à utiliser le framework et à vous amuser avec les modules d’exploitation et tout ce qu’on a pu voir dans notre premier article ! 🙂
Nous pouvons vérifier le bon fonctionnement en ouvrant un nouvel onglet et en saisissant sudo docker ps

Vous devriez avoir un résultat similaire à celui ci :

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41c9347bb0d6 metasploit:dev « ./msfconsole -r d… » 3 minutes ago Up 3 minutes 0.0.0.0:4444->4444/tcp metasploitframework_ms_run_1
97735f6e430e postgres:9.6 « docker-entrypoint… » 7 minutes ago Up 7 minutes 5432/tcp metasploitframework_db_1

 

Nous retrouvons notre image metasploit:dev avec le port 4444 d’ouvert (voir plus bas pour ajouter d’autres ports) ainsi que la base de données PostgreSQL dans lequel le framework stocke les données.


Let’s hack !

Capture du 2017-05-05 16:32:07

À présent vous pouvez modifier à votre guise le contenu des modules ou en créer de nouveaux
Les commandes utiles pour tester vos changements sont :

  • reload : permet de recharger le module actuellement utilisé
  • recheck (ou rcheck) : recharge et relance un check
  • rerun : recharge et relance un run
  • rexploit : recharge et relance un exploit (en réalité cela revient à faire un rerun)

Pour commiter un changement, vous devez créer une nouvelle branche relative à votre changement (dans le but d’y faire une pull-request quand tout sera OK) :

git checkout -b my-new-feature

Une fois votre développement terminé et avant de commiter votre travail, vous pouvez utiliser le script msftidy.rb qui se trouve dans le dossier tools/dev et qui permet de vérifier quelques règles de formatage en Ruby et aussi les règles souhaitées par les développeurs de Metasploit :

./tools/dev/msftidy.rb modules/auxiliary/scanner/http/robots_txt.rb

Cette étape est vraiment importante puisque votre pull-request ne sera jamais acceptée tant que msftidy ne valide pas votre code.
Une fois que tout est correct, vous pouvez ajouter votre modification, par exemple :

git add modules/auxiliary/scanner/http/robots_txt.rb

Puis créer votre commit :

git commit -m "Adding a new badass feature"

Enfin envoyez vos changements dans votre dépôt :

git push origin my-new-feature

À présent il est possible de faire une pull-request pour soumettre vos changements ou votre nouveau module directement depuis Github. Penser à référencer les issues sur lesquelles vous travaillez dans vos commits ou au moment de votre pull-request pour faciliter le travail des relecteurs.


Optionnel : Liens symboliques

Pour éviter de saisir docker-compose run --rm --service-ports ms à chaque fois que l’on souhaite lancer msfconsole, il est possible de créer des liens symboliques :

ln -s pwd/docker/bin/msfconsole-dev $HOME/bin/
ln -s pwd/docker/bin/msfvenom $HOME/bin/

À présent il est possible de saisir msfconsole-dev pour ouvrir la console de Metasploit.


Optionnel : Ouvrir d’autres ports

Si vous avez besoin d’ajouter plus de ports d’écoute, vous pouvez modifier le fichier docker/docker-compose.development.override.yml
Voici un exemple avec le port 8080 :

version: ‘2’
services:
ms:
build:
[…]
environment:
DATABASE_URL: postgres://[email protected]:5432/msf_dev
ports:
– 8080:8080
volumes:
– .:/usr/src/metasploit-framework

 


Commit signés

Si vous souhaitez signer vos commits, les instructions sont disponibles ici :
https://github.com/rapid7/metasploit-framework/wiki/Committer-Keys#signing-howto

Conclusion

J’espère que cet article vous donnera tous les éléments si vous souhaitez contribuer au framework que ce soit pour y ajouter des nouveaux modules ou encore corriger des bugs.

A bientôt pour la suite de la saga sur Metasploit !

Partagez cet article.

A propos de l'auteur

Responsable du pôle Sécurité chez Zenika, Erik est un véritable passionné d'informatique. Son leimotiv est de remettre la sécurité au centre des projets. Profil Javaiste, il apprécie également les technologies back ainsi que les problématiques de performance et d'optimisation.

Ajouter un commentaire