Introducción
Fieldnote está preparando Northline Print Fair. Los expositores inician sesión para recoger el kit de su propio estand: una hora de llegada, un punto de entrega y una lista de materiales. Una primera prueba de Hydra parece encontrar varios accesos válidos. Algunos de esos hallazgos corresponden en realidad a páginas de error. Tu tarea es distinguir la autenticación real de una respuesta engañosa y después recopilar el kit completo del expositor asignado.
Solo necesitas saber introducir comandos básicos, reconocer rutas y cambiar de pestaña. Hydra y el portal local ya están preparados. Antes de utilizarlos, aprenderás los campos del formulario, las condiciones de coincidencia y el manejo de cookies. Workstation es tu terminal y Exhibitor Portal es el sitio web. Son dos interfaces del mismo contenedor de formación aislado, no dos equipos. Todas las cuentas y los datos de negocio son sintéticos. Prueba únicamente el formulario de práctica declarado y la cuenta asignada con los candidatos proporcionados. No cambies el servidor, las cuentas ni los documentos.
Los 55 minutos estimados incluyen lectura y errores habituales; no se ha medido el tiempo con principiantes. Entregarás un argumento de formulario reutilizable, un resultado original de Hydra y el kit del estand obtenido mediante autenticación, no un informe escrito.
Ver qué abre un inicio de sesión real
En este paso, abrirás una cuenta de vista previa que sabes que funciona y la relacionarás con los datos de su propio estand. Una solicitud HTTP correcta significa que el servidor ha enviado una respuesta; una autenticación correcta significa que ha aceptado una identidad. Son hechos diferentes.
Abre la pestaña Exhibitor Portal. Selecciona Start at the practice desk y luego Practice sign-in. Introduce el ID de expositor preview y la contraseña Preview24; después selecciona Sign in. El resultado muestra Signed in as preview. Selecciona Open your workspace. Su estand es DEMO y la nota de embalaje lo identifica como documento de práctica. Este es el flujo normal del negocio; el kit de vista previa no es tu entrega final. Selecciona Sign out y después el enlace Practice desk de la navegación.

