MlNl CTF INFOSEC PTIT 2024 .
Beginner's Challenge: Essential Skills for Getting Started
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}