Tags

Why do encrypted ZIPs exist but not encrypted TARs ? Anyway, I made a 100% super secure online backup service because I’m truely paranoid.

This challenge pretends to offer a “super secure online encrypted tar archive service”. You can:

1. Add flag to encrypted archive
2. Add your own file
3. Export the encrypted archive

The server claims your archive is encrypted, so how could we ever recover the flag ?

The trick is that the encryption (ChaCha20) does not hide the size of the compressed data.
And the compression algorithm leaks incredible information about the flag.

GlacierCTF2025 crypto/C.M.P.R.W

- 9 mins read

Some say that 75% of rock paper scissor matches end up in a tie. We suggest a more interesting one.

This challenge looks like a fun little game at first: you pick one of five categories, the computer picks one too, and you win/lose based on a fixed set of rules.

But the real goal is:

Beat the computer 200 times in a row.

And for the first 100 rounds, the game tells you how your choice compares to the computer’s (win, lose, or tie). No punishment. Just “free practice”.

Observations

The server seems to be forgetful :( Can you help it remember?

Files provided :

  • server.py
  • Pipfile.lock
  • Pipfile
  • Dockerfile

We’re given a network service. When we connect, we see something like:

Here is the flag: <big hex>
Note: This message was sent over an authenticated channel. Its tag is <tag1> with nonce <nonce1>.
I have forgotten my key :(
But here are 4 congnitive reminders of my key:
Note: This message was sent over an authenticated channel. Its tag is <tag2> with nonce <nonce2>.
[crc0, crc1, crc2, crc3]
Note: This message was sent over an authenticated channel. Its tag is <tag3> with nonce <nonce3>.
Please remind me of my key:
Part 1 (hex):

1. What the server actually does

Internally, the server:

PlatypwnCTF2025 web/Break The DOM

- 2 mins read

Observations

The challenge lets you download a Docker Compose file and a setup script.

By looking through all these files, you notice that it’s the DOMjudge web application, version 8.3.1.

So we start by analyzing the challenge setup script, which contains several interesting pieces of information:

  • The flag is stored in a .zip file and then uploaded via an API, along with a message suggesting it’s possible to retrieve this .zip before the DOMjudge contest starts.
  • The API is available at /api.
  • On the local instance, it’s possible to log in to the admin interface (which helps better understand how DOMjudge works).

TL;DR

After doing some research on DOMjudge’s GitHub in old issues with the “security” label, you can find an issue mentioning an access control problem.

BuckeyeCTF2025 misc/Minecraft

- 2 mins read

Redstone can do so many things.

Observations

The challenge comes as a Minecraft world to import. After importing it into my game, I launch the world.

Upon spawning, I find myself in front of a massive redstone circuit:

Screen

The redstone circuit is connected to a lamp that needs to be turned on.

The circuit is made up of 18 triangles, each powered by 8 levers:

Screen

The 8 levers remind me of the 8 bits in a byte.

BuckeyeCTF2025 pwn/Hexv

- 4 mins read

pwn/Hexv

BuckeyeCTF 2025 - Pwn Challenge


Quick summary

This is a pwn challenge. We don’t have the source code, only a network connection (nc / netcat) to a binary that exposes a few interactive commands.

The description says that the usual protections are enabled (stack canary, NX, possible ASLR/PIE, etc.). The goal is to exploit a buffer overflow to overwrite RIP with the address of the print_flag function (which is disclosed via the funcs command) in order to print the flag.