Metodología de Pentesting - Guía Completa
Metodología de Pentesting - Guía Completa
🎯 Introducción
Esta guía cubre la metodología estándar de pentesting siguiendo el PTES (Penetration Testing Execution Standard) y las mejores prácticas utilizadas en certificaciones como OSCP, OSEP y OSWE.
¿Por qué seguir una metodología?
- ✅ Estructura: Evita pasar por alto vectores de ataque
- ✅ Reproducibilidad: Los resultados pueden ser verificados
- ✅ Documentación: Facilita la generación de informes profesionales
- ✅ Eficiencia: Optimiza el tiempo durante evaluaciones
🔍 Fases del Pentesting
1. Pre-Engagement (Preparación)
- Definir alcance y objetivos
- Firmar acuerdos legales (NDA, RoE)
- Establecer canales de comunicación
2. Intelligence Gathering (Reconocimiento)
- Pasivo: OSINT, búsqueda de información pública
- Activo: Escaneo de puertos, enumeración de servicios
3. Threat Modeling (Modelado de amenazas)
- Identificar activos críticos
- Analizar superficie de ataque
- Priorizar objetivos
4. Vulnerability Analysis (Análisis de vulnerabilidades)
- Identificación de vulnerabilidades
- Validación manual
- Evaluación de impacto
5. Exploitation (Explotación)
- Desarrollo o uso de exploits
- Obtención de acceso inicial
- Pivoting y movimiento lateral
6. Post-Exploitation (Post-explotación)
- Escalada de privilegios
- Persistencia
- Exfiltración de datos (en entornos de prueba)
7. Reporting (Documentación)
- Informe ejecutivo
- Informe técnico detallado
- Recomendaciones de remediación
🚀 Reconocimiento Inicial
Escaneo con Nmap
Nmap es la herramienta fundamental para el descubrimiento de hosts y servicios.
Escaneo básico con detección de servicios
1
2
3
4
5
6
7
8
9
10
# Escaneo completo con scripts y detección de versión
nmap -sC -sV -O 10.10.16.25 -A -T4 -Pn
# Parámetros:
# -sC: Scripts por defecto de NSE
# -sV: Detección de versiones
# -O: Detección de sistema operativo
# -A: Modo agresivo (incluye -O, -sV, -sC y traceroute)
# -T4: Velocidad de escaneo (0-5)
# -Pn: No hacer ping previo (útil con firewalls)
Escaneo rápido de todos los puertos
1
2
3
4
5
6
7
8
9
10
# Escaneo SYN de todos los puertos TCP (requiere root)
sudo nmap -p- --open -sS --min-rate 5000 -n -Pn 192.168.191.220 -oG allPorts
# Parámetros:
# -p-: Escanear los 65535 puertos
# --open: Mostrar solo puertos abiertos
# -sS: SYN Scan (sigiloso, no completa handshake TCP)
# --min-rate: Paquetes por segundo (ajustar según red)
# -n: No resolver DNS (más rápido)
# -oG: Salida en formato Grepable
💡 Tip: El flag -sS (SYN Scan) es más sigiloso que -sT (Connect Scan) porque no completa el three-way handshake, dejando menos evidencia en logs.
Escaneo dirigido de puertos específicos
1
2
3
4
5
6
# Escaneo detallado de puertos encontrados
sudo nmap -sCV -A -Pn -p80,3389,445 192.168.245.227 -oN targeted
# Parámetros:
# -sCV: Equivalente a -sC -sV
# -oN: Salida en formato normal (legible)
Nmap con proxychains
1
2
3
4
5
# Útil para pivotar a través de SOCKS proxy
proxychains nmap -sT -sV -Pn -T5 172.16.1.20
# Nota: Con proxychains SOLO podemos usar -sT (Connect scan)
# No funciona -sS porque requiere raw sockets
⚠️ Advertencia: -T5 es muy ruidoso y puede ser detectado fácilmente por IDS/IPS. Usar -T3 o -T4 para ser más discreto.
Masscan - Escaneo Ultra-Rápido
Masscan es ideal para escaneos rápidos de grandes rangos de red.
1
2
3
4
5
6
7
8
9
10
11
# Escaneo de todos los puertos TCP y UDP
sudo masscan -e tun0 -p1-65535,U:1-65535 --rate 500 192.168.248.151
# Parámetros:
# -e: Especificar interfaz de red
# -p: Rango de puertos TCP
# U:1-65535: Rango de puertos UDP
# --rate: Paquetes por segundo
# Solo puertos abiertos con velocidad controlada
sudo masscan -e tun0 --open -p1-65535 --max-rate 1000 10.10.10.50
🔥 Comparación Nmap vs Masscan:
- Masscan: Velocidad extrema, ideal para descubrimiento inicial
- Nmap: Más preciso, mejor para enumeración detallada
- Estrategia recomendada: Masscan primero → Nmap después en puertos encontrados
Rustscan - Alternativa Moderna
Rustscan combina velocidad con la precisión de Nmap.
1
2
3
4
5
# Escaneo completo con scripts de Nmap
rustscan --addresses 192.168.127.117 --ulimit 5000 -- -A -sC -Pn -sV -T 1500
# Parámetros antes de '--': Rustscan
# Parámetros después de '--': Pasados directamente a Nmap
💡 Ventajas de Rustscan:
- Escrito en Rust (muy rápido)
- Escanea todos los puertos en segundos
- Automáticamente invoca Nmap para detalles
- Ideal para CTFs y exámenes OSCP
📊 Enumeración de Servicios Específicos
DNS (Puerto 53)
1
2
3
4
5
6
7
8
9
10
11
# Descubrir dominios con nslookup
nslookup
> server 10.129.227.211
> 10.129.227.211
# Consultas específicas con dig
dig @10.129.227.211 cronos.htb ns # Name servers
dig @10.129.227.211 cronos.htb mx # Mail servers
# Ataque de transferencia de zona (Zone Transfer)
dig @10.129.227.211 cronos.htb axfr
🎯 ¿Qué es Zone Transfer?
Un Zone Transfer (AXFR) es una técnica donde un servidor DNS transfiere toda su base de datos de zona a otro servidor. Si está mal configurado, un atacante puede obtener:
- Todos los subdominios
- Direcciones IP internas
- Topología de red
🛡️ Contramedida: Restringir transferencias de zona solo a servidores autorizados.
Dirsearch - Enumeración de Directorios Web
1
2
3
4
5
6
7
8
9
# Escaneo básico de directorios
dirsearch -u http://cozyhosting.htb
# Parámetros útiles:
# -w: Wordlist personalizada
# -e: Extensiones (php,txt,html)
# -t: Threads (hilos concurrentes)
# -r: Recursivo
# --exclude-status: Excluir códigos HTTP
💡 Tip: Combinar con wordlists específicas según tecnología detectada:
- PHP:
/usr/share/seclists/Discovery/Web-Content/PHP.fuzz.txt - ASP.NET:
/usr/share/seclists/Discovery/Web-Content/IIS.fuzz.txt - General:
/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
Wfuzz - Fuzzing Avanzado
Enumeración de subdominios
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Descubrir subdominios mediante fuzzing de cabecera Host
wfuzz -c -f sub-fighter \
-w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
-u 'http://analytical.htb' \
-H "Host: FUZZ.analytical.htb" \
--hc 302
# Parámetros:
# -c: Salida con colores
# -f: Guardar resultados en archivo
# -H: Cabecera HTTP personalizada
# --hc: Ocultar código HTTP (302 en este caso)
# --hl: Ocultar por longitud de respuesta
# --hw: Ocultar por número de palabras
🔍 Técnicas de filtrado:
1
2
3
4
5
6
7
8
9
10
11
# Filtrar por código HTTP
--hc 404,403
# Filtrar por tamaño de respuesta
--hs 1234
# Filtrar por líneas
--hl 42
# Mostrar solo código 200
--sc 200
Gobuster - Alternativa Eficiente
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Enumeración de directorios
gobuster dir -w /usr/share/dirb/wordlists/common.txt \
-u http://192.168.239.225:8090/backend/default/ \
-x php,txt
# Enumeración de subdominios (vhost)
gobuster vhost --append-domain \
-u http://bart.htb \
-w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
-t 200
# A través de proxy (útil para pivoting)
gobuster dir --proxy socks5://127.0.0.1:1080 \
--url http://172.16.1.13/ \
-w /usr/share/wordlists/dirb/common.txt
⚡ Optimización de rendimiento:
-t 50: Aumentar threads (por defecto 10)--delay 100ms: Añadir delay para evitar rate limiting--timeout 10s: Timeout personalizado
Feroxbuster - Fuzzing Recursivo
1
2
3
4
5
6
7
8
9
10
11
12
13
# Escaneo recursivo con filtros
feroxbuster \
-w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
-u http://milan:60001 \
--filter-status 404,500,200 \
-r \
-d 3
# Parámetros:
# -r: Recursivo
# -d: Profundidad de recursión
# --filter-status: Códigos HTTP a filtrar
# -x: Extensiones (php,html,txt)
🎯 Casos de uso:
- CMS: Buscar paneles de administración
- APIs: Endpoints no documentados
- Archivos de backup: .bak, .old, .backup
FFuf - Fuzzer Moderno
1
2
3
4
5
6
7
8
9
10
11
12
13
# Fuzzing de directorios
ffuf -c -w /usr/share/seclists/Discovery/Web-Content/common.txt \
-u http://192.168.228.143/FUZZ
# Fuzzing de subdominios
ffuf -u http://analysis.htb/ \
-H "Host: FUZZ.analysis.htb" \
-w /usr/share/seclists/Discovery/DNS/subdomain-megalist.txt
# Fuzzing de parámetros GET
ffuf -u http://target.com/page?FUZZ=value \
-w wordlist.txt \
-fs 4242 # Filtrar por tamaño
💡 Filtros avanzados de FFuf:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Filtrar por tamaño
-fs 1234
# Filtrar por número de palabras
-fw 42
# Filtrar por líneas
-fl 10
# Filtrar por código
-fc 404,403
# Match (mostrar solo)
-ms 1234 # Por tamaño
-mc 200,301 # Por código
🛠️ Herramientas Esenciales
Scripts de Nmap
1
2
3
4
5
6
7
8
9
10
11
12
13
# Listar categorías de scripts disponibles
locate .nse | xargs grep "categories" | grep -oP '".*?"' | sort -u
# Scripts para SMB
nmap -p 445 10.10.10.50 --script=smb-vuln* -o nmap_smb.txt
# Verificar firma SMB (para Pass-the-Hash)
nmap --script=smb2-security-mode.nse -p445 10.10.10.5
# Enumerar plugins de WordPress
nmap -p80 domain.htb \
--script http-wordpress-enum \
--script-args http-wordpress-enum.root='/wordpress',search-limit=1000
📚 Categorías útiles de scripts NSE:
auth: Autenticacióndefault: Scripts seguros ejecutados con -sCdiscovery: Descubrimiento de informaciónexploit: Exploits (usar con precaución)vuln: Detección de vulnerabilidades
Transformar salida XML de Nmap a HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Generar reporte HTML visual
xsltproc targetedXML > output.html
# Servir con PHP
php -S 0.0.0.0:80
# Acceder: localhost/output.html
# Usar stylesheet Bootstrap personalizado
sudo nmap -sCV -p22,80,443,135,139,445,3389 172.16.236.12 \
--stylesheet=https://raw.githubusercontent.com/honze-net/nmap-bootstrap-xsl/stable/nmap-bootstrap.xsl \
-oX targetedXML
# O usando variable de entorno
export NBTSTRAP="https://raw.githubusercontent.com/honze-net/nmap-bootstrap-xsl/stable/nmap-bootstrap.xsl"
sudo nmap -sCV -p22,80,443 10.10.10.10 --stylesheet=$NBTSTRAP -oX report.xml
📝 Mejores Prácticas
1. Toma de Notas Estructurada
Herramientas recomendadas:
- Obsidian: Markdown con enlaces bidireccionales
- CherryTree: Notas jerárquicas con sintaxis highlighting
- Notion: Colaboración en equipo
- Joplin: Alternativa open-source a Evernote
Estructura recomendada:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Proyecto/
├── 01-Reconocimiento/
│ ├── nmap-scans/
│ ├── subdominios.txt
│ └── notas-iniciales.md
├── 02-Enumeracion/
│ ├── servicios/
│ └── credenciales-encontradas.txt
├── 03-Explotacion/
│ ├── exploits-usados/
│ └── accesos-obtenidos.md
├── 04-Post-Explotacion/
│ ├── hashes/
│ ├── loot/
│ └── persistencia.md
└── 05-Evidencias/
├── screenshots/
└── network-captures/
2. Gestión de Resultados
1
2
3
4
5
6
7
8
9
# Crear estructura automáticamente
mkdir -p target-{recon,enum,exploit,post,evidence}/{nmap,web,smb,misc}
# Nombrar archivos con timestamps
echo "10.10.10.10" | tee target-recon/ip.txt
nmap -sCV -p- 10.10.10.10 -oA target-recon/nmap/full-scan-$(date +%Y%m%d-%H%M)
# Extraer puertos de escaneo grepable
grep -oP '\d+/open' allPorts | cut -d'/' -f1 | tr '\n' ',' | sed 's/,$//'
3. Automatización con Scripts
Script de escaneo inicial:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
# auto-recon.sh
TARGET=$1
WORKDIR="recon-$(date +%Y%m%d-%H%M)"
mkdir -p $WORKDIR/{nmap,web}
echo "[+] Escaneando todos los puertos..."
sudo nmap -p- --open -sS --min-rate 5000 -n -Pn $TARGET -oG $WORKDIR/nmap/all-ports.gnmap
PORTS=$(grep -oP '\d+/open' $WORKDIR/nmap/all-ports.gnmap | cut -d'/' -f1 | tr '\n' ',' | sed 's/,$//')
echo "[+] Puertos encontrados: $PORTS"
echo "[+] Escaneo detallado..."
sudo nmap -sCV -A -p$PORTS $TARGET -oA $WORKDIR/nmap/detailed
echo "[+] Escaneo completado. Resultados en $WORKDIR/"
4. Seguridad Operacional (OpSec)
Consideraciones para Red Team:
- ✅ Usar VPN/Proxy para ofuscar origen
- ✅ Rotar User-Agents en fuzzing web
- ✅ Limitar velocidad de escaneo (evitar DoS accidental)
- ✅ Usar horas de menor actividad
- ✅ Monitorear si el objetivo tiene honeypots/canaries
Niveles de sigilo en Nmap:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Paranoid (-T0): Espera 5 minutos entre paquetes
nmap -T0 -p- target.com
# Sneaky (-T1): Espera 15 segundos entre paquetes
nmap -T1 -sS target.com
# Polite (-T2): Reduce carga en red objetivo
nmap -T2 target.com
# Normal (-T3): Por defecto, balance entre velocidad y sigilo
nmap -T3 target.com
# Aggressive (-T4): Recomendado para redes rápidas y confiables
nmap -T4 -sCV target.com
# Insane (-T5): Muy rápido, puede perder puertos
nmap -T5 target.com
🎓 Tips para OSCP/Certificaciones
Estrategia de Examen
- Primeros 15 minutos: Escaneo completo de todas las máquinas
- Siguientes 30 minutos: Análisis de resultados y priorización
- Resto del tiempo: Explotación metodológica
Priorización:
- Buffer Overflow (si aplica): 25 puntos garantizados
- Máquinas de 20 puntos: Mayor superficie de ataque
- Máquinas de 10 puntos: Última opción
Comandos Rápidos
1
2
3
4
5
6
7
8
# Escaneo rápido top 1000 puertos
nmap -T4 -sC -sV --open 10.10.10.x
# Si no hay tiempo, solo esto
nmap -T5 -p- --min-rate 10000 10.10.10.x
# Enumerar TODO en servicios web
feroxbuster -u http://10.10.10.x -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 50
📚 Referencias y Recursos
Estándares y Frameworks
Wordlists
Herramientas
🔐 MITRE ATT&CK Mapping
Esta metodología cubre las siguientes tácticas de MITRE ATT&CK:
- TA0043: Reconnaissance
- T1595: Active Scanning
- T1592: Gather Victim Host Information
- TA0001: Initial Access
- T1190: Exploit Public-Facing Application
- T1133: External Remote Services
⚖️ Consideraciones Legales
⚠️ IMPORTANTE:
- ✅ Obtener autorización por escrito antes de cualquier test
- ✅ Respetar el alcance definido (scope)
- ✅ No realizar pruebas en producción sin aprobación
- ✅ Tener seguro de responsabilidad civil
- ❌ NUNCA realizar pentesting sin autorización (es ilegal)
📌 Conclusión
Una metodología sólida es la base de cualquier pentesting efectivo. Esta guía cubre los fundamentos del reconocimiento y enumeración inicial, que son críticos para identificar vectores de ataque.
Próximos pasos:
- Revisar los posts de la categoría Apuntes para técnicas específicas de enumeración, Windows, Linux, web, etc.
- Practicar en plataformas legales: HackTheBox, TryHackMe, PentesterLab
Última actualización: 2025-12-10 Licencia: Creative Commons BY-NC-SA 4.0
