Machine Learnding
metactf
Task: the mirrored challenge repo exposes only a Google Drive link to a zipped local language model derived from Qwen2.5-1.5B. Solution: recover the archive, confirm it is a modified local checkpoint rather than an untouched base model, then load it with Transformers and ask directly for the flag.
$ ls tags/ techniques/
Machine Learnding — MetaCTF
Description
The mirrored challenge directory only contained
gdrivelink.txt, which pointed to a Google Drive archive namedsilly_fella.zip.
English summary: the real challenge artifact was not stored in the public repository. Instead, the repo only pointed to a downloadable archive containing a full local Hugging Face model directory, and the solve path was to inspect and query that model directly.
Analysis
The first clue was the public source tree. The GitHub directory for Machine Learnding contained only gdrivelink.txt, so normal source review was impossible. That immediately suggested the real payload lived elsewhere and had to be recovered from the external archive.
After downloading and extracting silly_fella.zip, the archive expanded into tasks/metactf/Machine Learnding/merged_qwen_model/ and contained a standard local model layout:
config.jsongeneration_config.jsonmodel.safetensorstokenizer_config.jsonspecial_tokens_map.jsonadded_tokens.jsonvocab.jsonmerges.txttokenizer.json
This is the exact kind of directory expected by transformers for offline loading, so the challenge was very likely about interrogating a local LLM rather than exploiting a remote service.
The next question was whether this was just a stock checkpoint or a modified model with hidden behavior. Comparing metadata and sampled tensors against the official Qwen/Qwen2.5-1.5B checkpoint showed the challenge model was related to the base Qwen model but not identical:
- configuration and tokenizer style matched the base
Qwen2.5-1.5Bfamily - the challenge weights were repacked as FP16, while the official Hugging Face file uses BF16
- early embedding weights matched after casting the official BF16 tensors to FP16
- later sampled tensors differed, which shows the model was actually modified or fine-tuned
That matters because it explains why direct prompting can reveal task-specific hidden content even though the model still looks like ordinary Qwen infrastructure.
Solution
1. Recover the real artifact
...
Permission denied (requires auth)
Sign in to read this free writeup
This writeup is free — just sign in with GitHub to read it.
$ssh [email protected]