Hintru Propina ENES ← Todos los labs

MesaNet Portal — Rail Broadcasts

EN hard CTF challenge Stored XSSXSS botCSRFconfused deputyinnerHTML sinkheadless browsersession hijackAPI abuse
Original

The MesaNet Portal hosts a "Rail Broadcasts" application accessible through a JSON gateway API. A low-privilege operator account can interact with several broadcast endpoints, but a confidential note owned by a privileged automated user sits just out of reach. The challenge requires chaining the broadcast creation pipeline with the automated oversight system to escalate access without ever touching the privileged session directly.

0/8
resueltos
Paso 1 Paso 2 Paso 3 Paso 4 Paso 5 Paso 6 Paso 7 Paso 8
enumeration

Paso 3 · Understand the oversight bot

Objetivo: Determine what the `/api/rail/review` endpoint does, which user triggers it, and how that user interacts with the broadcast viewer.

Contexto: You now know there is a note you can't read and an endpoint called `/api/rail/review` that you haven't tested yet. Send a review request and observe the response carefully — it describes an 'Automated Oversight System'. Think about what that system does and whose session it uses.

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 a POST to `/api/rail/review` via the gateway with `data: {"view": "current"}`. Read the response message. Then look at what URL pattern the bot would visit based on that `view` parameter.

Pista 2 — técnica / clase de vuln

The response confirms that a headless browser bot queues up to visit `/apps/rail?view=<value>`. This bot runs with its own privileged session (user `sysbot`, user id `4`). Whatever page it renders, it does so as `sysbot` — the same user who owns note 6.

Pista 3 — casi la solución

The bot opens `/apps/rail?view=display` (or `view=current`). The page JS then calls `fetch('/api/rail/' + view)`, gets `{html: ...}`, and writes `data.html` directly into `document.getElementById('broadcast-content').innerHTML`. If you control what's in `data.html`, you control what runs in the bot's browser.

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