1. El recorrido: observar, aislar y comprobar
Burp se coloca entre el navegador y el servidor. Proxy recibe el tráfico, HTTP History conserva el intercambio y Repeater permite repetir una petición después de editarla. El aprendizaje no está en cambiar muchos campos, sino en modificar uno y explicar qué diferencia produjo respecto a la línea base.
Proxy
Captura o deja pasar la petición que genera el navegador. Es el punto de observación.
HTTP History
Localiza el intercambio por host, método, URL, estado o longitud y conserva la evidencia original.
Repeater
Duplica la petición, cambia una variable, la reenvía y muestra la nueva respuesta junto a la solicitud.
El resultado se clasifica como efecto confirmado, sin efecto observado o inconcluso. Que un parámetro aparezca en la URL no demuestra que la aplicación lo procese.
2. Prepara Burp y un objetivo local desechable
Descarga Burp Suite desde PortSwigger, ejecuta el instalador nativo de tu arquitectura y selecciona Community Edition. Inicia un proyecto temporal con la configuración por defecto. Para este ejercicio usa el navegador integrado: ya está preparado para el proxy y evita instalar una autoridad certificadora en tu navegador habitual. El listener predeterminado suele estar en 127.0.0.1:8080; por eso el pequeño servidor de práctica escucha en 8000.
mkdir -p "$HOME/cubix-burp-lab"printf '%s\n' 'respuesta alfa' > "$HOME/cubix-burp-lab/index.html"printf '%s\n' 'respuesta beta modificada' > "$HOME/cubix-burp-lab/beta.html"python3 -m http.server 8000 --bind 127.0.0.1 --directory "$HOME/cubix-burp-lab"$Lab = Join-Path $HOME 'cubix-burp-lab'New-Item -ItemType Directory -Force $Lab | Out-NullSet-Content -Path (Join-Path $Lab 'index.html') -Value 'respuesta alfa'Set-Content -Path (Join-Path $Lab 'beta.html') -Value 'respuesta beta modificada'py -m http.server 8000 --bind 127.0.0.1 --directory $Labmkdir -p "$HOME/cubix-burp-lab"printf '%s\n' 'respuesta alfa' > "$HOME/cubix-burp-lab/index.html"printf '%s\n' 'respuesta beta modificada' > "$HOME/cubix-burp-lab/beta.html"python3 -m http.server 8000 --bind 127.0.0.1 --directory "$HOME/cubix-burp-lab"Deja esa terminal abierta. Una respuesta como Serving HTTP on 127.0.0.1 port 8000 confirma que el servicio está listo; Ctrl + C lo detiene. Si python3 o py no existe, instala Python desde su distribución oficial antes de continuar, sin exponer el servidor a otra interfaz.
3. Captura una petición y luego deja navegar
En Burp abre Proxy → Intercept, pulsa Open browser y visita http://127.0.0.1:8000/index.html?term=alpha. Si Intercept está activado, la página esperará mientras Burp muestra la petición: léela y pulsa Forward. Después cambia a Intercept is offpara que el resto de recursos fluya sin detenerse.
GET /index.html?term=alpha HTTP/1.1Host: 127.0.0.1:8000User-Agent: Mozilla/5.0 (…) Accept: text/html,*/*La primera línea contiene método, ruta y query string; Host identifica el destino. En este GET no hay cuerpo. No edites todavía: esta petición será la línea base que permitirá atribuir cada cambio posterior.
4. Encuentra y lee la línea base en HTTP History
Abre Proxy → HTTP history. El historial registra el tráfico que cruza Proxy incluso con Intercept desactivado. Filtra por 127.0.0.1 o busca term=alpha, selecciona la fila y revisa las vistas de petición y respuesta. Los filtros cambian lo que ves; no borran el historial.
Solicitud
Registra método, ruta, parámetros y Host. Comprueba que no has seleccionado un favicon u otro recurso auxiliar.
Respuesta
Anota estado 200, tipo de contenido, longitud y el marcador visible respuesta alfa.
Contexto
Conserva hora y orden. La duración orienta sobre latencia, pero una única medición no prueba una diferencia.
Si el listado tiene demasiado ruido, activa temporalmente los filtros «solo elementos con respuesta» o «solicitudes con parámetros». Para trabajos reales añade únicamente el host autorizado al scope y revisa que el filtro no esté ocultando una petición relevante.
5. Envía a Repeater y cambia una sola variable
Haz clic derecho en la petición base y elige Send to Repeater. Abre la pestaña Repeatery pulsa Send sin modificar nada: esa repetición debe aproximarse a la respuesta original. Después realiza estas tres pruebas en orden, restaurando la línea base entre ellas.
A · Query string
Cambia solo term=alpha por term=beta. El servidor estático ignora el parámetro: esperas el mismo cuerpo.
B · Ruta
Cambia solo /index.html por /beta.html. Esperas un 200 con cuerpo y longitud distintos.
C · Recurso ausente
Cambia solo la ruta por /missing.html. Esperas un 404 y el documento de error del servidor local.
GET /index.html?term=beta HTTP/1.1Host: 127.0.0.1:8000HTTP/1.0 200 OKContent-Type: text/htmlrespuesta alfaLa prueba A confirma ausencia de efecto observado, no que el parámetro sea seguro en cualquier aplicación. Las pruebas B y C demuestran que Repeater sí está reenviando tus cambios. No alteres a la vez método, ruta, cookies, cabeceras y cuerpo: perderías la capacidad de atribuir el resultado.
6. Compara señales, no solo el aspecto visual
Para cada envío anota el valor cambiado y compáralo con la línea base. Repeater muestra la respuesta actual; el historial conserva la original para volver a consultarla. En esta práctica basta una tabla manual: no necesitas aprender Comparer ni otra herramienta de Burp.
Estado
200 → 404 es una diferencia clara, pero el código solo describe cómo respondió el servidor.
Longitud
Una variación ayuda a detectar cuerpos distintos. Compárala con contenido, compresión y cabeceras.
Cabeceras
Observa Content-Type, Location, caché y cookies sin copiar valores sensibles al informe.
Cuerpo
Busca un marcador estable como respuesta alfa; ignora fechas, tokens o identificadores dinámicos.
Tiempo
Repite varias veces antes de interpretarlo. Red, caché y carga introducen variación normal.
Conclusión
Declara efecto confirmado, sin efecto observado o inconcluso, y explica la evidencia mínima.
Un cambio reproducible de estado, longitud o marcador confirma que la variable influye en la respuesta. No prueba por sí solo una vulnerabilidad: para eso harían falta una hipótesis de seguridad, impacto y autorización adicional.
7. Resuelve los fallos habituales sin cambiar de herramienta
History está vacío
Usa Open browser y comprueba que el listener esté activo. Un navegador externo puede no estar enviando tráfico al proxy.
La página no termina
Probablemente Intercept sigue activo. Pulsa Forward para esa petición y luego desactívalo.
Advertencia HTTPS
Vuelve al navegador integrado. Un navegador externo requiere confiar explícitamente en el certificado CA de Burp.
Demasiadas filas
Filtra por host, parámetros o respuestas. Recuerda que el filtro solo oculta elementos.
La respuesta cambia sola
Busca fechas, tokens, cookies, balanceo o contenido dinámico y repite una línea base limpia.
El servidor no arranca
El puerto 8000 puede estar ocupado. Detén el proceso que controlas o elige otro puerto y actualiza Host y URL.
8. Cierra el laboratorio con una evidencia explicable
- El objetivo es local o está incluido expresamente en el alcance autorizado
- Burp Community se abrió con un proyecto temporal y la configuración por defecto
- El navegador integrado cargó 127.0.0.1:8000 a través de Proxy
- La primera petición se dejó intacta como línea base
- HTTP History conserva solicitud, respuesta, estado y longitud originales
- La petición base se envió a Repeater y se repitió sin cambios
- Cada prueba modificó una sola variable y restauró la línea base después
- El parámetro ignorado se clasificó como sin efecto observado, no como seguro
- Los cambios de ruta produjeron un cuerpo distinto y un 404 reproducibles
- La evidencia no contiene cookies, tokens, credenciales ni datos personales
- Intercept quedó desactivado y el servidor local se detuvo con Ctrl+C
Ya tienes el ciclo manual esencial: capturar → localizar → repetir → cambiar → comparar. En un laboratorio posterior puedes aplicarlo a formularios o APIs autorizadas, manteniendo la misma disciplina de una variable por prueba. Cierra el navegador de Burp y el proyecto temporal; elimina la carpeta cubix-burp-lab cuando ya no necesites los dos archivos de práctica.
Glosario
Proxy interceptador
Intermediario que permite observar y, cuando se habilita la interceptación, detener mensajes entre el navegador y el servidor.
Proxy listener
Dirección y puerto locales en los que Burp acepta las conexiones enviadas por un navegador configurado para usarlo como proxy.
Intercept
Estado del Proxy que retiene una petición o respuesta para revisarla antes de reenviarla o descartarla.
HTTP History
Registro de solicitudes y respuestas que han atravesado el Proxy, incluso cuando Intercept está desactivado.
Repeater
Herramienta manual para editar y reenviar repetidamente un mensaje y observar la respuesta obtenida.
Parámetro
Dato de entrada enviado en la URL, el cuerpo, una cabecera u otra parte de la petición.
Query string
Parte de una URL situada después del signo de interrogación que transporta pares de parámetros.
Cabecera HTTP
Campo de metadatos que acompaña a una solicitud o respuesta, como Host o Content-Type.
Cuerpo HTTP
Contenido opcional de un mensaje, como HTML, JSON o datos de un formulario.
Línea base
Petición y respuesta de referencia con las que se comparan cambios posteriores.
Código de estado
Número HTTP de tres cifras que resume el resultado de una solicitud, como 200 o 404.
Longitud de respuesta
Tamaño del mensaje devuelto; sirve como señal comparativa, pero no explica por sí solo qué cambió.
Scope
Conjunto de hosts y rutas definidos como alcance para filtrar y organizar el tráfico autorizado.