Metasploit : plongeon dans le framework
À 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 :
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 !
À 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://postgres@db: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 !