CTF Walkthroughs π©
Welcome to the repository for my personal Capture The Flag (CTF) walkthrough blog! This site serves as my digital notebook where I document my solutions and learnings from various CTF challenges.
β¨ Purpose
The main goal of this project is to:
- Reinforce Learning: Writing down the steps helps solidify understanding.
- Create a Personal Knowledge Base: Easily searchable notes for future reference.
- Share Knowledge (Potentially): Offer insights to others tackling similar challenges.
- Experiment: Play with a modern note-taking and publishing workflow.
π οΈ Technology Stack
This blog is built using a combination of tools that streamline the writing and publishing process:
- Obsidian: Used as the primary writing environment. Itβs a powerful, local-first Markdown knowledge base. All walkthroughs are written and organized as Markdown notes within an Obsidian vault.
- Quartz: A fast, open-source static site generator specifically designed to publish Obsidian notes as a website. It handles linking, backlinking, graph visualization, and more, converting the Markdown vault into a deployable static site.
- GitHub:
- Version Control: The Obsidian vault (or the relevant content part of it) and the Quartz configuration are stored here.
- Hosting: The static site generated by Quartz is hosted using GitHub Pages.
- Markdown: The lightweight markup language used for writing all content.
π Workflow
My typical workflow for adding a new CTF walkthrough looks like this:
- Solve: Participate in a CTF / Solve a challenge.
- Write: Create a new note in my dedicated Obsidian vault (usually within a
contentorwalkthroughsfolder). I write the entire walkthrough using Markdown, embedding images and code snippets as needed. I use Obsidianβs linking ([[wikilinks]]) to connect related concepts or challenges. - Frontmatter: Add necessary frontmatter (like
title,date,tags) to the top of the Markdown file for Quartz to process correctly. - Commit & Push: Commit the changes (new notes, updated notes, added images) in the vault/content folder to this GitHub repository.
git add . git commit -m "Add walkthrough for [CTF Name/Challenge Name]" git push origin main - Build & Deploy: Pushing to the
mainbranch automatically triggers a GitHub Action (configured via Quartz setup) that:- Checks out the repository.
- Uses Quartz to build the static website from the Markdown files.
- Deploys the generated static files (
publicfolder contents) to thegh-pagesbranch.
- Live: GitHub Pages serves the content from the
gh-pagesbranch, making the new walkthrough live on the blog!
π Live Site
You can view the live blog here: [Link to your live blog] (e.g., https://your-username.github.io/your-repo-name/)
(Note: It might take a minute or two for changes to appear live after pushing due to the GitHub Actions build and deployment process.)
π Writing Content (For My Reference)
- Create new
.mdfiles inside thecontentdirectory (or whichever folder Quartz is configured to read). - Use standard Markdown syntax.
- Embed images by placing them in an
assetsorimagesfolder and using Markdown image syntax (). - Use Obsidian
[[wikilinks]]for internal links. - Ensure necessary frontmatter is present (check
quartz.config.tsor documentation). Example:--- title: My Awesome CTF Walkthrough date: YYYY-MM-DD tags: - web - sqli - ctf_platform --- # My Awesome CTF Walkthrough Here's how I solved it...
π§ Setup & Configuration (For My Reference)
- Obsidian Vault: Local folder managed by Obsidian.
- Quartz Project: This repository contains the Quartz configuration files (
quartz.config.ts,quartz.layout.ts, etc.) and thecontentfolder (which might be the vault itself or a subfolder). - GitHub Repository: Remote storage and trigger for deployment.
- GitHub Pages: Configured in repository settings to serve from the
gh-pagesbranch (usually/ (root)directory).
π± Future Ideas (Optional)
- Improve styling/theming.
- Add search functionality (if not already enabled by default).
- Categorize walkthroughs more granularly.
This README provides a high-level overview. For detailed Quartz configuration, see the official Quartz documentation.