<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>CTF Writeups</title>
    <link>https://writeups.ruohao.dev/</link>
    <description>Reproducible notes for CTF rooms and events.</description>
    <item>
      <title>APT438</title>
      <link>https://writeups.ruohao.dev/writeups/northsec-apt438/</link>
      <guid>https://writeups.ruohao.dev/writeups/northsec-apt438/</guid>
      <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
      <description>APT438 was an endpoint forensics challenge built around a Windows triage dataset. The task was to answer 21 platform questions about initial compromise, malware activity, exfiltrat</description>
    </item>
<item>
      <title>The Germinator</title>
      <link>https://writeups.ruohao.dev/writeups/northsec-germinator/</link>
      <guid>https://writeups.ruohao.dev/writeups/northsec-germinator/</guid>
      <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
      <description>The Germinator was a reverse-engineering challenge built around a stripped x86-64 Rust ELF named germinator. Running it locally produced a license failure, but the post-flag hint e</description>
    </item>
<item>
      <title>Address Book</title>
      <link>https://writeups.ruohao.dev/writeups/northsec-addressbook/</link>
      <guid>https://writeups.ruohao.dev/writeups/northsec-addressbook/</guid>
      <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
      <description>Address Book was a web challenge built around unsafe XML querying. The application let users search employee data, but three design bugs combined into full data extraction:</description>
    </item>
<item>
      <title>Drone License</title>
      <link>https://writeups.ruohao.dev/writeups/northsec-drone/</link>
      <guid>https://writeups.ruohao.dev/writeups/northsec-drone/</guid>
      <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
      <description>Drone License was a GitHub workflow and LLM-agent challenge with two flags. The first flag came from SQL injection through a support issue workflow. The second came from prompt-inj</description>
    </item>
<item>
      <title>Hello Sunshine</title>
      <link>https://writeups.ruohao.dev/writeups/northsec-hello-sunshine/</link>
      <guid>https://writeups.ruohao.dev/writeups/northsec-hello-sunshine/</guid>
      <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
      <description>Hello Sunshine was an MCP-over-HTTP challenge at open-sunshine.mcp.ctf. The public service exposed a runpython tool backed by Pyodide, but the sandbox had a JavaScript bridge into </description>
    </item>
<item>
      <title>Pesticide</title>
      <link>https://writeups.ruohao.dev/writeups/northsec-pesticide/</link>
      <guid>https://writeups.ruohao.dev/writeups/northsec-pesticide/</guid>
      <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
      <description>Pesticide was a web challenge against Monsatan&apos;s supplier portal at supply.monsatan.ctf. The application exposed a low-privilege login, a Rust/WASM frontend, and an admin-only API </description>
    </item>
<item>
      <title>Save The Trees</title>
      <link>https://writeups.ruohao.dev/writeups/northsec-savethetrees/</link>
      <guid>https://writeups.ruohao.dev/writeups/northsec-savethetrees/</guid>
      <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
      <description>Save The Trees was a multi-stage web challenge involving an announcement board and a separate print-spooler service. I recovered the first three flags through the board-side applic</description>
    </item>
<item>
      <title>Sprinklers</title>
      <link>https://writeups.ruohao.dev/writeups/northsec-sprinklers/</link>
      <guid>https://writeups.ruohao.dev/writeups/northsec-sprinklers/</guid>
      <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
      <description>Sprinklers was a SCADA-style challenge around a controller binary for Monsatan&apos;s sprinkler robots. The challenge had two solved objectives:</description>
    </item>
<item>
      <title>Escartem Gallery</title>
      <link>https://writeups.ruohao.dev/writeups/cyber-saguenay-escartem-gallery/</link>
      <guid>https://writeups.ruohao.dev/writeups/cyber-saguenay-escartem-gallery/</guid>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <description>The gallery challenge was a web encoding/reversal task. The flag was not hidden in image steganography; it was in an external data payload decoded by client-side JavaScript.</description>
    </item>
<item>
      <title>System</title>
      <link>https://writeups.ruohao.dev/writeups/cyber-saguenay-system/</link>
      <guid>https://writeups.ruohao.dev/writeups/cyber-saguenay-system/</guid>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <description>This SSH challenge initially looked like a restricted-shell escape and local privilege-escalation task. The solved path followed the temporary-storage hint and found a readable mar</description>
    </item>