El ID del expositor y el estand identifican este documento como una vista previa; el botón de descarga por sí solo no demuestra que sea el kit que tienes asignado.
Cambia a Workstation. Los comandos de este laboratorio comienzan en /home/labex/project/login-review. La interfaz entra automáticamente en ese directorio; pwd muestra el directorio actual para comprobarlo:
pwd
Debes ver /home/labex/project/login-review. Si estás en otro lugar, cd cambia de directorio:
cd /home/labex/project/login-review
El formulario de práctica envía una solicitud POST a /practice/login. Un POST lleva campos con nombre en el cuerpo de la solicitud. Aquí los nombres son username y password; & los separa. curl envía una solicitud desde la terminal, independientemente del navegador. En el siguiente comando, --data proporciona los campos, -s oculta el indicador de progreso, -o guarda el cuerpo de la respuesta y -w imprime el estado HTTP. Las comillas simples mantienen juntos los espacios, & y %{http_code} para curl, en lugar de permitir que los interprete la shell.
Envía deliberadamente una contraseña incorrecta:
curl -s -o wrong.html -w 'HTTP %{http_code}
' --data 'username=preview&password=Wrong24' http://127.0.0.1:8080/practice/login
La salida es HTTP 200. Significa que la aplicación devolvió una página, no que la contraseña funcionó. wrong.html contiene esa página. grep busca texto; su opción -o imprime solo el texto coincidente, para que no tengas que leer el marcado HTML que lo rodea:
grep -o 'Incorrect password' wrong.html
Debes ver Incorrect password. El mismo estado HTTP puede acompañar tanto un éxito real como un inicio de sesión rechazado. En esta lección puedes recuperarte de un error normal al escribir la contraseña: corrige el valor y envíalo de nuevo. Un error de conexión significa que la solicitud no llegó al servicio; revisa 127.0.0.1, el puerto 8080 y la ruta declarada antes de interpretar un resultado de inicio de sesión. No reinicies la VM para corregir un error de escritura.
Reproducir un hallazgo engañoso
En este paso, ejecutarás una regla de clasificación deliberadamente defectuosa con cuatro pares de práctica. Es una demostración de una prueba incorrecta, no una auditoría fiable.
Permanece en Workstation. cat muestra un archivo. La lista preparada contiene pares completos username:password, uno por línea:
cat practice-pairs.txt
preview:Wrong24
retired:Wrong24
offline:Wrong24
preview:Preview24
retired es una muestra sintética de cuenta no disponible. offline es una muestra controlada de error de servicio; el manejador de práctica devuelve HTTP 503 sin crear una sesión. No representa una caída de un servicio externo ni un expositor real. El último par es el acceso de vista previa que sabes que funciona. Mantén este pequeño conjunto autorizado; no lo amplíes a combinaciones arbitrarias de usuarios y contraseñas.
El módulo http-post-form de Hydra envía cada par a un formulario. Su argumento tiene tres partes separadas por dos puntos: la ruta POST, los campos y una condición de respuesta. ^USER^ y ^PASS^ son marcadores de posición de Hydra. F= significa «considerar fallida una respuesta que contenga este patrón». Cualquier otra respuesta puede clasificarse como un éxito. Este comando reconoce deliberadamente solo Incorrect password y deja sin cubrir otros tipos de fallo.
Las opciones son -I para ignorar una antigua solicitud de restauración en este espacio de trabajo, -C para candidatos emparejados, -s para el puerto, -t 1 para un único proceso de trabajo, -o para el nombre del archivo de resultados y -b json para salida JSON. El argumento final entre comillas sigue siendo un solo argumento aunque contenga espacios y &.
hydra -I -C practice-pairs.txt -s 8080 -t 1 -o misleading.json -b json 127.0.0.1 http-post-form '/practice/login:username=^USER^&password=^PASS^:F=Incorrect password'
Para leer JSON sin escribir un programa, usa el formateador incorporado json.tool de Python. python3 -m ejecuta un módulo instalado:
python3 -m json.tool misleading.json
Lee la lista results. Aparece el par de vista previa conocido, pero también puede aparecer un par de cuenta no disponible o de error de servicio. Un hallazgo es una afirmación de la condición, no una prueba de que se haya abierto un espacio de trabajo autenticado. El campo superior success: true describe la ejecución de Hydra, no la validez de todas las contraseñas comunicadas. No uses este archivo engañoso como resultado final de la auditoría.
Si Hydra comunica un error de sintaxis o conexión, compara el argumento completo entre comillas y el puerto con el comando anterior, corrige el error y repite esta pequeña prueba de práctica. Una conexión fallida no demuestra una contraseña válida ni constituye un resultado negativo válido.
Calibrar con respuestas conocidas
En este paso, guardarás una condición reutilizable que acepte el éxito real y rechace los tres casos conocidos que no representan un éxito. Permanece en Workstation. Primero examina las otras respuestas con el mismo formato de solicitud.
La solicitud de cuenta no disponible devuelve deliberadamente HTTP 200:
curl -s -o retired.html -w 'HTTP %{http_code}
' --data 'username=retired&password=Wrong24' http://127.0.0.1:8080/practice/login
grep -o 'Sign-in unavailable' retired.html
La solicitud de error de servicio controlado devuelve deliberadamente HTTP 503. No existe una sesión válida, aunque su página no contenga Incorrect password:
curl -s -o offline.html -w 'HTTP %{http_code}
' --data 'username=offline&password=Wrong24' http://127.0.0.1:8080/practice/login
grep -o 'Service unavailable' offline.html
Ahora obtén la respuesta positiva conocida. Esta solicitud de curl tiene su propia sesión, independiente de la del navegador:
curl -s -o preview.html --data 'username=preview&password=Preview24' http://127.0.0.1:8080/practice/login
grep -o 'Signed in as preview' preview.html
Signed in as identifica aquí el resultado autenticado. Welcome también aparece en las páginas de fallo y no permite distinguir la autenticación. S= de Hydra selecciona un patrón positivo: la respuesta debe contenerlo para contar como éxito. Consulta la ayuda del módulo instalado con -U; explica la ruta, los campos y la sintaxis de las condiciones:
hydra -U http-post-form
Guarda el argumento completo de práctica. cat > calibration.txt escribe texto en un archivo; > lo reemplaza si ya existe. Un here-document proporciona varias líneas hasta la línea final EOF. Entrecomillar 'EOF' conserva literalmente su contenido. Coloca el marcador final en una línea independiente y sin espacios delante:
cat > calibration.txt <<'EOF'
/practice/login:username=^USER^&password=^PASS^:S=Signed in as
EOF
Una variable de shell guarda texto para reutilizarlo en esta terminal. $(cat calibration.txt) lee el archivo; form= almacena el resultado sin espacios alrededor de =. Más adelante, entrecomillar "$form" conserva los espacios como parte de un único argumento. Esta variable pertenece a la sesión de terminal actual; tras reconectarte, vuelve a ejecutar la asignación.
form=$(cat calibration.txt)
hydra -I -C practice-pairs.txt -s 8080 -t 1 -o calibration.json -b json 127.0.0.1 http-post-form "$form"
python3 -m json.tool calibration.json
Solo debe comunicarse preview:Preview24. La contraseña incorrecta, la cuenta no disponible y HTTP 503 no están autenticados. La calibración debe incluir también el positivo conocido: una condición que rechace todo es igualmente incorrecta. Un patrón de fallo suficientemente amplio puede ser equivalente a este patrón positivo; no tienes que usar una forma concreta de S=. El argumento guardado se prueba con cada respuesta conocida de forma independiente; no se acepta simplemente por contener una palabra clave.
Recopilar el kit del expositor asignado
En este paso, aplicarás el método calibrado al expositor asignado y después autenticarás su identidad de forma independiente para recoger su documento de negocio real.
Abre Exhibitor Portal, luego Exhibitor sign-in y View your review assignment. La cuenta asignada es papertrail y su ruta POST es /signin. Solo se permiten las tres contraseñas de candidates.txt. La cuenta de práctica pertenece a otro formulario. Cambia a Workstation y lee los candidatos:
cat candidates.txt
Guarda un segundo argumento reutilizable con la ruta asignada y los mismos campos y condición:
cat > form.txt <<'EOF'
/signin:username=^USER^&password=^PASS^:S=Signed in as
EOF
form=$(cat form.txt)
A diferencia de -C, -l papertrail proporciona un nombre de usuario fijo y -P candidates.txt proporciona sus contraseñas permitidas. Ejecuta la pequeña auditoría asignada y guarda un nuevo resultado JSON original:
hydra -I -l papertrail -P candidates.txt -s 8080 -t 1 -o findings.json -b json 127.0.0.1 http-post-form "$form"
python3 -m json.tool findings.json
El único hallazgo real identifica a papertrail con la contraseña InkPaper7. Esta conclusión solo se aplica a la cuenta y al conjunto de candidatos declarados; no afirma que todo el sitio sea seguro.
Cambia a Exhibitor Portal. Selecciona Exhibitor sign-in, introduce el par descubierto y selecciona Sign in y después Open your workspace. Comprueba papertrail, el estand N-14, la llegada 09:15 y North loading door. Selecciona Download booth kit para obtener la descarga real en el navegador. El archivo pertenece a la ubicación de descargas del navegador; no aparece automáticamente dentro del contenedor de formación.

