Contents

🎯 POV

A detailed write-up of the Misc challenge 'POV' from UlisseCTF - 2025

/images/UlisseCTF-2025/Misc/POV/challenge_presentation.png
Challenge Presentation

📊 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:

/images/UlisseCTF-2025/Misc/POV/site_presentation.png
Site Presentation

inspecting the page source, I found the /api/stream endpoint, but while analyzing the requests made, I found a strange header with a filename field set to image55.png:

/images/UlisseCTF-2025/Misc/POV/stream1.png
Stream 1

refreshing the page, I noticed that the filename changed on the next request:

/images/UlisseCTF-2025/Misc/POV/stream2.png
Stream 2

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 of 59/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

/images/UlisseCTF-2025/Misc/POV/manual_flag.png
Manual Flag

🛠️ Exploitation Process

Approach

The automatic exploit captures and saves the frames by making requests to the /api/stream endpoint, then using the Pillow 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

Flag

UlisseCTF{p3r51573nc3_0f_v1510n}

Proof of Execution

/images/UlisseCTF-2025/Misc/POV/automated_flag.png
Automated Flag
Screenshot of successful exploitation

🔧 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