Hintru ENES ← All labs

MesaNet Portal — Rail Broadcasts

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

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
solved
Step 1 Step 2 Step 3 Step 4 Step 5 Step 6 Step 7 Step 8
loot

Step 8 · Recover the flag from the bot-created announcement

Objective: Query the announcements list and find the entry published by `sysbot` containing the contents of the confidential note, then extract the flag.

Context: The bot has visited the rail viewer, executed the XSS payload using its own privileged session, fetched note 6, and published its contents as a new broadcast. That broadcast now lives in the announcements table under `created_by: "sysbot"`. Fetch the full announcements list and filter for entries you didn't create.

Progressive hints

Only reveal the ones you need. Claude tracks how many you used to calibrate the feedback.

Hint 1 — directional nudge

Send a `POST /gateway` to `/api/rail/announcements` and scroll through the response. Look for entries where `created_by` is neither `system` nor your own username.

Hint 2 — technique / vuln class

Filter the JSON response for `"created_by":"sysbot"`. The bot's broadcast will have a `message` field starting with `PWN_` followed by cookie data and the JSON-serialised note object.

Hint 3 — near solution

In Burp Repeater or browser dev tools, search the response body for `bug{`. The flag is inside the `body` field of the note JSON embedded in the `message` of the `sysbot` broadcast. You can also right-click the Repeater response → "Show response in browser" and use Ctrl+F to search for `bug{`.

Your attempt