Home CyberConverge 2026
Ctf-event
Cancel

CyberConverge 2026

A guided CTF event conducted by CyscomVIT

Overview

ChallengeDifficultyPointsCategoryFlag
Blackout ProfileEasy10Crypto/WebCYS{idor_is_just_an_object_reference}
Two Locks, One MessageEasy10CryptographyCYS{c4es4r_x0r_2x}
Campus HelpdeskEasy20WebCYS{campus_helpdesk_7f29c1a8}
The Hacker Left a NoteEasy-Medium10Web Recon, Basic Web SecurityFLAG{debugging_is_recon}
XORceptionEasy10CryptographyCTF{x0r_iS_fUn}
Two Truths and a StegEasy10SteganographyCYS{th3_d1ff_w4s_th3_p01nt}
The King's Last RecipeEasy10CryptographyCYS{B3LL4_C1A0}
The Archive Behind the ChunkEasy10SteganographyCYS{W4k4nd443v3R}
Reconfiguration TerminalEasy10Web ExploitationCYS{7h3_h0ur6l455_5h4773r3d_bu7_m3m0ry_r3m41n5_1n_fr46m3n75_pl3453_l1573n_cl053r_65537_2025}

Blackout Profile

Blackout Profile

Author: Advika

This is a crypto+web-based CTF challenge demonstrating an Insecure Direct Object Reference (IDOR) vulnerability.

Firstly for the Crypto part:

We can use common online tools like Cyberchef to solve the following 3 challenges.

The challenges are basic base64 encoding, caeser cipher (bruteforce), simple xor with the given key.

For the IDOR part: First, we access the login page

The application provides a login form. Use the credentials provided with the previous challenge:

Username: Alice Password: very_secure_pwd

After logging in, the application redirects to:

/idor/profile/1001

Since the profile ID is directly exposed in the URL, we test whether changing it allows access to another user’s profile.

We change the profile value 1001 to 1

The application returns another employee profile, confirming that it does not properly verify whether the authenticated user is authorized to access the requested profile.

The vulnerability is an Insecure Direct Object Reference (IDOR). The application exposes an internal object identifier directly in the URL:

/idor/profile/

The server accepts an arbitrary user_id and retrieves the corresponding profile without checking whether the current user is authorized to access it.

Flag

CYS{idor_is_just_an_object_reference}

Two Locks, One Message

Two Locks, One Message

  • Author: Sagnik

This is a cryptography-based CTF using two layers of encryption: a Caesar cipher and XOR.

From clue.txt, we determine the Caesar shift is 3 and the XOR key is 42 (0x2A).

A simple google search gives you the second lock key. :D

Since the message was encrypted twice, we reverse the operations during decryption.

The encrypted data is:

1
6c687c514c1e425c1e5f754b1a5f75184b57

First, undo the XOR layer using key 2A:

1
FBV{f4hv4u_a0u_2a}

Then undo the Caesar shift by shifting the letters back by 3:

1
CYS{c4es4r_x0r_2x}

Flag

CYS{c4es4r_x0r_2x}

Campus Helpdesk

Campus Helpdesk

  • Author: Dibyadipan (0DayMonxrch)

This is a web-based CTF challenge involving Stored Cross-Site Scripting (XSS).

First, submit a normal ticket and test whether HTML is interpreted in the ticket description:

1
<b>test</b>

The text is rendered as HTML, indicating that the description is not safely escaped.

Next, confirm JavaScript execution:

1
<script>alert(location.origin)</script>

The alert shows the challenge origin, confirming that JavaScript executes in the context of the helpdesk application.

Inspecting the ticket HTML reveals a hidden internal endpoint:

1
data-review-endpoint="/api/internal/note"

The endpoint relies on the browser’s existing review_session cookie. Although the cookie is HttpOnly and cannot be read using document.cookie, the browser automatically includes it in same-origin requests.

We can therefore use the stored XSS to make an authenticated request:

1
2
3
4
5
<script>
fetch('/api/internal/note', {method: 'POST'})
    .then(r => r.text())
    .then(flag => document.body.innerText = flag);
</script>

Opening the ticket again executes the payload, makes the authenticated request, and displays the flag.

Flag

CYS{campus_helpdesk_7f29c1a8}

The Hacker Left a Note

The Hacker Left a Note

  • Author: Shruthi

This is a web reconnaissance challenge where the flag is hidden through a chain of developer artifacts.

First, visit the homepage

Viewing the page source reveals a hidden comment:

1
<!-- TODO: remove debug endpoint before deployment -->

Following the clue, visit: /debug endpoint

The debug console contains a note mentioning that the backup log was saved as backup.txt in the static assets folder.

We then visit: /static/backup.txt

The log contains a temporary access code:

1
Temporary access code: 4832

The surrounding log indicates that the code is intended for the /profile endpoint.

Finally enter the code and the page reveals the flag.

Flag

FLAG{debugging_is_recon}

XORception

XORception

  • Author: Guhan (DaBot)

