Introducción
Una tienda importa imágenes de productos de un catálogo preparado. Tu navegador pide a una aplicación que obtenga una imagen; esa aplicación dispone de acceso de red que el comprador no tiene. Seguirás la solicitud real e inspeccionarás un registro interno inofensivo para comprender la falsificación de solicitudes del servidor (SSRF).
Usa únicamente las URL de entrenamiento suministradas. Las organizaciones y los datos internos son sintéticos. Basta con manejar una terminal: aquí se explican HTTP, los campos de URL, los roles de red y las redirecciones. Los contenedores tienen espacios de nombres de red separados y comparten el núcleo de una instancia.
Importar una imagen de producto normal
Selecciona la pestaña Image Importer en la interfaz del laboratorio para comenzar este paso.
En este paso, importarás una imagen real e identificarás el servidor que la obtuvo. Cambia a la pestaña Image Importer. Su formulario envía una URL a App, el servidor de la función de imágenes. Una URL es una dirección: http es el protocolo (esquema), catalog.test el nombre de host, 8000 el puerto de escucha y /leaf.png la ruta del recurso.
Mantén Image URL en http://catalog.test:8000/leaf.png e Import slot en normal. Pulsa Import image. La página Import result muestra el estado HTTP real y un objeto JSON, una respuesta formada por campos con nombre. Busca content_type: image/png y un hash, una huella de los bytes obtenidos. El campo body contiene los bytes codificados de la imagen; no necesitas editarlo ni decodificarlo.

Selecciona el enlace Back to Image Importer en esa misma pestaña (o usa el botón Atrás del navegador) y actualiza la página. Debe aparecer una imagen verde en Imported responses. Si no aparece, revisa la URL y el nombre de la ranura y vuelve a enviar.

Cambia a la pestaña Workstation, una terminal en el contenedor cliente. El programa preparado imagectl.py envía solicitudes a App; python3 ejecuta ese programa. show normal lee la importación existente sin volver a obtenerla:
Cambia a la pestaña Workstation antes de ejecutar el siguiente comando.
python3 imagectl.py show normal
Busca HTTP 200, session: learner-c08 y PNG image content. HTTP es un protocolo de solicitud/respuesta; 200 indica éxito. Lee ahora los registros auténticos de Catalog:
python3 imagectl.py requests
Cada registro contiene la dirección client y la path solicitada. Catalog vio la dirección de App en la red del catálogo, no Workstation ni tu navegador. App realizó la solicitud saliente. La dirección variable es evidencia del servicio, no un valor para memorizar. Cambia a la pestaña Topology para comparar las conexiones de red configuradas y la prueba en vivo de salud del consumidor interno.

Comparar la conectividad del cliente y del servidor
Selecciona la pestaña Workstation en la interfaz del laboratorio para comenzar este paso.
En este paso, recuperarás únicamente el estado del inventario interno preparado a través de App. Un servicio interno está en una red reservada a los componentes de la aplicación. Workstation pertenece a la red frontal; App también pertenece a la interna. localhost siempre significa el entorno que ejecuta el comando: el bucle local de Workstation no es el de App.
Prueba una solicitud directa desde Workstation. La herramienta muestra los fallos esperados sin detener la shell:
Cambia a la pestaña Workstation antes de ejecutar el siguiente comando.
python3 imagectl.py direct http://internal.test:8000/status
Espera UNREACHABLE from Workstation. Ese nombre no está disponible en el contenedor. Las redes también aíslan la dirección subyacente; no falta solo el nombre. Pide ahora a App que obtenga el mismo recurso. fetch realiza una importación y el último argumento nombra la ranura donde se guarda la respuesta:
python3 imagectl.py fetch http://internal.test:8000/status internal
Espera HTTP 200 y un cuerpo JSON con service: inventory, status: synthetic-ready y un training_id variable. Lee de nuevo la respuesta importada:
python3 imagectl.py show internal
El registro pertenece a learner-c08. Esto es SSRF: una entrada controlada por el cliente hace que el servidor use su propio acceso de red. Workstation no ha recibido ninguna conexión de red nueva. Si ves no import, repite con la ranura internal; solo importa el registro sintético de la máquina virtual actual.
Seguir la redirección del catálogo
Selecciona la pestaña Workstation en la interfaz del laboratorio para comenzar este paso.
En este paso, descubrirás por qué puede no bastar con revisar el primer destino. Una redirección es una respuesta HTTP que indica al cliente otra URL. La ruta /redirect de Catalog devuelve 302 con un Location hacia el mismo servicio de inventario sintético. La App vulnerable lo sigue automáticamente.
En la pestaña Workstation, importa esa ruta preparada en una ranura distinta:
Cambia a la pestaña Workstation antes de ejecutar el siguiente comando.
python3 imagectl.py fetch http://catalog.test:8000/redirect redirect
El campo url indica Catalog, pero final_url indica Internal. El cuerpo es el estado del inventario sintético actual, no una imagen. Inspecciona la respuesta guardada y el registro de Catalog:
python3 imagectl.py show redirect
python3 imagectl.py requests
Catalog registró /redirect; después App usó su otra red para acceder a Internal. Un host inicial fiable no convierte en fiable el siguiente destino. El próximo laboratorio empieza de forma independiente y corrige las decisiones sobre destinos y redirecciones. Este ejercicio controlado no prueba cambios DNS hostiles, fuentes arbitrarias de imágenes de Internet ni codificaciones alternativas de direcciones.
Resumen
Importaste una imagen auténtica, comparaste la conectividad del cliente y del servidor e inspeccionaste una respuesta redirigida real. Los datos internos eran sintéticos; las solicitudes de red fueron reales.



