MlNl CTF INFOSEC PTIT 2024 .

Beginner's Challenge: Essential Skills for Getting Started

MlNl CTF INFOSEC PTIT 2024 .

HIDDEN FLAG

Truy cập vào websites thì ta thấy một form login, ta thử đăng ký một tài khoản

Nhưng khi nhấn submit thì không có thông báo đã tạo tài khoản thành công hay gì cả mà chỉ đơn giản là redirect về chính trang signup, kiểm tra mã nguồn thì ta thấy đây chỉ là phần frontend đơn thuần không có xử lý phía sever
Vậy ta thử đăng nhập với một account bất kỳ

Kiểm tra mã nguồn thì ta có được mảnh Flag đầu tiên

Ở file css của trang forgotpass.html ta tìm được một dãy số khá kỳ lạ như sau

Chưa có manh mối gì từ dãy số này, tôi tiếp tục đi tìm tiếp những file css khác, và tìm thấy một chuỗi lạ ở cuối file css của trang sign_up

Lần này thì có vẻ dễ đoán hơn, chuỗi này có vẻ là base32 hoặc là base64

Chính xác thì đó là Base32, và ta có được mảnh flag thứ 2
Khả năng cao thì dãy số lạ ta tìm được cũng là chìa khóa để tìm được mảnh flag cuối cùng, sau khoảng hơn 1 tiếng tìm đọc trên google thì mình tìm được một bài blog khá là useful nói về mối quan hệ giữa long integer và bytes: https://captainmich.github.io/programming_language/CTF/Challenge/CryptoHack/general.html

Ta thử dùng mã python bên dưới để chuyển đổi long integer này về dạng bytes

from Crypto.Util.number import bytes_to_long
from Crypto.Util.number import long_to_bytes

data = 
bytes = long_to_bytes(data)
print(bytes)

Và ta được mảnh ghép cuối cùng
Flag: miniCTF{N0w_u_c4n_see_m3_h3h3h3}

CHECK THE SOURCE

Có vẻ là Rick roll gì đó ở đây

Khi truy cập vào websites thì ta nhận được 2 cái fake flag

Check source code thì ta thấy được một file javascript đã bị obfuscation (làm xáo trộn, làm cho khó đọc)

Sau khi tìm hiểu thì mình biết đó là JSFuck, dùng websites này để decode:

https://enkhee-osiris.github.io/Decoder-JSFuck/

The real Flag is: miniCTF{L0c4l_st0r4g3_byp4ss}

I LOVE EATING FOOD

Lại là một form login và lại không có xử lý nào phía server cả, ta thử đăng nhập với username: a, password: a thì websites hiện thông báo : Login falsed

Tiếp tục xem mã nguồn, truy cập file script.js thì được một đoạn mã rất dài và cực kỳ khó hiểu

Lại là Javascript obfuscation, tuy nhiên đoạn mã này khó decode hơn JSFuck khá nhiều, sau khi thử nhiều tools deobfuscation khác nhau, thì có tools này tôi thấy khá hiệu quả: https://deobfuscate.relative.im/

Đây là đoạn mã chính sau khi được decode

const _0x55df9a = getCookie('login_cookie'),
    _0x4dbbba = document.getElementById('message')
  if (_0x55df9a === '1') {
    alert('Login success')
    _0x4dbbba.textContent = 'You are already logged in!'
    fetch('/_tmp')
      .then((_0x4b39a0) => _0x4b39a0.text())
      .then((_0x1968bd) => {
        ;(_0x4dbbba.textContent = _0x1968bd), (_0x4dbbba.style.color = '#ffff')
      })
      .catch((_0x15def4) => {
        console.error('Error', _0x15def4)
      })
  } else {
    _0x4dbbba.textContent = 'Please log in.'
  }

Ý nghĩa của đoạn mac là nếu biến cookie login_cookie có giá trị là 1 thì websites sẽ hiện thông báo You are already logged in! đồng thời thực hiện một yêu cầu HTTP GET tới đường dẫn /_tmp , tiến hành đổi màu phần tử có id là message thành màu đen

Flag: miniCTF{w0w_y0u_kn0w_c00kj3_:3}

TOKENOFTRUST

Ta đăng ký một tài khoản và đăng nhập như bình thường, đây là giao diện sau khi đăng nhập thành công

Theo kinh nghiệm từ bài trước, ta thử kiểm tra cookie:

Có một token, có lẽ là mã định danh cho user, theo như nội dung trang web thì đây là JWT token

Kiểm tra mã nguồn thì ta lấy được Khóa bí mật là : ilovePP

Từ đây ta hoàn toàn có thể tạo bất kỳ token nào mà ta mong muốn
Thử tạo một token với auth là true

Thay token này vào cookiee token hiện tại

Flag: miniCTF{n3v3r_trust_JWT_w1th0ut_v3r1fy}