EOF{F0und_!t}Step 1: Fetch and Analyze HTML
curl -s https://cannon-ball-three.vercel.app/ > page.html
cat page.html | grep -i "EOF\|flag\|hidden"
Key Findings:
<!--RCnYi2VTt9yXtWnnmzOPL-->f00lish-stuff (opacity: 0.01)secret-stuff (opacity: 0.2)Step 2: Check for Hidden Elements
grep -E "opacity|display.*none|visibility.*hidden" page.html
Discovery: Multiple elements with very low opacity values designed to be nearly invisible.
Step 3: Download and Analyze JavaScript Files
# Find JavaScript bundles
curl -s https://cannon-ball-three.vercel.app/ | grep -o '_next/static/chunks/[^"]*\.js' | head -5
# Download main page JavaScript
curl -s https://cannon-ball-three.vercel.app/_next/static/chunks/app/page-3e3e016d861d1eb2.js > page.js
# Search for interesting strings
strings page.js | grep -i "EOF\|flag\|secret"
Findings:
/flag.zip/target_hit.mp3/secrets.txtStep 4: Download Hidden Files
# Download the hidden resources
curl -s https://cannon-ball-three.vercel.app/flag.zip > flag.zip
curl -s https://cannon-ball-three.vercel.app/target_hit.mp3 > target_hit.mp3
curl -s https://cannon-ball-three.vercel.app/secrets.txt > secrets.txt
# Check file types
file flag.zip target_hit.mp3 secrets.txt
Results: All three files contain base64-encoded data URIs!
Step 5: Decode Base64 Data
# Decode flag.zip content
cat flag.zip | cut -d',' -f2 | base64 -d
# Output: https://nothing-2-see-here.vercel.app/
🎯 Discovery: A hidden secondary website!
# Decode secrets.txt to get image
cat secrets.txt | cut -d',' -f2 | base64 -d > secrets.jpg
file secrets.jpg
# Output: JPEG image data
# Decode target_hit.mp3 to get another image
cat target_hit.mp3 | cut -d',' -f2 | base64 -d > target.png
file target.png
# Output: PNG image data
Step 6: Analyze the Hidden Site
# Fetch the hidden site
curl -s https://nothing-2-see-here.vercel.app/ > page2.html
# Check HTML comment
grep -o '<!--[^>]*-->' page2.html
# Output: <!--c1SDEePUGiYnO0EAUsgjk-->
Step 7: Extract Secrets Image and OCR
# Run OCR on secrets.jpg
tesseract secrets.jpg stdout
OCR Output:
HAVE YOU LOOKED AT EVERYTHING CLOSELY? SORRY, THAT WAS A STRANGE THING TO ASK
Hint Interpretation: Need to examine all resources more carefully!
Step 8: Use Zsteg on PNG
# Install zsteg (if not installed)
gem install zsteg
# Run zsteg on the target.png
zsteg target.png
🎉 SUCCESS! Flag found in LSB:
b1,r,lsb,xy .. text: "EOF{F0und_!t}"
b1,rgb,lsb,xy .. text: "EOF{F0und_!t}EOF{F0und_!t}"
b1,rgba,lsb,xy .. text: "EOF{F0und_!t}EOF{F0und_!t}EOF{F0und_!t}EOF{F0und_!t}"
Flag found in the Least Significant Bit (LSB) of the PNG image!
This challenge combined multiple techniques:
The challenge description said "something is wrong with this website":
The website appeared to be a physics-based cannon game, but:
curl - Download web resourcesgrep - Search for patternsstrings - Extract readable stringsbase64 - Decode base64-encoded datacut - Extract base64 from data URIsfile - Identify file typestesseract - OCR for reading image textzsteg - Critical: Extract LSB steganography from PNGexiftool - EXIF metadata examination# 1. Download and analyze main page
curl -s https://cannon-ball-three.vercel.app/ > page.html
# 2. Extract hidden resources
curl -s https://cannon-ball-three.vercel.app/flag.zip > flag.zip
curl -s https://cannon-ball-three.vercel.app/target_hit.mp3 > target_hit.mp3
curl -s https://cannon-ball-three.vercel.app/secrets.txt > secrets.txt
# 3. Decode flag.zip to find hidden URL
cat flag.zip | cut -d',' -f2 | base64 -d
# Output: https://nothing-2-see-here.vercel.app/
# 4. Decode target_hit.mp3 to get PNG image
cat target_hit.mp3 | cut -d',' -f2 | base64 -d > target.png
# 5. Run zsteg to extract flag from PNG
zsteg target.png
# Output: EOF{F0und_!t}
This web challenge perfectly demonstrated the importance of thorough reconnaissance, not trusting the obvious interface, checking all resources including hidden ones, and using the right steganography tools. The flag EOF{F0und_!t} celebrates the successful discovery after examining every element of both websites! 🎯