$ cat writeup.md…
$ cat writeup.md…
metactf
Task: a JPEG penguin image appeared to be a stego challenge, but normal metadata checks and outguess-style probing were misleading. Solution: interpret the Linux-themed hint as the GNU/Linux copypasta meme, use `GNU/Linux` as the passphrase, and extract the embedded payload with stegseek.
Original organizer description was not preserved locally.
Available hint:
Hint 1: Search up Linux (To make a duplicate + Spaghetti is a type of what?)
English summary: the task provides a JPEG image named Penguin_Steg.jpg. The goal is to identify the correct stego path, derive the passphrase from the hint, extract the hidden payload, and recover the flag.
The image was first treated as a standard JPEG stego target. Basic recon and extraction attempts did not immediately help:
strings, and appended-data checks were clean.stegdetect reported outguess(old)(***), but this turned out to be a false positive.outguess hit.The useful pivot came from identifying the picture itself. Penguin_Steg.jpg matches the well-known ccpenguin image associated with the history of Tux and Linux mascot lore. That made the hint much more meaningful:
copypastaThe most recognizable Linux copypasta is the GNU/Linux meme, so the correct passphrase is:
GNU/Linux
Once that interpretation was tried, extraction succeeded immediately.
Penguin_Steg.jpg as a normal JPEG stego challenge.stegdetect OutGuess result with caution and compare against clean reference images.ccpenguin / Tux-history penguin image.copy + pasta and connect it to the Linux GNU/Linux copypasta meme.GNU/Linux as the passphrase with stegseek.file and strings to recover the flag.Successful extraction:
docker run --rm -v "$PWD":/data rickdejager/stegseek --extract -sf /data/Penguin_Steg.jpg -p "GNU/Linux" -xf /data/gnu_linux_steg.bin -f -q file gnu_linux_steg.bin strings gnu_linux_steg.bin
Verification output contained the ASCII flag:
DawgCTF{REDACTED}
#!/usr/bin/env python3 from pathlib import Path import subprocess def main() -> None: image = Path("Penguin_Steg.jpg").resolve() output = Path("gnu_linux_steg.bin").resolve() subprocess.run( [ "docker", "run", "--rm", "-v", f"{image.parent}:/data", "rickdejager/stegseek", "--extract", "-sf", f"/data/{image.name}", "-p", "GNU/Linux", "-xf", f"/data/{output.name}", "-f", "-q", ], check=True, ) data = output.read_bytes() print("Extracted bytes:", len(data)) print(data.decode("ascii", errors="ignore")) if __name__ == "__main__": main()
cat /etc/motd
Liked this one?
Pro unlocks every complete writeup and expanded API access. $9/mo.
$ grep --similar