This is a cryptography-based CTF using a repeating-key XOR cipher.

The provided ciphertext is:

1
3b3b340317420a301b2b30142d010f

The challenge uses the repeating key:

1
xor

Since XOR is its own inverse, we can decrypt the ciphertext by applying the same key again.

Using CyberChef, first apply From Hex, followed by XOR with:

1
2
3
Key: xor
Key type: UTF-8
Scheme: Standard

The repeating key is applied across the ciphertext:

1
xor xor xor xor xor

This produces the original plaintext:

1
CTF{x0r_iS_fUn}

Flag

CTF{x0r_iS_fUn}

Two Truths and a Steg

Two Truths and a Steg

  • Author: Sagnik

This is a steganography challenge involving two seemingly identical images.

We are given:

1
2
before.png
after.png

Although the images look identical, their SHA-256 hashes are different, indicating that the underlying files have been modified.

We can compare the images directly using ImageMagick:

```text id=”4t7h7w” magick compare before.png after.png -compose src diff.png

1
2
3
4
5
6
7
This generates `diff.png`, which highlights the differences between the two images.

Opening the difference image reveals the hidden message:

```text id="4k7g4c"
CYS{th3_d1ff_w4s_th3_p01nt}

Flag

CYS{th3_d1ff_w4s_th3_p01nt}

The King's Last Recipe

The King’s Last Recipe

  • Author: Utkarsh

This is a cryptography-based CTF involving multiple encoding layers and hidden clues.

The original Google Doc contains hidden white-on-white text. Selecting the page contents reveals:

1
K;v>Sk,6xIrfXt3EJw<nlld)t7h9S2RuIR'Diqb/ysC3?NaZ=1h\sT6:su[llzdxGh1!cyWbK'j9XK6sHkkppx57KzH6({(Z@=vkhV4/yak!kv41Hm_LQ'$<ZT)(9E

This string is encoded using Base92 followed by ROT13. Reversing these operations gives a link to a second Google Doc.

The second document contains the encrypted key.

The story in the first document provides the encoding layers in order:

1
64 → 64 → 8 → 32 → 45 → 58 → 62 → 64 → 92

Therefore, the layers must be decoded in reverse order:

1
Base92 → Base64 → Base62 → Base58 → Base45 → Base32 → Octal → Base64 → Base64

Using CyberChef with the corresponding From Base operations reveals:

1
B3LL4_C1A0

Flag

CYS{B3LL4_C1A0}

The Archive Behind the Chunk

The Archive Behind the Chunk

  • Author: Utkarsh

This is a steganography challenge involving image metadata, an encrypted payload, and a custom PNG chunk.

We are given:

1
2
CTF1.png
CTF2.png

First, inspect CTF1.png using exiftool:

1
exiftool CTF1.png

The metadata contains a Base64-encoded payload and the hint:

1
key - thor

Decode the payload and decrypt it using age:

1
2
base64 -d encoded.txt > secret.age
age -d -p secret.age

Using the password thor reveals a link to a Word document.

The document contains several images. Inspecting their metadata reveals the first half of the flag in one image’s Description field.

Next, inspect CTF2.png. Running:

1
pngcheck -v CTF2.png

reveals an unusual custom PNG chunk. The hidden data can also be located using:

1
strings CTF2.png | grep drive.google.com

This reveals a Google Drive folder containing a video. The video provides the second half of the flag.

Combining both fragments gives:

1
CYS{W4k4nd443v3R}

The flag would be:

CYS{W4k4nd443v3R}

Flag

CYS{W4k4nd443v3R}

Reconfiguration Terminal

Reconfiguration Terminal

  • Author: Yashwant Gokul P

This is a web exploitation challenge involving predictable resource enumeration.

The hint:

1
Numbers are truth, and truth always leaks through the cracks

suggests looking for numeric endpoints. Checking robots.txt reveals:

1
Disallow: /safe/420

Testing /safe/1, /safe/2, and /safe/3 returns individual characters from the flag, confirming that the /safe/<id> endpoint can be enumerated.

Instead of checking every page manually, we automate the requests and extract the character from each response until a 404 is reached.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests
from bs4 import BeautifulSoup

BASE = "https://reconfiguration-terminal.netlify.app/safe/{}"
flag = ""

for i in range(1, 1000):
    r = requests.get(BASE.format(i))

    if r.status_code == 404:
        break

    soup = BeautifulSoup(r.text, "html.parser")
    p = soup.find("p")

    if p:
        flag += p.text.strip()

print(flag)

The enumeration reconstructs the complete flag.

The flag would be:

CYS{7h3_h0ur6l455_5h4773r3d_bu7_m3m0ry_r3m41n5_1n_fr46m3n75_pl3453_l1573n_cl053r_65537_2025}

Flag

CYS{7h3_h0ur6l455_5h4773r3d_bu7_m3m0ry_r3m41n5_1n_fr46m3n75_pl3453_l1573n_cl053r_65537_2025}