- TLDR - where do I start
- What is this?
- Cool, where do I sign up?
- My
git
workshop ⚒ - Prerequisites
- The game server 🔨
- Rules
- Cool, so where do I begin?
- Hall of Fame 🏆
- The challenge is open source
TLDR - where do I start
Click right here to start. Good luck!
What is this?
A Capture-The-Flag challenge (what’s that?), aimed at intermediate git
users, that revolves around git
. You advance in the challenge by using git
commands to get the flag that unlocks the next stage.
Cool, where do I sign up?
🈚 The challenge is totally free and open-source! No signup, payment, or bla-bla required. I do recommend contacting me if you plan to try the challenge.
My git
workshop ⚒
This CTF is a part of a git
workshop I’ve conducted multiple times. Some information about the workshop:
- ⌚ Takes around 3 hours.
- 📦 Is comprised of:
- 👨🏫 An hour-long active lecture on
git
internals. The lecture focuses on understanding HOW git works. The goal of the session is to give participantes the self efficacy to solve problems and use advanced features. - 🚩 The challenge itself, with live support from me while participantes are solving the challenge.
- 👨🏫 An hour-long active lecture on
- 📹 Can be conducted on-site or remote with Video Conferencing.
- 🌐 Can be conducted in English or Hebrew.
- 👩🎓👨🎓 Works well with up to 10 participates at a time.
If you want the workshop for your organization, contact me and let’s set it up 🤙
Prerequisites
Knowledge
- Basic
git
knowledge.- If you’re a little rusty/unsure, take a look at Git for humans.
- Basic understanding of
Python
- just need to be able to read it.
Installations
All you need to play the challenge is:
- A web browser, like Chrome.
- An SSH client.
- A terminal. It’s recommended to get a terminal that knows how to render unicode characters correctly - the challenge has some and without one you’ll want to (╯°□°)╯︵ ┻━┻)
You probably have all three installed on your machine already.
Unsure about which terminal to use?
- 🪟 If you’re on Windows, Windows Terminal , PuTTY and MobaXTerm are good alternatives that support Unicode.
- 🐧 If you’re on Linux, most shells/terminals work with Unicode pretty well. The built-in Ubuntu terminal (Gnome) works. Kitty works as well.
If you want to check if your shell’s support for Unicode, try to curl
or
wget
a file that has unicode, and see what it prints. For example:
wget -O - http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt
This should print something that looks like this towards the end:
Runes:
ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛏ ᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ ᚹᛁᚦ ᚦᚪ ᚹᛖᛥᚫ
(Old English, which transcribed into Latin reads 'He cwaeth that he
bude thaem lande northweardum with tha Westsae.' and means 'He said
that he lived in the northern land near the Western Sea.')
Braille:
⡌⠁⠧⠑ ⠼⠁⠒ ⡍⠜⠇⠑⠹⠰⠎ ⡣⠕⠌
⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠙⠑⠁⠙⠒ ⠞⠕ ⠃⠑⠛⠔ ⠺⠊⠹⠲ ⡹⠻⠑ ⠊⠎ ⠝⠕ ⠙⠳⠃⠞
⠱⠁⠞⠑⠧⠻ ⠁⠃⠳⠞ ⠹⠁⠞⠲ ⡹⠑ ⠗⠑⠛⠊⠌⠻ ⠕⠋ ⠙⠊⠎ ⠃⠥⠗⠊⠁⠇ ⠺⠁⠎
⠎⠊⠛⠝⠫ ⠃⠹ ⠹⠑ ⠊⠇⠻⠛⠹⠍⠁⠝⠂ ⠹⠑ ⠊⠇⠻⠅⠂ ⠹⠑ ⠥⠝⠙⠻⠞⠁⠅⠻⠂
⠁⠝⠙ ⠹⠑ ⠡⠊⠑⠋ ⠍⠳⠗⠝⠻⠲ ⡎⠊⠗⠕⠕⠛⠑ ⠎⠊⠛⠝⠫ ⠊⠞⠲ ⡁⠝⠙
⡎⠊⠗⠕⠕⠛⠑⠰⠎ ⠝⠁⠍⠑ ⠺⠁⠎ ⠛⠕⠕⠙ ⠥⠏⠕⠝ ⠰⡡⠁⠝⠛⠑⠂ ⠋⠕⠗ ⠁⠝⠹⠹⠔⠛ ⠙⠑
⠡⠕⠎⠑ ⠞⠕ ⠏⠥⠞ ⠙⠊⠎ ⠙⠁⠝⠙ ⠞⠕⠲
⡕⠇⠙ ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲
⡍⠔⠙⠖ ⡊ ⠙⠕⠝⠰⠞ ⠍⠑⠁⠝ ⠞⠕ ⠎⠁⠹ ⠹⠁⠞ ⡊ ⠅⠝⠪⠂ ⠕⠋ ⠍⠹
⠪⠝ ⠅⠝⠪⠇⠫⠛⠑⠂ ⠱⠁⠞ ⠹⠻⠑ ⠊⠎ ⠏⠜⠞⠊⠊⠥⠇⠜⠇⠹ ⠙⠑⠁⠙ ⠁⠃⠳⠞
⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲ ⡊ ⠍⠊⠣⠞ ⠙⠁⠧⠑ ⠃⠑⠲ ⠔⠊⠇⠔⠫⠂ ⠍⠹⠎⠑⠇⠋⠂ ⠞⠕
⠗⠑⠛⠜⠙ ⠁ ⠊⠕⠋⠋⠔⠤⠝⠁⠊⠇ ⠁⠎ ⠹⠑ ⠙⠑⠁⠙⠑⠌ ⠏⠊⠑⠊⠑ ⠕⠋ ⠊⠗⠕⠝⠍⠕⠝⠛⠻⠹
⠔ ⠹⠑ ⠞⠗⠁⠙⠑⠲ ⡃⠥⠞ ⠹⠑ ⠺⠊⠎⠙⠕⠍ ⠕⠋ ⠳⠗ ⠁⠝⠊⠑⠌⠕⠗⠎
⠊⠎ ⠔ ⠹⠑ ⠎⠊⠍⠊⠇⠑⠆ ⠁⠝⠙ ⠍⠹ ⠥⠝⠙⠁⠇⠇⠪⠫ ⠙⠁⠝⠙⠎
⠩⠁⠇⠇ ⠝⠕⠞ ⠙⠊⠌⠥⠗⠃ ⠊⠞⠂ ⠕⠗ ⠹⠑ ⡊⠳⠝⠞⠗⠹⠰⠎ ⠙⠕⠝⠑ ⠋⠕⠗⠲ ⡹⠳
⠺⠊⠇⠇ ⠹⠻⠑⠋⠕⠗⠑ ⠏⠻⠍⠊⠞ ⠍⠑ ⠞⠕ ⠗⠑⠏⠑⠁⠞⠂ ⠑⠍⠏⠙⠁⠞⠊⠊⠁⠇⠇⠹⠂ ⠹⠁⠞
⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲
(The first couple of paragraphs of "A Christmas Carol" by Dickens)
Compact font selection example text:
ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789
abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ
–—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвгд
∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა
Greetings in various languages:
Hello world, Καλημέρα κόσμε, コンニチハ
Box drawing alignment tests: █
▉
╔══╦══╗ ┌──┬──┐ ╭──┬──╮ ╭──┬──╮ ┏━━┳━━┓ ┎┒┏┑ ╷ ╻ ┏┯┓ ┌┰┐ ▊ ╱╲╱╲╳╳╳
║┌─╨─┐║ │╔═╧═╗│ │╒═╪═╕│ │╓─╁─╖│ ┃┌─╂─┐┃ ┗╃╄┙ ╶┼╴╺╋╸┠┼┨ ┝╋┥ ▋ ╲╱╲╱╳╳╳
║│╲ ╱│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╿ │┃ ┍╅╆┓ ╵ ╹ ┗┷┛ └┸┘ ▌ ╱╲╱╲╳╳╳
╠╡ ╳ ╞╣ ├╢ ╟┤ ├┼─┼─┼┤ ├╫─╂─╫┤ ┣┿╾┼╼┿┫ ┕┛┖┚ ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳
║│╱ ╲│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╽ │┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▎
║└─╥─┘║ │╚═╤═╝│ │╘═╪═╛│ │╙─╀─╜│ ┃└─╂─┘┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▏
╚══╩══╝ └──┴──┘ ╰──┴──╯ ╰──┴──╯ ┗━━┻━━┛ ▗▄▖▛▀▜ └╌╌┘ ╎ ┗╍╍┛ ┋ ▁▂▃▄▅▆▇█
▝▀▘▙▄▟
The game server 🔨
Here’s what you should expect to be installed on the CTF server you’re going to log in to.
- git 😺
zsh
as the default shell. If you’re used tobash
- don’t worry, it’s very similar.- oh-my-zsh with git plugin.
- Some useful aliases (see the full list here):
gst
🔛git status
gco
🔛git checkout
gaa
🔛git add --all
gcmsg
🔛git commit -m
gp
🔛git push
- Some useful aliases (see the full list here):
- fzf with default
zsh
bindings.Ctrl
+R
for fuzzy history matching.Ctrl
+T
for fuzzy file finding.
- All your favorite text editors ✍
vim
is configured as the default editor. You can change this by runninggit config --global core.editor "nano"
.emacs
.nano
.
Everything else you need to solve the CTF is installed on the machine: no need for any other external tools.
Rules
These rules are 100% based on the honor system 🤝🏽
- Have fun 😃 we’re all here to learn.
- Don’t look at any of the open source code that builds the CTF. THIS WILL RUIN THE CHALLENGE FOR YOU.
- This challenge will not require brute-forcing to solve - the solution, once you got it, should be clear.
- You are most welcome to post write-ups and solutions - I 100% support you in doing so. Please mark the write-up clearly with a spoiler warning and try to avoid posting the actual flags (you can check out one of my writeups as an example).
- If you’re stuck and you need help, feel free to contact me! There’s no point in getting frustrated about this challenge - it should be fun and educational, and not too hard.
Cool, so where do I begin?
Hall of Fame 🏆
Read here to get a list of everyone who’s completed the challenge!
The challenge is open source
The challenge is open-source and is licensed under Creative Commons Attribution 4.0 International.
You can read about how the challenge was built in my development log blog post series. The challenge is made up of two (main) repositories:
- ShayNehmad/make-git-better-2 contains all the code required to build the challenge, the level checkers, the web content and the tests.
- ShayNehmad/make-git-better-levels contains the repo the players will clone and play against in the actual game.
If you want to contribute new levels you can refer to the README to get started. I recommend you open your own fork of the two repositores and talk to me about your plans before you start working.