🎯 POV
A detailed write-up of the Misc challenge 'POV' from UlisseCTF - 2025
📊 Challenge Overview
Category Details Additional Info 🏆 Event UlisseCTF - 2025 Event Link 🔰 Category Misc 🎯 💎 Points 500 Out of 500 total ⭐ Difficulty 🟢 Easy Personal Rating: 2/10 👤 Author Filippo Nardon <@ufilme> Profile 🎮 Solves (At the time of flag submission) 0 (🩸 First Blood) solve rate 📅 Date 07-04-2025 UlisseCTF - 2025 🦾 Solved By mH4ck3r0n3 Team: aetruria
📝 Challenge Information
I recently purchased this monitor from faceb00c marketplace. It is displaying a static noise signal that appears to be frozen. Can you help me figure out what’s going on? Note: DOS is not required to complete the challenge. Website: http://pov.challs.ulisse.ovh:8888
🎯 Challenge Files & Infrastructure
Provided Files
1
Files: None
🔍 Initial Analysis
First Steps
Initially, the site appears as follows:
inspecting the page source, I found the
/api/stream
endpoint, but while analyzing the requests made, I found a strange header with afilename
field set toimage55.png
:refreshing the page, I noticed that the filename changed on the next request:
as we can see in this case it’s
image4.png
. The first thing I thought was to collect all the images since we’re told there are a total of59/60
images depending on whether the index starts from zero or not, and create a gif to generate the full “stream”. But this solution was not the right one. Let’s move on to the next phase.
🎯 Solution Path
Exploitation Steps
Initial setup
I then thought of performing an overlay of the images, since I noticed by refreshing that the arrangement of the black dots actually changed, so maybe by overlapping them they would form the flag.
Exploitation
To do this, I wrote a Python script, since it reminded me a lot of a challenge I had seen in the past. Once the script was executed and after collecting several frames, I formed the flag and got the first blood.
Flag capture
🛠️ Exploitation Process
Approach
The automatic exploit captures and saves the frames by making requests to the
/api/stream
endpoint, then using thePillow
library it saves the progress every 5 frames obtained and overlays them, forming the final flag once all frames have been collected. Meanwhile, every 5 frames it generates the image, which becomes clear by the 3rd or 4th iteration.
🚩 Flag Capture
FlagUlisseCTF{p3r51573nc3_0f_v1510n}
Proof of Execution
🔧 Tools Used
Tool Purpose Python Exploit
💡 Key Learnings
Skills Improved
- Binary Exploitation
- Reverse Engineering
- Web Exploitation
- Cryptography
- Forensics
- OSINT
- Miscellaneous
📚 References & Resources
Official Documentation
Learning Resources
📊 Final Statistics
Metric | Value | Notes |
---|---|---|
Time to Solve | 00:25 | From start to flag |
Global Ranking (At the time of flag submission) | 1/362 | Challenge ranking |
Points Earned | 500 | Team contribution |
Created: 07-04-2025 • Last Modified: 07-04-2025 Author: mH4ck3r0n3 • Team: aetruria