Le but du jeu est comme dans tout challenge/CTF d’obtenir un ou plusieurs flags, bien sûr sans oublier les privilèges root. Le côté intéressant de cette box est sa similitude avec les sites Web que vous trouverez aujourd’hui. Voyons les objectifs :
James M Brunner, un développeur Web a récemment créé un site Web de blog. Il vous a engagé pour tester la sécurité de son site Web de blog. Intéressant non ? De nos jours de plus en plus d’entreprises, développeurs… engagent des Pentesters afin de vérifier le niveau de sécurité de leurs systèmes ou créations.
Téléchargez l’image via le lien : https://download.vulnhub.com/blogger/blogger.ova et décompressez ce dernier. Importez la machine dans VirtualBox ou VMware.
Ready ? on peut démarrer le challenge !
Commençons par retrouver l’adresse ip correspondant à notre machine cible, pour cela utilisez la commande : « netdiscover -r ip/24 » :
^
Maintenant, nous allons ajouter blogger.thm dans le fichier hosts sous /etc. Pour ce faire depuis le Terminal utilisez la commande : nano /etc/hosts
Cette action permet d’attribuer le nom d’hôte blogger.thm à une adresse ip, cela évitera de réaliser une requête DNS. C’est-à-dire : lorsque vous allez vouloir accéder à ce nom de domaine, le fichier hosts sera consulté avant un accès au serveur DNS et donc votre système connaîtra l’ip associé au nom de domaine sans avoir le besoin de faire une requête. Ce fichier est consulté lors d’un accès à un réseau.
Un petit cat /etc/hosts pour vérifier :
Voilà c’est fait, on peut passer à la phase de collecte d’informations : d’abord Nmap ou Masscan
Rien de très intéressant, on continue visitant la page web :
A ce stade énumérez les sous répertoires avec dirb ou gobuster :
j’ai utilisé la commande suivante : dirb http://ipmachinecible/
On vient de trouver quelque chose de très intéressant : le blog
Go to http://192.168.1.4/assets/fonts/blog/
Bingo ! voici le blog : regardez, en bas de page le blog a été développé avec WordPress. Donc on va pouvoir utiliser Wpscan.
Dans un premier temps lorsqu’on lance Wpscan sur le blog, on n’y trouve pas de vulnérabilité en particulier. C’est pourquoi on va aller dans « hello world ! » et relancer notre scan pour chercher des plugins :
Et voici notre plugin : wpdiscuz
Cherchons sur le net des informations, exploits… s’il y en a (Google est votre ami). Voici un lien explicatif : https://www.wordfence.com/blog/2020/07/critical-arbitrary-file-upload-vulnerability-patched-in-wpdiscuz-plugin/
Alors, on va devoir uploader un reverse_shell afin de pouvoir exécuter des commandes depuis un terminal sur le server attaqué.
Pour cela vous pouvez créer votre propre payload ou utiliser un existant. Dans ce cas nous allons utiliser un payload déjà connu voici le lien : https://github.com/pentestmonkey/php-reverse-shell
Une fois téléchargé, ouvrez le script et modifiez l’adresse ip par celle de votre machine hôte et le port sur lequel vous voulez effectuer l’écoute :
Et maintenant ? En fin de compte, il y a la possibilité de charger une image depuis la section de commentaire mais en essayant avec un fichier .php ça ne fonctionne pas car il y a un filtre qui bloque ce dernier :
Pas de panique, pour contourner ce problème nous allons utiliser l’exploit GIF89a ; (lien : https://www.exploit-db.com/exploits/7083 ). Le principe consiste à rajouter GIF89a ; juste avant votre script RCE(Remote Code Exécution) :
Pour trouver ceci j’ai dû chercher comment bypasser une restriction d’uploader un fichier dans Webapp (How to Bypass File Upload Restrictions on Web Apps).
Petite explication : si vous observez bien nous avons rajouté un entête à notre payload avec un nombre dit magique (cf lien exploit). Lorsque vous téléchargez un fichier vers un site web ce dernier va vérifier le fichier en question. Dans notre cas, les fichiers acceptés sont des formats image (.png, .jpeg, GIF etc) mais nous voulons uploader un .php qui n’est pas accepté. À l’aide de notre entête nous allons duper l’analyse de notre fichier en lui faisant croire que c’est un fichier image (GIF).
Une fois cette étape terminée, ouvrez un terminal et lancez une écoute sur le port choisi (dans votre script .php) avec la commande : nc -lvnp port.
Puis rechargez votre code malicieux :
Vous devriez obtenir votre shell :
Voilà nous avons un reverse_shell, tapez des commandes assez simples comme whoami, pwd, ls -a, sudo su, id pour voir ce qui vous retourne.
On va s’intéresser au fichier /etc/passwd pour voir les utilisateurs existants :
Mise à part root, il y a 3 utilisateurs. Essayez de vous connecter en tant que vagrant ou autre user cela ne va pas fonctionner.
Vous devez basculer vers un shell bash, puis vous pourrez vous connecter comme ceci :
Pour user= vagrant password=vagrant, j’ai tout simplement essayé et ça a fonctionné.
Bon, il nous reste à obtenir les privilèges du super-utilisateur root. Tapez la commande sudo -l
Sudo -l : c’est une commande très utilisée afin de connaître les commandes autorisées et interdites pour l’utilisateur appelant. Par exemple, si vous avez le droit d’exécuter une commande comme sudo su.
Nous pouvons se connecter au compte root avec la commande sudo su sans avoir besoin de taper un mot de passe : Observez l’autorisation (ALL) NOPASSWD : ALL. Cela veut dire qu’il n’y a pas de mot de passe sudo et vagrant fait partie du groupe sudoers (autorisation de commandes privilégiées).
Il nous reste à découvrir les flags user et root : les voici
Félicitations, vous y êtes parvenus.
Pour ceux qui le souhaitent, vous pouvez jeter un coup d’œil sur le crontab 😊
Made by Erdanay !
No responses yet