Hintru Propina ENES ← Todos los labs

Bugforge MesaNet

EN hard CTF challenge Web Cache PoisoningXSSHeader InjectionStored XSSCSRFBot ExploitationExfiltration
Original

MesaNet is a Black Mesa Transit rail broadcast panel running on Bugforge's lab infrastructure. The application caches API responses and reflects a custom header value directly into HTML, creating a chained attack path: poison the cache with a script injected via a custom header, then trick a bot into viewing the poisoned page — causing it to exfiltrate its private notes (and the flag) to an attacker-controlled webhook.

0/7
resueltos
Paso 1 Paso 2 Paso 3 Paso 4 Paso 5 Paso 6 Paso 7
web

Paso 5 · Poison the cache with the XSS payload

Objetivo: Send the crafted X-Rail-Skin payload to /api/rail/display and confirm the response is stored in the cache (X-Cache: HIT), giving you a 60-second window of poisoned content.

Contexto: The /api/rail/display endpoint has a 60-second public cache (Cache-Control: public, max-age=60). When you send the malicious X-Rail-Skin header and the cache key matches, the poisoned response will be served to any subsequent visitor — including the automated bot — for up to 60 seconds.

Pistas progresivas

Revela solo las que necesites. Claude lleva la cuenta de cuántas usaste para calibrar la retroalimentación.

Pista 1 — empujón direccional

Send your XSS payload in the X-Rail-Skin header to /api/rail/display and inspect the X-Cache response header on the reply.

Pista 2 — técnica / clase de vuln

You are looking for the X-Cache header to change from MISS to HIT, confirming the server has cached your poisoned response. You may need to send the request twice — once to populate the cache, once to confirm the HIT.

Pista 3 — casi la solución

Send the GET request with your malicious X-Rail-Skin header twice in quick succession. On the second (or subsequent) response, verify X-Cache: HIT and X-Cache-Expires shows remaining TTL (e.g., 59 seconds). The HTML body should now contain your injected script.

Pregúntale al tutor

Chatea con un tutor anti-spoiler para este paso. Usa solo la especificación de este lab y empieza por la pista más pequeña que sirva.

Cuéntale qué probaste, dónde te atoraste, o pega la respuesta/error que estás viendo.

Tu intento

¿Encontraste algo para mejorar?

Puliendo la redacción, afinando una pista, agregando contexto que falta, corrigiendo un payload — tu versión queda separada de la original y otros aprendices pueden elegirla.

⚠ Reportar este lab

¿Te gusta Hintru? Buy me a coffee ☕ ☕