<item>
      <title>Qui a implemente ca?</title>
      <link>https://writeups.ruohao.dev/writeups/cyber-saguenay-quia-implemente-ca/</link>
      <guid>https://writeups.ruohao.dev/writeups/cyber-saguenay-quia-implemente-ca/</guid>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <description>This reverse-engineering challenge used a Windows PE GUI binary with local license validation and a remote API. Reversing the validator produced a valid 25-character key, and repla</description>
    </item>
<item>
      <title>ChefVault: La recette secrete 1</title>
      <link>https://writeups.ruohao.dev/writeups/cyber-saguenay-chefvault/</link>
      <guid>https://writeups.ruohao.dev/writeups/cyber-saguenay-chefvault/</guid>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <description>ChefVault was a PHP web authentication challenge. The solve used the registration endpoint as a password-oracle to discover valid credentials, then logged in and read the authentic</description>
    </item>
<item>
      <title>Pas un PDF</title>
      <link>https://writeups.ruohao.dev/writeups/cyber-saguenay-pas-un-pdf/</link>
      <guid>https://writeups.ruohao.dev/writeups/cyber-saguenay-pas-un-pdf/</guid>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <description>The provided archive contained a fake executable that was actually an obfuscated PDF. The payload used a repeating 7-byte XOR key, and the final flag was recovered from rendered PD</description>
    </item>
<item>
      <title>Vault42</title>
      <link>https://writeups.ruohao.dev/writeups/cyber-saguenay-vault42/</link>
      <guid>https://writeups.ruohao.dev/writeups/cyber-saguenay-vault42/</guid>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <description>Vault42 was an Android APK reverse-engineering challenge. Static APK analysis exposed hardcoded secrets, exported activity behavior, and native-check literals, resulting in four re</description>
    </item>
<item>
      <title>Love at First Breach 2026 - Advanced Track: Task 5</title>
      <link>https://writeups.ruohao.dev/writeups/tryhackme-love-at-first-breach-2026-advanced-track-task-5/</link>
      <guid>https://writeups.ruohao.dev/writeups/tryhackme-love-at-first-breach-2026-advanced-track-task-5/</guid>
      <pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate>
      <description>This writeup covers Task 5 of the Love at First Breach 2026 Advanced Track. Sensitive secrets and flags are redacted.</description>
    </item>
<item>
      <title>Hidden Deep Into My Heart</title>
      <link>https://writeups.ruohao.dev/writeups/tryhackme-hidden-deep-into-my-heart/</link>
      <guid>https://writeups.ruohao.dev/writeups/tryhackme-hidden-deep-into-my-heart/</guid>
      <pubDate>Fri, 13 Feb 2026 00:00:00 GMT</pubDate>
      <description>This challenge is part of the Love at First Breach (2026) event on TryHackMe.</description>
    </item>
<item>
      <title>Valenfind</title>
      <link>https://writeups.ruohao.dev/writeups/tryhackme-valenfind/</link>
      <guid>https://writeups.ruohao.dev/writeups/tryhackme-valenfind/</guid>
      <pubDate>Fri, 13 Feb 2026 00:00:00 GMT</pubDate>
      <description>This challenge is part of the Love at First Breach (2026) event on TryHackMe.</description>
    </item>
<item>
      <title>Dogcat</title>
      <link>https://writeups.ruohao.dev/writeups/tryhackme-dogcat/</link>
      <guid>https://writeups.ruohao.dev/writeups/tryhackme-dogcat/</guid>
      <pubDate>Sat, 07 Feb 2026 00:00:00 GMT</pubDate>
      <description>nmap -sV -Pn -oN nmap.txt &lt;TARGETIP&gt;</description>
    </item>
<item>
      <title>Ultratech</title>
      <link>https://writeups.ruohao.dev/writeups/tryhackme-ultratech/</link>
      <guid>https://writeups.ruohao.dev/writeups/tryhackme-ultratech/</guid>
      <pubDate>Sat, 07 Feb 2026 00:00:00 GMT</pubDate>
      <description>nmap -sV -Pn -oN nmap.txt &lt;TARGETIP&gt; -p21,22,8081,31331 -sC</description>
    </item>
<item>
      <title>Wonderland</title>
      <link>https://writeups.ruohao.dev/writeups/tryhackme-wonderland/</link>
      <guid>https://writeups.ruohao.dev/writeups/tryhackme-wonderland/</guid>
      <pubDate>Sat, 07 Feb 2026 00:00:00 GMT</pubDate>
      <description>1. Web enum discovers /r/a/b/b/i/t/ and reveals credentials for alice.</description>
    </item>
  </channel>
</rss>