← all writeups
WebHuntress CTF 2026

Serialized Offender

"Your session is just a blob of misplaced trust. Reshape the bytes, sign nothing." That's the hint, and it's literal — the session is base64url'd JSON with no signature:

{"user":"analyst","role":"analyst"}

There's nothing to forge; you just flip role and re-encode. The only actual work is guessing the privileged string. admin and superadmin get rejected — the magic value is administrator (the formal spelling of the admin you start with).

{"user":"analyst","role":"administrator"}  →  base64url  →  POST /action-d34380

Server decodes it, believes the role verbatim, and returns serialized_role_trusted with the proof. A sibling instance used base64url (-_ instead of +/) — worth noting, though it didn't matter here since the JSON produced no + or /.