FlareOn4 notes

Sau hơn 1 tháng thỉnh kinh, cuối cùng mình cũng qua được cửa ải cuối cùng của FlareOn4, cảm xúc lần đầu lên đỉnh thật tuyệt vời. Tính viết write-ups, nhưng chắc chắn mình không thể explain tốt hơn chính các tác giả. Do đó mình chỉ muốn viết lại một vài note nhỏ và cảm xúc của bản thân.
Khi mà ngoài kia bao nhiêu người tìm kiếm bug và 0day, mình vẫn cảm thấy còn quá kém cỏi với mấy bài CTF.

#0x1 — login.html

ROT13

#0x2 — IgniteMe.exe

XOR

#0x3 — greek_to_me.exe

Chương trình bind và lắng nghe tại 127.0.01:2222, nhận 1 byte từ client, sau đó thực hiện SMC và kiểm tra checksum. Nếu checksum đúng, đoạn code vừa được modify sẽ chứa flag, do đó có thể brute-force 1 byte này đến khi tìm được checksum đúng. Nếu lười bạn có thể copy pseudo-code từ IDA :sure:

#0x4 — notepad.exe

Binary các challenges của năm ngoái tại %USERPROFILE%\flareon2016challenge 4 PE files (có timestamp cho trước) và ghi 8 bytes từ các file này vào key.bin. Sau đó XOR và MessageBox flag.

#0x5 — pewpewboat.exe

pewpewboat.exe nhưng định dạng lại là ELF :okay:
Tác giả cho chúng ta một trò chơi như minesweeper huyền thoại vậy, thử chơi 1 lúc chán thì mình nghĩ là phải reverse mới có được cờ. Mình hoàn toàn thấy bất ngờ vì điều này.
Cũng không có quá nhiều điều, vấn đề chỉ là decrypt config các round để tìm ra ô thích hợp, qua mỗi 1 round sẽ nhận được một chữ cái và tại round thứ 10 sẽ có một message hướng dẫn recover lại khóa (16 bytes) để giải mã cờ.

#0x6 — payload

Challenge này mình cùng chinh chiến với 1 ông anh xã hội như nồi, phát hiện ra modify Export Directory sau đó chỉ việc spot và decrypt hết tất cả function name.

#0x7 — zsud.exe

Lại là một game, nhưng game không fair :( Nếu static với bài này rất dễ bị đánh lừa bởi các strings. Sau khi lấy được mã PowerShell, mất một thời gian ngắn để mình quay lại với binary ban đầu (server) và nhận ra hàm rand() đã bị hook.

#0x8 — flair.apk

Với cá nhân mình thì bài này khá dễ, có thể đọc code chay mà ra flag, không có quá nhiều điều để nói.

#0x9 — remorse.ino.hex

Sau khi dành 1 tá thời gian và tâm huyết để disassembly cùng data#shit thì mình gần như đã bỏ cuộc.
Một thoáng vu vơ mình nghĩ về Digital Pin, nó *** cho mình nhập Pin, vậy chuỗi pin kia là cái *** gì thế, 1 click chuột đưa mình tới đây. Mang Arduino ra, lần lượt nối các Digital Pin này với chân GND để kiểm tra, các Pin được sắp xếp lần lượt như sau (tương ứng với output): | * | 6 | 5 | 4 | 3 | 2 | * | 7 |.
Như vậy là chỉ cần thay đổi 5 Pin để tìm ra correct pin. Mình thích màu mè nên làm vậy, thực ra thì simulator cũng được :|

#0xa — shell.php

Sử dụng con AI chạy bằng cơm (chính là mình) để bruteforce khoảng 3–5 ký-tự-mỗi-lần với độ dài block là 64 (với key length nằm trong khoảng 32 -> 64 thì chỉ có 64 là thõa mãn tất-cả-các-ký-tự output là printable), đọc ngữ nghĩa các block để xác định key. Đoạn này cũng không lâu lắm, tầm… 3 tiếng.

#0xb — covfefe.exe

Không thể reduce cái VM kia và có 1 lời giải đẹp đẽ (có thể tham khảo writeup của tác giả cùng bài viết này để có một cái nhìn văn minh hơn), mình chọn một cách tục tĩu hơn, đọc hàng trăm nghìn dòng output generate từ pseudo-code, tìm ra điểm G và bruteforce (mỗi 2 bytes), submit flag. Lại 1 bài với l33t-solution :-P

#0xc — [missing]

Mình đã bỏ cuộc vì thấy cái traffic quá lớn, có lẽ là hơi quá sức với mình, mình đã định chờ flag từ thầy trò Huyền Trang. Nhưng cái máu trong người không để con tim mình ngủ yên.
Sau vài ngày sử dụng IDA 7.0 (…) để build lại class của malware, tiếp theo là static khoảng mười-mấy-cái-modules. Về cơ bản malware sử dụng các `”plugin”`, có thể phân loại bao gồm: COMP dùng để nén , CRPT dùng mã hóa dữ liệu và CMD để thực thi các chức năng khác. CC và victim sẽ giao tiếp thông qua các gói tin được nén và mã hóa, tương tự, CC ra lệnh cho victim bằng gói tin chứa đinh danh hàm cần thực thi thông qua CMD plugins (mỗi plugin được định danh bằng 16 bytes).
Mọi thứ tưởng chừng như đã trần truồng trước mắt, sau khi giải mã đống dữ liệu mới chợt nhận ra mọi thứ không đơn giản như thế. Trong mớ hỗn độn kia, mình nhận được một cái ảnh nói rằng mật khẩu file zip là abcxyz (thực sự nó là `infectedinfectedinfectedinfectedinfected919` ) cùng 1 số strings nói rằng `h4ck3r` đã pivoting máy của Larry, và chỉ có Larry mới có challenge thực sự. Có dây thừng rồi giờ buộc phải đi tìm trâu.
Từ đó mình tìm đến Larry, có lẽ Larry mới thực sự là người mang cho mình khoái cảm. Quả không phụ lòng, Larry đã cho mình file zip. Đến đây mình đã phó mặc nó cho những người bà con xa, khi mà cảm thấy cần được nghỉ ngơi. Nhưng trong lòng lại day dứt không yên, bật máy ảo lên và như thương lệ mình sẽ chạy thử xem nó như thế nào thì nhận được luôn cái flag. Một challenge mà không challenge. Một realistic case, thanks to @FireEye.

Năm ngoái mình vẫn còn đang chập chững ở level 3 và nhìn lên trên để cố gắng hơn. Không biết contest năm sau còn có tên trên HoF hay không, nhưng một năm trôi qua, ngoảnh lại ít nhất cũng cảm thấy mình đã-không-dừng-lại cũng khiến lòng ấm áp hơn giữa mùa đồng lạnh giá, mặc dù mình đã có gấu :khonglienquan: