Guess Me is an authentication challenge that runs 5 rounds of an online protocol. Each round hides a randomly-permuted secret derived from the string m0leCon. The service accepts a hex nonce field that can contain multiple 16-byte nonces concatenated together, plus additional_data, ciphertext and a tag. A subtle combination of a custom PRF, a deterministic stream-cipher-like encryption and a buggy padding check yields a tag oracle that is exploitable to recover the server’s permutation quickly.
One More Bit was a crypto challenge worth 50 points. The subtitle gave the hint: āApproximate FHE was a mistake.ā
It deals with an approximate homomorphic encryption scheme (CKKS-like), involving scaling and noise, and a JSON API that lets you encrypt two messages, evaluate squares, read decrypted bits⦠and guess which message the oracle chose in each round.
TL;DR
We exploit internal floating-point representation: the server āquantizesā a value m into int(round(m * 2^50)), then keeps only the lower 64 bits (twoās complement mask).
Therefore, m and m + 2^14 produce exactly the same 64-bit pattern (since 2^14 Ć 2^50 = 2^64).
So we send (m0, m1) = (1.0, 1.0 + 2^14) to create two plaintexts that are bitwise indistinguishable ā except through the noise introduced by homomorphic operations (especially square).
We then measure bitwise āanomaliesā returned by /decrypt and deduce the correct bit.
As a backup, a second strategy uses symmetry (x, -x) then square. The flag is recovered.
magick was one of the first web challenges released during m0leconCTF 2025. It was a medium difficulty challenge, worth 50 points by the end of the competition.
The challenge involved exploiting an ImageMagick convert command injection vulnerability. By leveraging the -write flag and crafting a MIFF polyglot file with embedded PHP code in its comment field, we could bypass exiftool sanitization and achieve remote code execution to retrieve the flag.
We need to analyze a suspicious .wav audio file that contains a hidden message. The challenge title, “It says a lot when there is no music”, suggests that the solution might lie in the absence of sound, which points directly to analyzing the silent parts of the file, especially at the beginning and the end. The puzzle involves uncovering a hidden message by decoding a sequence of numbers derived from the audio data.