Hintru Tip ENES ← All 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
solved
Step 1 Step 2 Step 3 Step 4 Step 5 Step 6 Step 7
post_exploitation

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

Objective: 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.

Context: 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.

Progressive hints

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

Hint 1 — directional nudge

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

Hint 2 — technique / vuln class

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.

Hint 3 — near solution

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.

Your attempt

Spotted something to improve?

Polish the wording, sharpen a hint, add missing context, fix a payload — your version stays separate from the original and other learners can choose it.

⚠ Report this lab

Enjoying Hintru? Buy me a coffee ☕ ☕