La Herramienta de Seguridad Web de Referencia
Burp Suite es el proxy de interceptación web más usado en la industria de seguridad. Desarrollado por PortSwigger, permite interceptar, inspeccionar y modificar el tráfico HTTP/S entre el navegador y el servidor en tiempo real. Es el estándar en auditorías de aplicaciones web, Bug Bounty y certificaciones como OSCP y BSCP.
Herramientas incluidas en Burp Suite
Community vs Professional
| Característica | Community (Gratuita) | Professional (~$449/año) |
|---|---|---|
| Proxy, Repeater, Decoder | ✓ Completo | ✓ Completo |
| Intruder | Limitado — con throttling | Sin límites |
| Scanner automático | No disponible | ✓ Completo |
| BApp Store | Extensiones gratuitas | Todas las extensiones |
| Burp Collaborator | No | ✓ (para SSRF, XXE OOB) |
| Guardar proyectos | No (en memoria) | ✓ Proyectos en disco |
| Para aprendizaje | Más que suficiente | Para profesionales |
Burp Suite Community es gratuita y está disponible para todos los sistemas operativos. En Kali Linux viene preinstalada.
# En Kali Linux ya viene instalado — lanzar directamente burpsuite # O desde el menú: Applications → Web Application Analysis → burpsuite # Si no está instalado o quieres la última versión sudo apt update && sudo apt install burpsuite -y # Verificar versión burpsuite --version
# Descargar desde portswigger.net/burp/communitydownload # Descargar el instalador .sh para Linux wget "https://portswigger.net/burp/releases/download?product=community&type=Linux" \ -O burpsuite_community_linux.sh chmod +x burpsuite_community_linux.sh ./burpsuite_community_linux.sh # Seguir el asistente gráfico de instalación
## WINDOWS # 1. Ir a: portswigger.net/burp/communitydownload # 2. Descargar el instalador .exe para Windows # 3. Ejecutar el .exe como administrador y seguir el asistente # 4. Burp Suite aparecerá en el menú Inicio ## macOS # Opción 1 — Instalador .dmg desde la web de PortSwigger # Opción 2 — Homebrew brew install --cask burp-suite ## JAVA (si falla el lanzamiento) # Burp requiere Java 17+. Si no arranca: java -version # verificar versión sudo apt install openjdk-21-jre -y # instalar en Debian/Ubuntu
Primer arranque — Crear un proyecto temporal
Para interceptar tráfico HTTPS (que es prácticamente todo hoy en día), el navegador debe confiar en el certificado raíz de Burp Suite. Sin este paso, verás errores SSL en todas las páginas HTTPS. Es el paso que más confunde a los principiantes.
Configurar el proxy en el navegador
Firefox (recomendado para Burp): Menú → Preferencias → General → Configuración de red → Configuración manual del proxy:
Proxy HTTP:
127.0.0.1 Puerto: 8080Marcar "Usar este proxy también para HTTPS"
Chrome / Chromium: Se recomienda usar el parámetro de línea de comandos:
# Chrome / Chromium con proxy de Burp google-chrome --proxy-server="http://127.0.0.1:8080" --ignore-certificate-errors chromium-browser --proxy-server="http://127.0.0.1:8080" # Firefox desde terminal firefox --proxy-server="127.0.0.1:8080" # Alternativa: usar FoxyProxy (extensión del navegador) # Permite cambiar el proxy con un clic sin tocar la configuración del sistema
cacert.der.cacert.der → marcar "Confiar en esta CA para identificar sitios web" → Aceptar.sudo cp cacert.der /usr/local/share/ca-certificates/burp.crt && sudo update-ca-certificatesWindows: Doble clic en cacert.der → Instalar certificado → Almacén "Entidades de certificación raíz de confianza"
macOS: Doble clic en cacert.der → Llavero → marcar "Confiar siempre"
Para practicar Burp Suite necesitas una aplicación web vulnerable. Las mejores opciones son gratuitas, seguras y están pensadas exactamente para esto.
| Aplicación | Instalación | Dificultad | Ideal para |
|---|---|---|---|
| OWASP Juice Shop | docker run -p 3000:3000 bkimminich/juice-shop | ⭐ a ⭐⭐⭐⭐⭐ | Top 10 OWASP completo, más de 100 retos |
| DVWA | docker run -p 80:80 vulnerables/web-dvwa | ⭐ a ⭐⭐⭐ | SQLi, XSS, File Upload, CSRF básico |
| WebGoat | docker run -p 8080:8080 webgoat/webgoat | ⭐⭐ a ⭐⭐⭐⭐ | Lecciones guiadas con teoría + práctica |
| PortSwigger Web Academy | Online — labs.portswigger.net | ⭐ a ⭐⭐⭐⭐⭐ | El mejor recurso — creado por los autores de Burp |
| HackTheBox / TryHackMe | Online con VPN | ⭐⭐ a ⭐⭐⭐⭐⭐ | Máquinas reales con objetivos web |
# Juice Shop — el más completo docker run --rm -p 3000:3000 bkimminich/juice-shop # Acceder en: http://localhost:3000 # DVWA — clásico para SQLi y XSS básico docker run --rm -p 80:80 vulnerables/web-dvwa # Acceder en: http://localhost # Login: admin / password # Ir a Setup/Reset DB → luego DVWA Security → Low # WebGoat — lecciones guiadas docker run --rm -p 8081:8080 -p 9090:9090 webgoat/webgoat # Acceder en: http://localhost:8081/WebGoat # Con docker-compose para tener todo a la vez cat > docker-compose.yml << 'EOF' version: "3" services: juiceshop: image: bkimminich/juice-shop ports: ["3000:3000"] dvwa: image: vulnerables/web-dvwa ports: ["8082:80"] webgoat: image: webgoat/webgoat ports: ["8083:8080"] EOF docker-compose up -d
localhost en lugar de 127.0.0.1, o accede por la IP local de la máquina (ej: 192.168.1.x).El Proxy es el corazón de Burp Suite. Actúa como intermediario entre el navegador y el servidor, permitiendo ver, pausar y modificar cada petición HTTP/S antes de que llegue al destino. Todo lo que hace el navegador pasa por aquí.
Anatomía de la interfaz del Proxy
| Panel / Pestaña | Qué muestra | Para qué se usa |
|---|---|---|
| Intercept | La petición actual pausada, lista para modificar | Modificar peticiones antes de enviarlas al servidor |
| HTTP History | Historial de todas las peticiones que han pasado por el proxy | Revisar el tráfico capturado, seleccionar peticiones para Repeater |
| WebSockets History | Mensajes WebSocket interceptados | Auditar aplicaciones que usan WebSockets (chats, dashboards en tiempo real) |
| Proxy Settings | Configuración del proxy: puerto, filtros, SSL | Ajustar el comportamiento del proxy |
Interceptar y modificar una petición
Content-Type: application/json
Cookie:
Content-Length: 52
{"email":"test@test.com","password":"admin123"}
← puedes modificar cualquier valor antes de hacer Forward
Forward — envía la petición modificada al servidor y pasa a la siguiente
Drop — descarta la petición (el servidor no la recibe)
Action → Send to Repeater — envía al Repeater para seguir trabajando con ella
Action → Send to Intruder — envía al Intruder para automatizar
HTTP History — Revisar todo el tráfico
Con Intercept OFF, las peticiones fluyen libremente pero se registran en HTTP History. Es el modo más cómodo para navegar la aplicación y explorar qué endpoints existen antes de profundizar en alguno.
Configurar el alcance (Scope)
El Scope define qué URLs debe procesar Burp. Sin scope configurado, Burp captura todo el tráfico del navegador incluyendo publicidad, telemetría y CDNs. Configurarlo correctamente evita ruido y protege la privacidad.
# Cómo configurar el scope en Burp: 1. Target → Scope Settings → Include in scope 2. Add → Host: localhost Port: 3000 3. En Proxy Settings → marcar "And URL is in target scope" → Burp solo capturará tráfico hacia localhost:3000 Alternativa rápida: - En HTTP History, clic derecho en cualquier petición → "Add to scope" → Burp pregunta si quieres ignorar el tráfico fuera del scope # Verificar el scope activo Target → Site Map → muestra solo los hosts en el scope
Repeater es la herramienta más usada en el trabajo diario con Burp. Permite tomar una petición HTTP, modificarla manualmente y reenviarla tantas veces como quieras, viendo la respuesta al instante. Es la herramienta para explorar y confirmar vulnerabilidades manualmente.
Flujo de trabajo con Repeater
Ejemplo práctico — Explorar un parámetro en Juice Shop
Modificaciones a probar en Repeater:
/api/Products/2 ← otro producto
/api/Products/0 ← ¿existe el ID 0?
/api/Products/-1 ← ID negativo — ¿qué responde?
/api/Products/999 ← ID que no existe — ¿código de error?
/api/Products/1.0 ← tipo de dato diferente
Intruder automatiza el envío de peticiones HTTP con variaciones sistemáticas. Permite hacer fuzzing de parámetros, fuerza bruta de credenciales, enumeración de recursos y pruebas de payloads sobre cualquier parte de una petición HTTP.
Los 4 modos de ataque de Intruder
| Modo | Cómo funciona | Cuándo usarlo |
|---|---|---|
| Sniper | Un solo set de payloads. Los prueba uno a uno en cada posición marcada, de forma secuencial | Fuzzing de un parámetro a la vez. El más común. |
| Battering Ram | Un solo set de payloads. Inserta el mismo payload en todas las posiciones marcadas simultáneamente | Cuando el mismo valor debe ir en múltiples parámetros (ej: usuario en header y en body) |
| Pitchfork | Múltiples sets de payloads. Itera en paralelo: payload 1 del set A con payload 1 del set B, etc. | Fuerza bruta de credenciales con lista de usuarios + lista de contraseñas emparejadas |
| Cluster Bomb | Múltiples sets. Prueba todas las combinaciones posibles entre todos los payloads de todos los sets | Fuerza bruta de credenciales cuando no sabes qué usuario corresponde a qué contraseña |
Cómo usar Intruder — Paso a paso
Simple list — lista de valores (pegar directamente o cargar un archivo .txt)
Numbers — rango numérico (ej: del 1 al 1000)
Brute forcer — combinaciones de caracteres
Runtime file — leer de un archivo en tiempo real
# Burp Suite incluye listas en: Help → Burp Suite Defaults → Payload Lists # También disponibles en SecLists (la colección más completa) git clone https://github.com/danielmiessler/SecLists.git # Las más útiles para Intruder en tests de aplicaciones web: SecLists/Discovery/Web-Content/common.txt ← directorios comunes SecLists/Discovery/Web-Content/raft-medium-files.txt ← archivos comunes SecLists/Usernames/top-usernames-shortlist.txt ← usuarios frecuentes SecLists/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt SecLists/Fuzzing/SQLi/Generic-SQLi.txt ← payloads SQL injection SecLists/Fuzzing/XSS/XSS-Jhaddix.txt ← payloads XSS
El Scanner es la característica estrella de Burp Suite Pro. Realiza escaneo activo y pasivo de vulnerabilidades sobre el tráfico capturado o sobre un objetivo específico. En Community Edition no está disponible, pero hay alternativas con extensiones.
Tipos de escaneo en Burp Pro
| Tipo | Cómo funciona | Qué detecta |
|---|---|---|
| Escaneo pasivo | Analiza el tráfico que ya pasa por el proxy sin enviar peticiones adicionales | Cabeceras de seguridad ausentes, cookies sin flags, información sensible en respuestas, versiones de software expuestas |
| Escaneo activo | Envía peticiones adicionales con payloads de prueba para detectar vulnerabilidades | SQL injection, XSS, SSRF, XXE, Path Traversal, OS Command injection, SSTI, y más de 100 tipos de vulnerabilidades |
| Crawl + Audit | Primero rastrea la aplicación automáticamente, luego escanea cada endpoint encontrado | Cobertura completa de la aplicación — encuentra endpoints que no se habían visitado manualmente |
nikto -h http://localhost:3000) para configuración errónea del servidor, y extensiones de Burp como Active Scan++ y Retire.js que añaden capacidades de escaneo en Community.Usar el Scanner en Burp Pro
Tres herramientas auxiliares que completan el arsenal de Burp Suite para análisis de datos, comparación de respuestas y análisis de tokens.
Decoder — Codificar y decodificar
Decoder permite transformar datos entre múltiples formatos de codificación. Cuando ves un valor codificado en una petición (Base64, URL encoding, HTML entities), lo pegas aquí y lo decodificas con un clic.
# Acceder: pestaña Decoder (o clic derecho → Send to Decoder) ## Codificaciones disponibles: URL encoding → %3C%73%63%72%69%70%74%3E ↔ <script> HTML entities → <script> ↔ <script> Base64 → SGVsbG8gV29ybGQ= ↔ Hello World Hex → 48 65 6c 6c 6f ↔ Hello ASCII hex → 0x48656c6c6f ↔ Hello Gzip → (datos comprimidos) ↔ texto plano JWT → header.payload.signature ↔ JSON legible # Tip: puedes encadenar múltiples decodificaciones # URL decode → Base64 decode → Gzip decompress, todo en el mismo panel
Comparer — Comparar peticiones y respuestas
Comparer muestra las diferencias entre dos peticiones o respuestas, resaltando byte a byte lo que cambió. Útil para identificar qué cambia en la respuesta cuando un parámetro varía — señal de comportamiento diferente que puede indicar una vulnerabilidad.
# Enviar items a Comparer: Desde HTTP History: clic derecho → "Send to Comparer" (Request o Response) Desde Repeater: clic derecho en el panel → "Send to Comparer" Directamente: pegar texto en los dos paneles de Comparer # Ver diferencias: Comparer → seleccionar los dos items → "Compare" → Words o Bytes - Words: diferencias a nivel de palabra (mejor para HTML/JSON) - Bytes: diferencias a nivel de byte (mejor para datos binarios) Las diferencias se resaltan en amarillo/rojo # Casos de uso prácticos: - Respuesta con credenciales válidas vs inválidas → qué cambia? - Respuesta con usuario admin vs usuario normal → se muestran más datos? - Dos versiones del mismo token → son realmente aleatorios?
Sequencer — Analizar aleatoriedad de tokens
Sequencer analiza estadísticamente si los tokens de sesión, tokens CSRF o cualquier valor generado por el servidor son realmente aleatorios. Un token predecible puede ser forgeado por un atacante.
# Enviar una petición que genera tokens al Sequencer: HTTP History → clic derecho en petición de login o generación de token → "Send to Sequencer" # Configurar qué parte de la respuesta contiene el token: Sequencer → Token Location → seleccionar el campo de la respuesta (Cookie, Set-Cookie, o Custom location con expresión) # Ejecutar el análisis: → "Start live capture" → Burp envía la petición repetidamente (500-1000 veces) → captura los tokens generados → analiza su entropía estadística # Interpretar resultados: Entropía efectiva > 100 bits → BIEN: token seguro Entropía efectiva < 64 bits → MAL: token potencialmente predecible Patrones detectados → CRÍTICO: token con estructura predecible
El BApp Store (Burp App Store) es el repositorio oficial de extensiones para Burp Suite. Contiene más de 300 extensiones desarrolladas por la comunidad y por PortSwigger que añaden funcionalidades específicas al suite. Muchas son gratuitas y de código abierto.
¿Qué tipos de extensiones existen?
| Categoría | Qué hacen | Ejemplos |
|---|---|---|
| Escaneo | Añaden nuevos checks de vulnerabilidades al escáner | Active Scan++, Retire.js, Software Vulnerability Scanner |
| Reconocimiento | Extraen información adicional del tráfico | JS Miner, Asset Discover, Google Hack |
| Autenticación | Gestionan tokens, sesiones y autenticación | Autorize, JWT Editor, AuthMatrix |
| Payloads | Añaden nuevos tipos de payloads para Intruder | Turbo Intruder, Backslash Powered Scanner |
| Utilidades | Mejoran la usabilidad y workflow general | Logger++, Hackvector, Param Miner |
Instalar extensiones desde el BApp Store es inmediato — un clic. También se puede instalar manualmente desde archivos .jar o .py para extensiones no disponibles en la tienda oficial.
Instalar desde el BApp Store
Instalar manualmente (archivos .jar / .py)
# Para extensiones de GitHub o fuera del BApp Store ## Si la extensión está en Python (necesita Jython) # 1. Descargar Jython standalone JAR desde jython.org # 2. En Burp: Extensions → Extensions settings → Python environment # → seleccionar el .jar de Jython descargado ## Instalar extensión manual: Extensions → Installed → Add → Extension type: Java / Python / Ruby → Extension file: seleccionar el .jar o .py descargado → Next → la extensión se carga ## Ejemplo: instalar Turbo Intruder manualmente si no está en la tienda git clone https://github.com/PortSwigger/turbo-intruder.git # Compilar o usar el .jar precompilado de Releases → instalar como arriba ## Ver errores de carga de extensiones: Extensions → Installed → seleccionar extensión → pestaña "Errors" Útil para diagnosticar por qué una extensión no carga correctamente
Selección de las extensiones más útiles y usadas en pentesting web. Todas gratuitas salvo que se indique.
Extensiones imprescindibles
Burp Suite tiene una API de extensiones completa. Puedes escribir extensiones en Java, Python (con Jython) o Ruby (con JRuby). Una extensión Python básica puede estar lista en menos de 50 líneas de código.
# extension_basica.py # Extensión que añade una cabecera personalizada a todas las peticiones # Instalar: Extensions → Add → Python → seleccionar este archivo from burp import IBurpExtender, IHttpListener class BurpExtender(IBurpExtender, IHttpListener): def registerExtenderCallbacks(self, callbacks): """Se ejecuta al cargar la extensión""" self._callbacks = callbacks self._helpers = callbacks.getHelpers() # Nombre que aparece en la lista de extensiones callbacks.setExtensionName("GhostAcademy - Cabecera Custom") # Registrar como listener HTTP — se llamará en cada petición/respuesta callbacks.registerHttpListener(self) print("[+] Extensión cargada correctamente") def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo): """Se ejecuta en cada petición o respuesta""" # Solo procesar peticiones (no respuestas) if not messageIsRequest: return # Obtener la petición actual request = messageInfo.getRequest() analyzedRequest = self._helpers.analyzeRequest(request) # Obtener las cabeceras actuales headers = list(analyzedRequest.getHeaders()) # Añadir nuestra cabecera personalizada headers.append("X-GhostAcademy-Test: auditoria-autorizada") # Obtener el cuerpo de la petición body = request[analyzedRequest.getBodyOffset():] # Reconstruir la petición con la nueva cabecera nueva_peticion = self._helpers.buildHttpMessage(headers, body) # Reemplazar la petición original messageInfo.setRequest(nueva_peticion) [+] Extensión cargada correctamente ← desde ahora, todas las peticiones llevan la cabecera X-GhostAcademy-Test
# Extensión que extrae URLs y rutas de las respuestas HTTP from burp import IBurpExtender, IHttpListener import re class BurpExtender(IBurpExtender, IHttpListener): def registerExtenderCallbacks(self, callbacks): self._callbacks = callbacks self._helpers = callbacks.getHelpers() callbacks.setExtensionName("GhostAcademy - Extractor de Endpoints") callbacks.registerHttpListener(self) self.endpoints_encontrados = set() print("[+] Extractor de endpoints activo") def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo): if messageIsRequest: return # Obtener el cuerpo de la respuesta como string response = messageInfo.getResponse() analyzedResponse = self._helpers.analyzeResponse(response) body_offset = analyzedResponse.getBodyOffset() body = response[body_offset:].tostring().decode('utf-8', errors='ignore') # Buscar URLs relativas y endpoints de API patron_api = r'["\'](?:\/api\/[a-zA-Z0-9_\/\-\.]+)["\']' patron_ruta = r'["\'](?:\/[a-zA-Z0-9_\/\-\.]+)["\']' for match in re.findall(patron_api, body): endpoint = match.strip('"\'') if endpoint not in self.endpoints_encontrados: self.endpoints_encontrados.add(endpoint) print(f"[ENDPOINT] {endpoint}")
El reconocimiento es el primer paso en cualquier auditoría web. Con Burp Suite puedes mapear completamente la superficie de una aplicación antes de profundizar en vulnerabilidades específicas.
Los fallos de autenticación y control de acceso son las categorías A01 y A07 del OWASP Top 10 — las más frecuentes. Burp Suite con Autorize y JWT Editor las hace accesibles de testear incluso para principiantes.
Las APIs REST son el objetivo más común en pentesting web moderno. La mayoría de las aplicaciones SPA (React, Angular, Vue) se comunican exclusivamente por API. Burp Suite es la herramienta ideal para interceptar e inspeccionar ese tráfico JSON.
Dominar los atajos de teclado multiplica la velocidad de trabajo con Burp Suite. Los más importantes son los de navegación entre herramientas y los de envío entre paneles.
| Atajo | Acción | Contexto |
|---|---|---|
Ctrl + R | Enviar al Repeater | Proxy Intercept / HTTP History |
Ctrl + I | Enviar al Intruder | Proxy Intercept / HTTP History |
Ctrl + Enter | Enviar petición | Repeater |
Ctrl + Z | Deshacer edición | Cualquier editor de texto |
Ctrl + F | Buscar en el panel actual | Cualquier panel |
Ctrl + G | Ir a (en el editor de texto) | Editors |
Ctrl + A | Seleccionar todo | Cualquier editor |
Ctrl + Shift + R | Enviar al Repeater (desde Intruder) | Intruder results |
Ctrl + Mayús + F | Buscar en todos los paneles | Global |
Ctrl + + | Nueva pestaña en Repeater | Repeater |
F | Forward (reenviar petición interceptada) | Proxy Intercept |
D | Drop (descartar petición) | Proxy Intercept |
Checklist de configuración inicial
- Burp Suite Community instalado y arrancando correctamente
- Proxy configurado en el navegador: 127.0.0.1:8080
- Certificado CA de Burp instalado en el navegador
- Verificado: peticiones HTTPS aparecen en HTTP History
- FoxyProxy instalado para cambiar proxy con un clic
- Laboratorio levantado: Juice Shop en localhost:3000
- Scope configurado con el dominio del laboratorio
Checklist de extensiones esenciales
- Jython configurado en Extensions settings (para extensiones Python)
- Autorize instalado y configurado con dos sesiones
- JWT Editor instalado (si la app usa JWT)
- Param Miner instalado para descubrir parámetros ocultos
- Logger++ instalado como reemplazo del HTTP History
- Retire.js instalado para detección de JS vulnerable
- Turbo Intruder instalado para fuzzing de alta velocidad
Recursos para seguir aprendiendo
| Recurso | URL | Descripción |
|---|---|---|
| PortSwigger Web Academy | portswigger.net/web-security | El mejor recurso gratuito de seguridad web — creado por los autores de Burp |
| Burp Suite Documentation | portswigger.net/burp/documentation | Documentación oficial de todas las herramientas |
| BApp Store | portswigger.net/bappstore | Catálogo completo de extensiones con descripciones |
| Burp Extension API | portswigger.net/burp/extender/api | Javadoc completo para desarrollar extensiones |
| Burp Suite Certification (BSCP) | portswigger.net/web-security/certification | Certificación oficial de PortSwigger en seguridad web con Burp |
| GitHub PortSwigger | github.com/PortSwigger | Código fuente de extensiones oficiales |
| OWASP Juice Shop | owasp.org/www-project-juice-shop | La mejor aplicación de práctica para Burp Suite |
Comandos rápidos de referencia
## PROXY Intercept ON/OFF → pestaña Proxy → Intercept → botón Forward → reenviar petición pausada Drop → descartar petición pausada Action → menú de envío a otras herramientas ## REPEATER Ctrl+R → enviar petición al Repeater Ctrl+Enter → enviar petición en Repeater ← → → navegar historial de envíos Ctrl++ → nueva pestaña de Repeater ## INTRUDER Ctrl+I → enviar al Intruder Positions → marcar posiciones con §§ Payloads → configurar lista de payloads Start attack → iniciar el ataque Ordenar por Length → detectar respuestas diferentes ## DECODER Ctrl+B → encode como Base64 Ctrl+Shift+B → decode Base64 Ctrl+U → URL encode Ctrl+Shift+U → URL decode ## FILTROS ÚTILES EN HTTP HISTORY Filtrar por código: 200, 302, 401, 403, 500 Filtrar por extensión: php, aspx, json Filtrar por texto en URL: /api, /admin, /upload Mostrar solo in-scope: para reducir el ruido