$ file img.jpg
img.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, comment: "c3RlZ2hpZGU6Y0VGNmVuZHZjbVE9", baseline, precision 8, 640x640, components 3
$ file img.jpg
img.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, comment: "c3RlZ2hpZGU6Y0VGNmVuZHZjbVE9", baseline, precision 8, 640x640, components 3
$ file img.jpg
img.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, comment: "c3RlZ2hpZGU6Y0VGNmVuZHZjbVE9", baseline, precision 8, 640x640, components 3
import base64
cipher = "c3RlZ2hpZGU6Y0VGNmVuZHZjbVE9"
plain = base64.b64decode(cipher).decode()
print(plain) $ python3 decode.py
steghide:cEF6endvcmQ=
import base64
cipher = "c3RlZ2hpZGU6Y0VGNmVuZHZjbVE9"
plain = base64.b64decode(cipher).decode()
print(plain) $ python3 decode.py
steghide:cEF6endvcmQ=
import base64
cipher = "c3RlZ2hpZGU6Y0VGNmVuZHZjbVE9"
plain = base64.b64decode(cipher).decode()
print(plain) $ python3 decode.py
steghide:cEF6endvcmQ=
import base64
cipher = "cEF6endvcmQ="
plain = base64.b64decode(cipher).decode()
print(plain) $ python3 decode.py
pAzzword
import base64
cipher = "cEF6endvcmQ="
plain = base64.b64decode(cipher).decode()
print(plain) $ python3 decode.py
pAzzword
import base64
cipher = "cEF6endvcmQ="
plain = base64.b64decode(cipher).decode()
print(plain) $ python3 decode.py
pAzzword
$ steghide info img.jpg
"img.jpg": format: jpeg capacity: 4.0 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase: embedded file "flag.txt": size: 34.0 Byte encrypted: rijndael-128, cbc compressed: yes
$ steghide info img.jpg
"img.jpg": format: jpeg capacity: 4.0 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase: embedded file "flag.txt": size: 34.0 Byte encrypted: rijndael-128, cbc compressed: yes
$ steghide info img.jpg
"img.jpg": format: jpeg capacity: 4.0 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase: embedded file "flag.txt": size: 34.0 Byte encrypted: rijndael-128, cbc compressed: yes
$ steghide extract -sf img.jpg
Enter passphrase:
wrote extracted data to "flag.txt". picoCTF{h1dd3n_1m4g3_67479645}
$ steghide extract -sf img.jpg
Enter passphrase:
wrote extracted data to "flag.txt". picoCTF{h1dd3n_1m4g3_67479645}
$ steghide extract -sf img.jpg
Enter passphrase:
wrote extracted data to "flag.txt". picoCTF{h1dd3n_1m4g3_67479645}
# Wrong passphrase — data IS embedded, key is wrong
steghide: could not extract any data with that passphrase! # No data — steghide info returns nothing
steghide: could not extract any data with that passphrase!
# Wrong passphrase — data IS embedded, key is wrong
steghide: could not extract any data with that passphrase! # No data — steghide info returns nothing
steghide: could not extract any data with that passphrase!
# Wrong passphrase — data IS embedded, key is wrong
steghide: could not extract any data with that passphrase! # No data — steghide info returns nothing
steghide: could not extract any data with that passphrase!
$ stegseek suspicious.jpg /usr/share/wordlists/rockyou.txt
$ stegseek suspicious.jpg /usr/share/wordlists/rockyou.txt
$ stegseek suspicious.jpg /usr/share/wordlists/rockyou.txt
# 1. Static analysis first — read every field
file target.jpg # 2. Check for embedded data with blank passphrase
steghide info target.jpg
# (press Enter at the prompt) # 3. If data confirmed, extract
steghide extract -sf target.jpg
# (enter passphrase when prompted) # 4. If passphrase unknown, check metadata, strings, challenge text
strings target.jpg | grep -v "^.\{1\}$"
exiftool target.jpg # 5. Last resort: brute force with Stegseek
stegseek target.jpg /usr/share/wordlists/rockyou.txt
# 1. Static analysis first — read every field
file target.jpg # 2. Check for embedded data with blank passphrase
steghide info target.jpg
# (press Enter at the prompt) # 3. If data confirmed, extract
steghide extract -sf target.jpg
# (enter passphrase when prompted) # 4. If passphrase unknown, check metadata, strings, challenge text
strings target.jpg | grep -v "^.\{1\}$"
exiftool target.jpg # 5. Last resort: brute force with Stegseek
stegseek target.jpg /usr/share/wordlists/rockyou.txt
# 1. Static analysis first — read every field
file target.jpg # 2. Check for embedded data with blank passphrase
steghide info target.jpg
# (press Enter at the prompt) # 3. If data confirmed, extract
steghide extract -sf target.jpg
# (enter passphrase when prompted) # 4. If passphrase unknown, check metadata, strings, challenge text
strings target.jpg | grep -v "^.\{1\}$"
exiftool target.jpg # 5. Last resort: brute force with Stegseek
stegseek target.jpg /usr/share/wordlists/rockyou.txt