An Italian Penguin
An Italian Penguin
Platform: Metactf | Category: Steganography | Type: Challenge | Difficulty: Easy | OS: Linux | Author: D3v0o0Nu11 | Date: 2026-04-10 | Status: Solved Techniques: false_positive_elimination, hint_interpretation, passphrase_derivation, steghide_payload_extraction
Summary
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.
Recon
Port scan
nmap -p- -sV -sC <TARGET> --min-rate 1000 -Pn
| Port | Service | Version | Notes |
|---|---|---|---|
| <PORT> | <SVC> | <VER> | <notes> |
Enumeration highlights
- Event:
metactf| ID:20260410_metactf_an_italian_penguin - Tags: steghide, jpeg, stegseek, dawgctf, passphrase_stego, hint_based_recon, linux_meme
- Indicators: JPEG image with no useful EXIF or appended data, stegdetect reports outguess on both challenge and clean reference images, organizer hint combines Linux + copy + pasta, successful extraction depends on deriving a themed passphrase rather than brute forcing common wordlists
- Source:
20260410_metactf_an_italian_penguin.md
Foothold
Vulnerability / Misconfiguration
- False_positive_elimination
- Hint_interpretation
- Passphrase_derivation
- Steghide_payload_extraction
<command>
Exploitation
- See original writeup content for detailed exploitation.
Privilege Escalation
Enumeration
sudo -l find / -perm -4000 2>/dev/null getcap -r / 2>/dev/null cat /etc/crontab ps aux
Exploitation
- N/A for challenge-type writeup; see exploitation above.
- Flag obtained via challenge solve.
<command>
Flags
| Flag | Location | Value |
|---|---|---|
| flag | REDACTED |
Key Takeaways / Lessons
- false_positive_elimination
- hint_interpretation
- passphrase_derivation
- steghide_payload_extraction
- Tags: steghide, jpeg, stegseek, dawgctf, passphrase_stego, hint_based_recon, linux_meme
Original Writeup
<details><summary>Click to expand original content</summary>Description
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.
Analysis
The image was first treated as a standard JPEG stego target. Basic recon and extraction attempts did not immediately help:
- EXIF,
strings, and appended-data checks were clean. stegdetectreportedoutguess(old)(***), but this turned out to be a false positive.- Clean reference images from the same penguin image family produced the same misleading
outguesshit. - Multiple OutGuess candidate keys only produced garbage and wasted time.
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:
- duplicate →
copy - spaghetti is a type of →
pasta - Linux + copy + pasta → Linux copypasta
The most recognizable Linux copypasta is the GNU/Linux meme, so the correct passphrase is:
GNU/Linux
Once that interpretation was tried, extraction succeeded immediately.
Solution
- Inspect
Penguin_Steg.jpgas a normal JPEG stego challenge. - Discard metadata/appended-data paths because they are clean.
- Treat the
stegdetectOutGuess result with caution and compare against clean reference images. - Recognize the image as the classic
ccpenguin/ Tux-history penguin image. - Parse the hint as
copy + pastaand connect it to the Linux GNU/Linux copypasta meme. - Use
GNU/Linuxas the passphrase withstegseek. - Verify the extracted payload with
fileandstringsto 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()
</details>
Auto-tracked: saved to WriteUps; run
/xesor-reviseto fold lessons into XESXor_Methodology.md.
signed by XESXOR