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
content
orwalkthroughs
folder). 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
main
branch 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 (
public
folder contents) to thegh-pages
branch.
- Live: GitHub Pages serves the content from the
gh-pages
branch, 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
.md
files inside thecontent
directory (or whichever folder Quartz is configured to read). - Use standard Markdown syntax.
- Embed images by placing them in an
assets
orimages
folder and using Markdown image syntax (
). - Use Obsidian
[[wikilinks]]
for internal links. - Ensure necessary frontmatter is present (check
quartz.config.ts
or 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 thecontent
folder (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-pages
branch (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.