Metamorphosis est un ctf deTryHackMe noté comme medium. rsync, sqlmap, et tcpdumpsont les principales notions à connaitre ou à apprendre pour cette box.
Pour commencer, il faut connaitre les ports qui sont ouverts.
Commande :
nmap -T5 -p- 10.10.81.126
Il y a 5 ports ouverts qu’il faut en principe tous énumérer. Pour cette box, on va surtout s’intéresser au port 80 et 873.
Enumération Web
Il existe de nombreux outils qui permettent de lister les répertoires d’un site web. D’une manière générale, j’utilise Gobusterbien qu’auparavant j’utilisais Dirbuster.
Commande :
gobuster dir -u http://10.10.81.126 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php,txt
Il n’y a qu’un seul répertoire qui ressort du scan, /admin, malheureusement on ne peut y accèder. On va refaire un scan avec Gobuster mais cette fois à partir de /admin.
Commande :
gobuster dir -u http://10.10.81.126/admin -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php,txt
Cette fois-ci on a deux pages web qui ressortent :
/index.php
/config.php
En allant sur la page http://10.10.253.175/admin/index.php, on tombe sur 403 Forbidden, mais si on affiche la source de la page, on tombe sur un message.
Le message nous demande de nous assurer qu’admin soit sur l’environnement development.
On peut penser alors que le message fait référence à la page /adminque l’on a vu plus haut.
Il n’y a pas plus d’information à énumérer sur le port 80. On va continuer sur le port 873qui héberge rsync
Enumération rsync
1ier étape : test la connexion sur rsyncavec nc
nc -vn 10.10.81.126 873
Lors de la connexion on arrive sur ce message @RSYNCD: 31.0
Il faut taper le message @RSYNCD: 31.0
Comme il n’y a pas de message d’erreur ou d’interdiction, on peut donc sans problème interagir avec rsync.
La commande #list permet de lister les éléments contenu dans rsync
L’étape suivante consiste à récupérerle contenu de Conf
A noter, qu’il est possible d’utiliser nmap pour énumérer rsync
Parmi les différents fichiers de configuration, le dernier de la liste webapp.ini contient des identifiantset une sorte de configuration.
Sublime TextPour ouvrir plusieurs fichiers texte en même, je vous conseille d’utiliser sublimtext avec cette commande quand vous êtes dans le dossier : subl . Ce qui donne ceci :
Si on se rappelle du message sur la page http://10.10.253.175/admin/index.php . Il nous disait de passer sur l’environnement devpour accèder à admin. On va donc mettre devà la place de prod.
Une fois modifier et enregistrer, il faut uploadle fichier via rsync
Une fois le fichier bien upload, il faut réactualiser la page web /admin. On doit arriver sur cette page :
Il n’y a rien ou pas grand-chose à faire sur cette page. Aucune information n’apparait utilisable. Il faut tenter de faire une injectionsql. Pour cela on va utiliser sqlmap.
Sqlmap
J’utilise BurpSuite pour récupérer la requêtequi est effectuée lorsque l’on clique sur « Submit Query». Ensuite, je l’intègre à la ligne de commande sqlmapavec l’option -r
Etape 1 : Vérifier si le site est vulnérable a l’injection SQL (SQLi):
Avec os-shell, on se retrouve dans la même position qu’un reverse_shell. Toutefois, on ne peut pas changer de dossier. En revanche on peut uploader un reverse_shell en PHP. C’est qu’on va faire.
On va utiliser le reverse_shell proposé par Pentestmonkeya cette adresse.
Le site explique les modifications à effectuer. ( en gros, il faut modifier l’adresse IPet le portau niveau des commentaires « CHANGE THIS » )
Pour le transférer, il faut mettre un serveur webavec Python
python3.9 -m http.server
et sur le sqlmapshell,il faut télécharger le reverse_shellavec cette commande :
sqlmapnous a amené dans le dossier/var/www/html. On peut voir d’ailleurs que l’on trouve admin dans le répertoire. La copie de notre shell s’est effectuer dans ce dossier, donc on peut l’exécuter au travers du site web.
Avant de l’exécuter, il faut bien sur mettre un écouteurncen route sur le portque vous avez choisi dans le reverse shell.
nc -nlvp 1234
Initial Foothold
On est sur le compte www-data. Avant de commencer à énumérer, il faut upgraderle shell. Pour cela, je vous invite à regarder ce tutoriel.
Le flag user.txt peut être récupéré avec le compte www-data.
Il est possiblede passer sur le compte de tom, même s’il ne donne pas plus de possibilité. Je vous laisse deviner le mot de passe, c’est très simple.
Pour l’énumération, j’utilise linpeas( disponible a cette adresse )
Son exécution nous montre deux choses :
On peut écouter le traficavec tcpdump
Il y a un port 1027en coute sur le localhost( 127.0.0.1 )
Ce que je fais également, quand il n’y a pas trop d’information ou pas d’ailleurs, c’est de voir si qui se passe en temps réelsur le systèmeavec pspydisponible ici.
Il faut lui donner les droits d’exécution avec cette commande :
chmod +x pspy32
puis faire ./pspy32pour l’exécuter. Il faut le laisser au moins 2 minutes, voir 5. Il peut arriver que rien ne se passe.
Pour le cas de cette box, toutes les 2 minutes, il y une tâche planifiée qui s’exécute.
Avant de voir ce qui se trouve sur le port 1027, on va écouter avec tcpdumple localhost. Puisqu’on a la possibilitéde lefaire autant en profiter.
Commande :
tcpdump -i lo
La aussi toutes les deuxminutes, il y a une activité. On va l’enregistreret la lireavec Wireshark.
Commande :
tcpdump -i lo -w file.cap
Pour lire le fichier, il faut l’ouvrir dans Wireshark( par le menu fichier/ouvrir)
Escalade de privèlege
Pour votre les informations qui ont pu être échangé, il faut sélectionner l’un des lignes ( n’importe laquelle ), clic droit puis suivrepuis sélectionner flux TCP. En anglais, c’est Follow tcp stream. Dans la fenêtre qui s’ouvre on tombe sur une magnifique clé ssh.
La suite est très simple. Il faut copier/collerla clé dans un fichier avec Vimpar exemple. Une fois enregistré, il faut lui donner des droits particulier à savoir :
chmod 600 id_rsa ( ou le nom que vous avez donné au fichier )
Puis effectuer une connexion ssh avec cette commande :