EuroCTF Final: A Sanitized Public Technical Writeup
KENNEDY A. — Cybersecurity Analyst
Author: KENNEDY A.
Event: SANS Skills Quest EuroCTF Final
Representation: Germany
Result: 4,780 points, 100 percent completion, 29th position in Europe
Classification: Sanitized public edition
Report date: June 12, 2026
Introduction
I recently completed the SANS Skills Quest EuroCTF Final, representing Germany and finishing with 4,780 points, 100 percent completion, and 29th position in Europe.
This article is a sanitized public writeup of that experience. It does not include flags, credentials, target identifiers, live endpoints, exact payloads, challenge URLs, or copy-paste attack commands. My goal is to share the methodology, technical themes, attack-chain thinking, and defensive lessons from the event without exposing sensitive challenge material or reducing the integrity of the platform.
The final covered a wide range of security domains, including network security, web application exploitation, digital forensics, cryptography, binary analysis, cloud security, incident response, cyber threat intelligence, and AI security. What stood out most was not one single advanced technique, but the way familiar weaknesses combined into realistic attack paths.
What the Final Tested
The EuroCTF Final covered 43 challenge categories across both foundational and advanced areas of cybersecurity. I worked through each category by following a consistent process: establish context, enumerate the surface, validate assumptions, recover only authorized artifacts, apply the relevant technique, and document the defensive lesson.
The challenge areas included packet crafting, PCAP analysis, Zeek log review, DNS enumeration, USB HID forensics, SQL injection, GraphQL introspection, WAF bypass reasoning, SSRF, deserialization risk, ECB analysis, Windows persistence, Linux compromise reconstruction, cloud metadata exposure, AI prompt injection, and social-channel C2 steganography.
The breadth of the final made it clear that strong security work depends on pattern recognition across domains. A weakness in a web application, a misconfigured cloud service, a readable secret, or a permissive forwarding path may look isolated at first. In practice, those issues often become much more serious when they align.
My Methodology
I approached the final with an enumeration-first mindset. Before attempting exploitation, I focused on understanding the environment, the available interfaces, and the constraints of each challenge.
The process generally followed five phases.
First, I established context. I identified the user context, operating system details, privileges, routes, available tools, exposed services, and any challenge-provided documentation.
Second, I performed surface discovery. Depending on the category, this included web inspection, DNS lookups, packet analysis, log review, API exploration, file analysis, binary inspection, or cloud service enumeration.
Third, I recovered credentials or keys only from authorized challenge artifacts. These included provided files, intentionally exposed challenge materials, logs, configuration data, or other in-scope sources. In this public writeup, all such values are removed.
Fourth, I matched each technique to a confirmed weakness. I avoided broad or destructive behavior and focused on validating specific assumptions before chaining the next step.
Finally, I documented the technical path and the defensive lesson. The version shared here keeps the methodology and lessons while removing operational detail.
Key Technical Themes
Several recurring themes appeared throughout the final.
The first was unsafe command execution. In multiple areas, user-controlled input reached execution paths where insufficient validation could lead to command injection. The defensive lesson is clear: avoid constructing shell commands from user input, use structured subprocess APIs, and apply strict allowlist validation.
The second was readable credential material. Secrets appeared in files, environment variables, local artifacts, or repository history. This remains one of the most common enablers of lateral movement. Secrets should be stored in managed vaults with strong access control, rotation, and audit logging.
The third was client-side trust. Some flows depended on values supplied or modified by the client. That pattern is fragile. Authorization state and security decisions must be enforced server-side.
The fourth was weak segmentation. SSH forwarding and protocol bridging showed how management channels can create unintended access paths across segmented networks. Segmentation is only effective when forwarding, egress, and destination controls are enforced.
The fifth was unsafe serialization and cloud metadata exposure. Deserialization of untrusted data and server-side fetches that can reach metadata services can quickly become critical in production environments.
The sixth was AI secret-in-context design. When secrets are embedded directly into model context, prompt manipulation can expose them. Secrets should live outside the model and be accessed only through properly authorized external systems.
Selected Attack Chain Lessons
One of the most useful parts of the final was seeing how smaller issues combined into larger chains.
In the webmail chain, open relay behavior, client-side form handling, and reflected script execution aligned into a single risk surface. The defensive lesson is that email submission controls, output encoding, browser-based rendering, and client-side trust boundaries must be treated together.
In the SSH pivoting chain, a recovered key enabled an initial tunnel, additional exposed secrets enabled deeper access, and protocol bridging turned a narrow allowed path into access to a protected internal service. The defensive lesson is that segmentation fails when readable secrets, forwarding, and weak egress controls are allowed to align.
In the cloud SSRF chain, a server-side fetch feature accepted user-controlled input and could reach resources available from the application host, including metadata services. The defensive lesson is to enforce strict destination allowlists, block link-local metadata ranges where possible, require IMDSv2, and apply least privilege to instance roles.
In the AI challenge path, the main issue was not clever prompting alone. The deeper design flaw was placing protected secrets inside model context. A refusal layer is not a substitute for external authorization.
Defensive Recommendations
The strongest defensive lessons from the final are practical and repeatable.
Move credentials, private keys, API tokens, and session secrets into a managed vault. Avoid storing sensitive values in environment variables, profile scripts, home directories, or repository history.
Disable SSH forwarding for non-administrative users unless there is a documented need. Apply egress filtering between internal segments and monitor for local forwards, dynamic forwards, netcat, and socat.
Use context-aware output encoding in web applications. Keep authorization state server-side. Replace unauthenticated encrypted state with authenticated encryption and server-side validation.
For cloud environments, enforce IMDSv2, restrict instance role permissions, block metadata paths from application containers where possible, and review every feature that fetches user-supplied URLs.
For email systems, require authenticated submission, restrict sender domains, and enforce SPF, DKIM, and DMARC. Internal HTML mail rendering should be treated as an application attack surface.
For detection and response, centralize authentication, process, network, file, and proxy telemetry. Preserve volatile state before terminating suspicious processes.
For AI-assisted access control, do not place secrets directly in prompts. Use external policy checks, scoped retrieval, structured tool access, and independent authorization decisions.
Portfolio Reflection
This final was a strong test of full-spectrum security problem solving. The value was not only in reaching 100 percent completion, but in identifying recurring failure patterns across unrelated systems and translating those patterns into defensive controls.
The most important lesson is that high-impact attacks often come from ordinary weaknesses chained together. Exposed secrets, weak server-side validation, permissive forwarding, unsafe serialization, cloud metadata reachability, and client-side trust can each look manageable in isolation. When combined, they become serious.
For defenders, the answer is not to treat each issue as a one-off finding. The better approach is to address the underlying patterns: trust boundaries, secret hygiene, egress discipline, input validation, authenticated state, and telemetry coverage.
Conclusion
The SANS Skills Quest EuroCTF Final confirmed that methodical security work scales across unfamiliar systems. My process was consistent throughout the event: establish context, enumerate the available surface, validate each assumption, recover only authorized artifacts, chain access carefully, and document both the technical path and the defensive lesson.
This sanitized public writeup is intended to share the learning value of the final while keeping sensitive material out of public view.
Report prepared by KENNEDY A. (R00tS3c), EuroCTF Final, June 2026

4 reactions · 1 comments
Comments
Laurent H.: 🫡👏👏👏 congrats !!