Arbitrary File Upload trên ứng dụng ManaageEngine ServiceDesk Plus

Mở đầu

Đây là writeup thứ 2 của mình sau khi tìm được một lỗ hổng nghiêm trọng nữa, target là một subdomain của ngân hàng trong nước

Bài viết mang tính chất tham khảo, không khuyến khích các hành động vi phạm pháp luật, tấn công khi không được cho phép.

Khai thác lỗ hổng

Sau một hồi khai thác thông tin và liệt kê các subdomains của target, mình đã tìm thấy một subdomain chạy ManageEngine ServiceDesk Plus. Tìm hiểu qua thì thấy có khá nhiều các khai thác lỗ hổng đã được công bố trên các diễn đàn, exploit-db,..

Một vài phút ngâm cứu, mình tìm ra được các có thể thực thi mã từ xa (RCE) trên subdomain này. Cần phải có ít nhất là quyền user (guest cũng được) để gửi POST request đến một endpoint (CVE-2019-8394)

Image for post
2020 facing 2020 problems

"In file common/FileAttachment.jsp line 332 only check file upload extension when parameter ‘module’ equal to ‘SSP’ or ‘DashBoard’ or ‘HomePage’, and if parameter ‘module’ is set to ‘CustomLogin’ will skip check file upload extension function and upload arbitrary file to folder ‘/custom/login’ and this file can access directly from url ‘host:port/custom/login/filename’ . An authenticated user with minimum permission (ex: guest) can upload webshell to server."

Nôm na là bằng cách thay giá trị của parameter "module" thành "CustomLogin" thì ứng dụng sẽ bỏ qua việc kiểm tra kiểu file khi upload lên server. File sau khi upload có thể được truy cập tại địa chỉ 'host:port/custom/login/filename'.

Việc đầu tiên chúng ta cần làm đó là phải có được một tài khoản với bất kỳ quyền nào. Người ta nói rằng lao động hăng say vận may sẽ đến, tuy nhiên nó lại không phải là admin. Nhưng vậy là đủ để ta khai thác lỗ hổng CVE-2019-8394 này rồi.

Image for post
admin:admin

Đã có tài khoản, chúng ta cùng tìm hiểu cách upload file

Bước 1 xác thực với tài khoản guest:guest, server sẽ trả về cookie JSESSIONID để xác thực cho các request của người dùng.

Image for post

Lấy các cookie vừa nhận được và nhét vào trong cái payload dưới hình, đây là request upload file từ ứng dụng gửi lên server

(Link nội dung webshell github)

Image for post

Notes: Nội dung webshell không được chứa các ký tự xuống dòng  (space thì ok)

Server trả về response 200, có vẻ là oke của binz

/custom/login/{your_shell_name}.jsp

Và BOOM, đã có vỏ sò dành cho người may mắn!

Image for post
First time RCE on Window
Image for post
Corona Quarantine List?

Kết

  • Luôn cập nhật ứng dụng lên phiên bản mới nhất, cài đặt các bản vá lỗ hổng từ nhà phát hành.
  • Luôn cố gắng nỗ lực thì thành công sẽ đến với bạn !!