CTF Problems

Over the past few years, I've contributed to several CTFs, including PlaidCTF, PicoCTF, and a few others. This is a collection of most of my problems, along with source code and descriptions.
Yet Another Calculator App
PlaidCTF 2022
🔥🔥🔥
web
YACA is a simple calculator app. Type in a mathematical expression, and it will instantly generate the result. What's more, if you use variables in your expression you can adjust them at will to see how it affects the result. Designed to introduce players to EcmaScript modules, YACA also challenges them to get a better understanding of Chrome's internals.
Live Art
PicoCTF 2022
🔥🔥🔥🔥
web
Nothing's more fun than drawing for an audience! Live Art lets you stream your drawing to the world (or it did, before PeerJS suddenly died). Live Art presents a unique taste on React-based XSS, and makes players dig deep into how React's magic sauce actually works.
The Watness III
PlaidCTF 2021
🔥🔥
web
reversing
The Watness 3 is the final installment of the Watness Trilogy. In this problem, players are given a WebGL implementation of the Watness that they must work through and solve in order to get a flag. The catch? The whole game is a single GLSL shader including graphics, movement, and the puzzles themselves.
Wowza!
PlaidCTF 2021
🔥🔥🔥🔥
web
Wowza was a difficult web problem from PlaidCTF 2021. Players were tasked with using a search engine's site-management console to attack the search engine itself. The intended solution required exploiting a race condition in SQLite and a consistency bug in immutable.js.
Bithug
PicoCTF 2021
🔥🔥
web
Bithug is a simple clone of a popupular git server. It implements basic functionality for creating repos, pushing and pulling, setting up webhooks, and even sharing repos with other users. Players are tasked with exploiting this functionality to get a flag stored in a hidden repository.
PGUI
ASV CTF2
🔥🔥🔥
web
misc
Written for AppSec Village's CTF2, PGUI is a simple web interface for running Postgres queries against a live database. However, without credentials to access the database, all of your queries are aborted with no response. Is there any way to read from the database?
The Watness II
PlaidCTF 2020
🔥🔥🔥🔥
reversing
The second, and most involved of the Watness problems, this one was a complete de-make of the Witness in HyperCard, running on MacOS 9. The problem reimplemented a set of Witness puzzles using an XCMD written in Apple Pascal, that players have to reverse engineer to solve the problem.
Contrived Web Problem
PlaidCTF 2020
🔥🔥🔥🔥
web
Modeled after a simple micro-service web application, Contrived Web Problem made use of an FTP-based SSRF that allowed interfacing with the internal API in an unexpected manner.
MiniCTF
Standalone
web
reversing
misc
Originally run as an in-person workshop for students at Carnegie Mellon, MiniCTF is a collection of small CTF problems mostly focused on web exploitation, designed to introduce new players to the basic concepts.
Lambdash
PicoCTF 2019
🔥🔥🔥🔥
web
Lambdash is an online interpreter for a typed lambda calculus called System-F. In order to get the flag, players have to break out of the limited execution provided by the language and call an arbitrary function in the sandbox.
The .Wat ness
PlaidCTF 2019
🔥🔥🔥
web
reversing
The .wat ness was an implementation of puzzles from the Witness along with some custom rules that had been compiled to Web Assembly. In order to get the flag, players had to reverse engineer the game to learn how the rules worked.
Everland
PlaidCTF 2019
🔥🔥
misc
Everland was a little game where players had to fight an increasing number of enemies, culminating in a final boss that can kill with a single hit. Players have to survive to the end of the game and ultimately kill the final enemy to get the flag.
S-Exploitation
PlaidCTF 2018
🔥🔥🔥🔥🔥
web
reversing
S-Exploitation was a two-part problem that requires players to compromise an oauth site in order to bypass the CSP on the primary target.
Datastore
GoogleCTF 2017
🔥🔥
crypto
misc
Written during my internship at Google, this only partially-completed problem ended up being released and caused some major issues during the competition 🤷