Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/be-positive
Thay vì chuyển tiền thông thường thì sẽ chuyển số âm
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/slow-down
Transfer với amount=111111111+1
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/youtube-downloader
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/pass-code
Deobfuscate đoạn js sau
Dùng tool này https://deobfuscate.relative.im/ để deobfucate thì thấy được key
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/magic-login
Đăng nhập với username bất kỳ, pass là một trong các chuỗi tạo được magic hash trong link này
Upload con shell với nội dung
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/magic-login-harder
Tham khảo link sau để tạo 2 mã base64 khác nhau nhưng có cùng hash md5 https://stackoverflow.com/questions/1756004/can-two-different-strings-generate-the-same-md5-hash-code#:~:text=the+paper
Tại admin.php
có thể LFI thông qua param file
Dùng payload sau để tạo shell vào /tmp/..
Tuy nhiên ký tự đặc biệt bị encode nên phải base64 đoạn code php
Khi LFI để include /tmp/shell..php
thì dùng thêm wrapper convert.base64-decode
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/suck-it
Đọc source code ta thấy có đoạn
Khi gọi force disconnect
nó sẽ trả về sessionID
của userID
thông qua dòng code socket.emit(targetSocket.sessionID)
(key thì được hard code rồi)
Ta đã biết đượcusserID
của admin là ADMIN
Gọi đến force disconnect
để lấy session của admin
Thay session này vào localStorage và chat với người yêu admin
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/video-link-extractor
Nếu extract mà host là localhost
thì code sẽ xử lý như sau
Lợi dụng để gọi đến redirect
của index.php
Untrusted data sẽ là response ta trả về, khi đó nó được unserialize
Thêm vào đó object Utils
khi __wakeup
sẽ gọi $this->_file
Script tạo serialize data:
Thay kết quả của script vào response của webhook
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/pyrevese
Dùng pyinstxtractor
để tạo ra folder chứa file .pyc
Dùng Uncompyle6 hoặc Decompiler Tools để decomplie file pyreverse.pyc
Kết quả:
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/jump
Jump đến địa chỉ 401500
4199680
tương đương 0x401500
trong hexa
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/rev1
Hàm xử lý input để get flag
Dùng script để giải hệ phương trình 14 ẩn:
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/tin-hoc-van-phong-co-ban
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/so-dang-ky
Xem bằng Registry View
Ta được đoạn base64 TVFva4JAGP8qh7hxx/IwzbaSBZtsKwiLGexFhJg+pMs09AmL6rvP03S9uoe739/nZD+OIEHySmwolNn6F3wkzilH2HEbkDupvwXM+cKaWxWSSt2Bxrv9F64ZOteepU5vYOjMlHPMwNuVQnItyb8AneqOMnO5PiEsVytZnHkJUjnvG4ZuXB7O6tUswigGSuVI0Gsh/g1eQGt8h6gdUo98CskGQ8aIkgBR2dmUAw+9kkfvCiiL0x5sbwdNlQUckb851mTykfhpECUbdstXjo2LMIlEE0iCtedvhWgER1I7aKPHLrmQ2QGVmkbuoFoVvOE9Eckaj8+26vbcTeomqptjL3OLUM/0q1Q+030RMD73MBTYEZFuSmUMYbpEERduSVfDYZW8SvwuktJ/33bx/CeLEGirU7Zp52ZpLfYzPuQhZVez+SsrTnOg7A8=
Decode bằng Cyberchef
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/bao-cao-dang-do
Phát hiện có file này
Dumpfile
Binwalk
Extract được folder như thế này
Flag nằm ở /word/media/image2.png
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/trivial-ftp
Tại udp stream 26, ta thấy data có chứa header của 1 file PDF
Đọc các packet của nó và suy ra được data mà ta cần extract ở udp.dstport == 58813
Vì bài này giao thức TFTP sử dụng netacsii mode mà mode này khác ASCII thông thường ở chổ
Nên ta cần replace 0D0A
và 0D00
về đúng định dạng
Script
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/under-control
Có 1 file Microsoft Excel đáng nghi ngờ
Dùng oletool và olevba
Đến đây nhận thấy code này đã bị obfuscate, đem vào vscode và chỉnh một xíu ở phần tên hàm tên biến để cho dễ đọc.
Chú ý từ 2 đoạn là:
Đầu tiên là từ Function a(b) -> End Function
Thứ 2 là đoạn này
Function a(b)
phía trên sẽ dùng để decode cái URL này, giờ mình sẽ convert nó qua python rồi chạy lấy URL
Kết quả là đường dẫn: https://gist.githubusercontent.com/bquanman/98da73d49faec0cbbdab02d4fd84adaa/raw/8de8b90981e667652b1a16f5caed364fdc311b77/a80sc012.ps1
Đường dẫn cho mình 1 đoạn PowerShell code, giờ tải về nó về và dùng powerdecode để deobfuscate, và đây là kết quả:
Đây là mã hóa AES 256 với key là ${vXzTmff} = 'd/3KwjM7m2cGAtLI67KlhDuXI/XRKSTkOlmJXE42R+M='
Còn IV và plaint text thì liên quan đến đoạn Decrypt
Sau khi Decrypt
và lưu kết quả vào mảng ${kVQBXbur}
, sẽ gửi đi POST request
Tìm kiếm http.request.method == "POST"
trên wireshark
Dùng tshark để extract dữ liệu trong urlencoded-form.value
ta được
Dựa vào hàm deCRyPT
ta biết 16 bytes đầu là IV và phần còn lại là plaintext
Tiếp tục dùng Cyberchef để decrypt
Ta tìm thấy đoạn hex, khi decode ta được kết quả là một file ảnh
Khi tải về là một mã QR, khi quét thì được flag
Flag: CHH{D0n't_w0rRy_n0_st@r_wh3rE}
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/identity-security
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/decrypt
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/cutiek1tty
Dùng https://www.aperisolve.com/ , biết được pass và biết đây là file rar
Sau khi giải nén được
Magic bytes của y0u_4r3_cl0s3.rar
bị sai
Sửa lại đúng định dạng file rar và extract bằng password ở trên
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/cat-me
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/pinned-cookie
Từ đây biết được mã base64 và key
Viết script dựa trên y0
Script:
Link: https://battle.cookiearena.org/arenas/cookie-arena-ctf-season-2/battle/basic-operator
Script brute force từ block 1 đến block 10 (vì block 0 đoán được là CHH{
):
Ở block cuối có 3 trường hợp có thể xảy ra:
}\x03\x03\x03
X}\x02\x02
XX}\x01
Thử 3 trường hợp thì mình thấy trường hợp 3 là đúng, script brute force block cuối cùng
Flag: CHH{w3lc0m3_70_7h3_m47h_w0rld(1_h4t3_1t_th3r3)}