Revisa los campos de expositor y estand situados sobre la nota de embalaje antes de utilizar esta descarga.
Vuelve a Workstation para guardar la copia requerida en la VM. Una cookie es un identificador de sesión emitido por el servidor. -c exhibitor.cookies guarda las cookies recibidas por este inicio de sesión de terminal. Este archivo de cookies pertenece a curl; el navegador y Hydra no lo comparten automáticamente. El cuerpo de la respuesta se guarda en signin.html:
curl -s -c exhibitor.cookies -o signin.html --data 'username=papertrail&password=InkPaper7' http://127.0.0.1:8080/signin
Lee la descarga autenticada con el mismo archivo. -b envía sus cookies. -f hace que un rechazo HTTP devuelva un estado distinto de cero en lugar de guardar silenciosamente una página de error como si fuera un kit:
curl -f -s -b exhibitor.cookies http://127.0.0.1:8080/kit.json -o booth-kit.json
Un 403 o el estado de salida 22 de curl significa que este cliente no tiene una sesión aceptada. Revisa el usuario, la contraseña, la ruta del formulario y el nombre del archivo de cookies; repite el comando de inicio de sesión y después la descarga. Un 404 significa que la ruta es incorrecta. Puedes recuperarte de estos errores; no sustituyas el kit por un archivo de vista previa copiado.
python3 -m json.tool booth-kit.json
Compara el expositor, el estand y la llegada con la página. El kit completo también incluye tres expositores para láminas, dos manteles y la nota sobre las fundas numeradas para las láminas. La existencia del archivo o un nombre de expositor coincidente no demuestra por sí solo que el documento entero sea correcto.
Por último, abre Visitor guide en Exhibitor Portal. La información pública de llegada debe seguir disponible. Solo has cambiado tus propios archivos y sesiones y has conservado el servicio, las cuentas y los datos de negocio. Las entregas finales son form.txt, findings.json y booth-kit.json en el espacio de trabajo. Las comprobaciones observan los hechos de inicio de sesión y descarga ya existentes y prueban el argumento guardado en un servicio independiente y desechable; no completan el trabajo que falte en el portal real.
Resumen
Comparaste espacios de trabajo realmente autenticados con respuestas de contraseña incorrecta, cuenta no disponible y error de servicio. Reprodujiste un falso positivo de Hydra, calibraste una condición reutilizable con muestras positivas y negativas y después verificaste la identidad asignada y recopilaste su kit completo mediante una sesión de cookies independiente. HTTP 200, una marca de ejecución correcta o un mensaje Welcome genérico no demuestran por sí solos que exista autenticación.



