Contents

🌐 Lucky Flag

A detailed write-up of the Web challenge 'Lucky Flag' from LaCTF - 2025

/images/LaCTF-2025/Lucky-Flag/challenge_presentation.png
Challenge Presentation

📊 Challenge Overview

Category Details Additional Info
🏆 Event LaCTF - 2025 Event Link
🔰 Category Web 🌐
💎 Points 500 Out of 500 total
⭐ Difficulty 🟢 Easy Personal Rating: 1/10
👤 Author r2uwu2 Profile
🎮 Solves (At the time of flag submission) 531 solve rate
📅 Date 08-02-2025 LaCTF - 2025
🦾 Solved By Azan Shahid Team: QnQSec

📝 Challenge Information

Just click the flag :)
lucky-flag.chall.lac.tf

🎯 Challenge Files & Infrastructure

Provided Files

1
Files: None

🔍 Initial Analysis

First Steps

Initially, the website appears as follows:

/images/LaCTF-2025/Lucky-Flag/site_presentation.png
Site Presentation

The first thing I did was explore the source page, and I found a script called main.js:

/images/LaCTF-2025/Lucky-Flag/js_source.png
Js Source

As we can see, this is where the flag generation code resides, and it appears to be encrypted using an XOR with the character 0x62. As we know, XOR is reversible, so let’s jump straight into the exploitation.

🔬 Vulnerability Analysis

Potential Vulnerabilities

  • (KPA) Known Plaintext Attack

🎯 Solution Path

Exploitation Steps

Exploitation

The exploitation is quite straightforward: you simply apply the XOR operation (^0x62) again to the encrypted value to retrieve the original value. So, I wrote a couple of lines in JavaScript and executed them directly in the console, successfully obtaining the flag:

1
2
3
4
5
6
7
let enc = ["\u000e", "\u0003", "\u0001", "\u0016", "\u0004", "\u0019", "\u0015", "V", "\u0011", "=", "\u000b", "U", "=", "\u000e", "\u0017", "\u0001", "\u0009", "=", "R", "\u0010", "=", "\u0011", "\u0009", "\u000b", "SS", "\u001f"];

// Step 1: XOR each character's charCode with 0x62
let decoded = enc.map(char => String.fromCharCode(char.charCodeAt(0) ^ 0x62));
// Step 2: Join the decoded characters
let flag = decoded.join('');
console.log(flag);

Flag capture

/images/LaCTF-2025/Lucky-Flag/manual_flag.png
Manual Flag

🛠️ Exploitation Process

Approach

The automated exploit performs the same action as the JavaScript code but in Python. It also handles the case where the character might be Unicode or not:

🚩 Flag Capture

Flag

Proof of Execution

/images/LaCTF-2025/Lucky-Flag/automated_flag.png
Automated Flag
Screenshot of successful exploitation

🔧 Tools Used

Tool Purpose
Python Exploit
ChromeDevTools Web Testing

💡 Key Learnings

Skills Improved

  • Binary Exploitation
  • Reverse Engineering
  • Web Exploitation
  • Cryptography
  • Forensics
  • OSINT
  • Miscellaneous

📚 References & Resources

Learning Resources


📊 Final Statistics

Metric Value Notes
Time to Solve 00:01 From start to flag
Global Ranking (At the time of flag submission) 25/665 Challenge ranking
Points Earned 500 Team contribution

Created: 08-02-2025 • Last Modified: 08-02-2025 Author: mH4ck3r0n3 • Team: QnQSec