Flash CTF – Exposure

Solution

We’re handed one file, 20251023_141508.jpg, a phone snapshot of a tangle of cables under a desk. There’s nothing hidden in the pixels.

When a file looks empty, check its metadata. Phones pack a lot into every JPEG: camera model, timestamps, exposure, GPS. exiftool prints all of it:

$ exiftool 20251023_141508.jpg
...
Camera Model Name   : SM-S911B
Date/Time Original  : 2025:10:23 14:15:08
GPS Position        : 40 deg 0' 53.94" N, 105 deg 16' 13.97" W
...
User Comment        : SkillBit{...}

The flag’s in UserComment, a few lines past the GPS.

If you don’t have exiftool installed, the EXIF block isn’t compressed, so strings finds it too:

$ strings 20251023_141508.jpg | grep SkillBit

solve.sh

#!/usr/bin/env bash
# Exposure solve script
# The flag is stored in the JPEG's EXIF metadata (UserComment). Dump all tags
# and pull the flag out.
set -euo pipefail
IMG="${1:-../dist/20251023_141508.jpg}"

# Option A: let exiftool parse the metadata and grep for the flag.
exiftool "$IMG" | grep -oE 'SkillBit\{[^}]+\}'

# Option B (no exiftool): the EXIF block is uncompressed, so strings finds it too.
# strings "$IMG" | grep -oE 'SkillBit\{[^}]+\}'