Entrada

Metodología de Pentesting - Guía Completa

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ón
  • default: Scripts seguros ejecutados con -sC
  • discovery: Descubrimiento de información
  • exploit: 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

  1. Primeros 15 minutos: Escaneo completo de todas las máquinas
  2. Siguientes 30 minutos: Análisis de resultados y priorización
  3. 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

Esta entrada está licenciada bajo CC BY 4.0 por el autor.