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.
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”.
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):
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).
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.