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
post_exploitation

Paso 7 · Execute the full attack chain and capture the flag

Objetivo: Within the 60-second cache window, redirect the bot to the poisoned /api/rail/display page so it executes your XSS payload, fetches its own notes from /api/notes/lists via /gateway, and exfiltrates the content — including the flag — to your webhook.

Contexto: You have: (1) a poisoned cache entry at /api/rail/display that will serve your XSS for up to 60 seconds, (2) a webhook URL ready to receive exfiltrated data, and (3) knowledge that changing 'view':'current' to 'view':'display' in the submission request directs the bot to that page. The attack must be executed within the cache TTL window. Set up your webhook listener BEFORE sending the submission.

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

Timing matters — you need to poison the cache first, then immediately redirect the bot to the poisoned page before the 60-second cache expires.

Pista 2 — técnica / clase de vuln

Modify the 'Submit for Oversight Review' POST body to change the 'view' value so the bot loads the /api/rail/display endpoint. The bot will execute the cached XSS, which will fetch /api/notes/lists on the bot's behalf and send the result to your webhook.

Pista 3 — casi la solución

Step 1: Send the poisoned GET /api/rail/display with your X-Rail-Skin payload and confirm X-Cache: HIT. Step 2: Immediately send the modified POST to /gateway with 'view':'display'. Step 3: Watch your webhook for an incoming request containing the base64-encoded notes. Decode the base64 to reveal the flag.

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 ☕ ☕