SecretPickle — GPN CTF 2026

A Pyodide client serializes requests with pickle obfuscated by a hardcoded XOR key, letting the server pickle.loads attacker data for unauthenticated root RCE, then hooking the live handler to capture the adminbot’s plaintext login password.

June 6, 2026 · 3 min · 501 words · Th3B0yWh0L1v3d

Secure Secretpickle — GPN CTF 2026

The hardened secretpickle runs pickle.loads in a write-only seccomp sandbox, but the adminbot action visits an attacker URL with no scheme check and returns a screenshot, so file:///flag.txt renders the flag into the image.

June 6, 2026 · 3 min · 460 words · Th3B0yWh0L1v3d

Simple Food Notifications — GPN CTF 2026

A Flask meal-notification SSRF whose is_global filter is defeated by abusing urllib3’s retry-driven DNS re-resolution — a global IP that hangs on port 80 (8.8.8.8) outlasts dnsmasq’s 2s cache, so the retry re-resolves to 127.0.0.1 and reaches the localhost-only /vip-meal.

June 6, 2026 · 9 min · 1852 words · Th3B0yWh0L1v3d

Spaetzle — GPN CTF 2026

An MD5-only oracle over arbitrary paths is turned into a full file disclosure using the error-based PHP filter-chain oracle to leak /flag byte-by-byte.

June 6, 2026 · 3 min · 487 words · Th3B0yWh0L1v3d

Tiny Web — GPN CTF 2026

A one-line Node server lets you inject a rel=stylesheet entry into the Link response header, which Firefox applies to the flag-bearing page, enabling CSS attribute-selector exfiltration of the cookie.

June 6, 2026 · 11 min · 2227 words · Th3B0yWh0L1v3d

Fancy Food Notifications — GPN CTF 2026

Chaining a weak RNG seed (258 possible HMAC keys), an SSRF token leak, a urlparse vs urllib3 parser differential, and a URL-userinfo Basic-auth override to forge a VIP JWT and reach /vip-meal as localhost.

June 5, 2026 · 3 min · 584 words · Th3B0yWh0L1v3d

Restaurant Builder — GPN CTF 2026

A FastAPI app builds Pydantic models from user-supplied field definitions, where each string value is eval()ed as a forward-reference annotation, yielding arbitrary code execution and flag exfiltration via the JSON schema.

June 5, 2026 · 2 min · 359 words · Th3B0yWh0L1v3d