[UMassCTF 2024] Web challenges
Vài dòng về giải CTF của UMass, mình luôn đánh giá cao và theo dõi hàng năm vì những challenge Web khá chất lượng của giải. Năm 2021 khi lần đầu chơi giải này, mình đã ấn tượng đến mức thốt lên "********", những năm sau đó chất lượng giải càng ngày càng tốt chứ không tụt lùi. Chung quy thì đây là 1 giải đáng chơi và tryhard (vui hơn khi có team ¯\_(ツ)_/¯)
Spongebobs Homepage
Challenge cho chúng ta 1 trang web tĩnh, vì vậy mình chỉ quan tâm đến cái ảnh kia

Click Open image in new tab, URL của ảnh có dạng như bên dưới

Thử thêm kí tự ` vào sau giá trị của trường size, ứng dụng trả về lỗi:

Lúc này mình khá chắc là Command Injection rồi, confirm lại bằng câu lệnh whoami , ứng dụng trả về user

Chèn command vào với payload ls, ứng dụng trả về kết quả

Để lấy hết được output của lệnh ls, mình base64 đầu ra

Và ye, sau khi tìm được vị trí file flag.txt, việc mình cần làm chỉ là in nội dung file ra thôi

Crabby Clicker
Bài này khá thú vị, đến giờ mình vẫn không nghĩ mình hiểu hoàn toàn đoạn code :^)

Giải thích 1 chút về challenge: Có 1 biến tên là burgers, một endpoint là /click, mỗi lần request đến endpoint này, biến burgers sẽ +1, khi đạt đủ 100 burgers thì chúng ta sẽ có flag bằng cách truy cập endpoint /flag. Khá là dễ hiểu đúng không :^

Nhưng, đúng vậy, luôn là nhưng, có 1 vấn đề ở đây, đó là code có bug, nên dù request bao lần thì số burger nhận được cũng chỉ là 1. Lý do xuất hiện bug này là do tác giả cố tình sử dụng biến cục bộ, thay vì toàn cục, đấy là mình nghĩ thế :(

Đọc tiếp đoạn code bên dưới, mình thấy chương trình nhận biết đâu là kết thúc 1 request bằng \r\n.

Ngay lúc này đầu mình nghĩ đến 1 ý tưởng, đó là gửi nhiều request phân cách nhau bởi \r\n trong 1 request, và đây là kết quả:

Mình thêm 1 request /flag vào cuối để lấy được flag.

Holesome Birthday Party
Bài này khá buồn cười (và có thể gây bực), mình từng gặp vài lần nên hiểu ngay ý tưởng của tác giả từ lúc thấy đoạn text bên dưới:

Đầu tiên nó bắt mình phải truy cập từ 1 browser tên "Bikini Bottom", và thông tin về browser được lưu trong header User-Agent nên việc cần làm chỉ là đổi giá trị header User-Agent thành Bikini Bottom

Tiếp theo, đoạn text trả về nói rằng chúng ta đến quá sớm nên mình ngay lập tức Google Search (đúng vậy, Google search) sinh nhật của SpongeBob

Sau đó, sử dụng header Date với giá trị là ngày sinh nhật của SpongeBob

Tiếp theo, nó hỏi mình có biết tiếng Pháp không, aight, mình đổi giá trị trường Accept-Language thành fr-CH tương ứng với tiếng Pháp

Tiếp theo là 1 "Cookie" có hương vị chocolate 🗣️Mình thêm cookie flavor với giá trị là chocolate_chip và vượt qua

Đoạn này mình chú ý response trả về 1 cookie là Login, với giá trị là {"loggedin": false}được base64

Đổi giá trị thành true và base64 lại, sau đó gửi cùng request và mình lấy được flag 🤌

Tổng kết
Lần này mình đã thất bại trong việc clear được challenge Web, chỉ dừng lại ở 3/5 :(, cũng hơi hụt hẫng tý, chắc do lâu rồi không chơi CTF. Cảm ơn các bạn đã đọc (và đã tìm ra blog để đọc). Domiee13, phóng viên thường trú tại BlueCyber 🗣️🔥.





