[HTB] Photobomb - Writeup


Tiếp theo serials Hack The Box writeups sẽ đến một bài khá ez để khai thác cũng như leo thang đặc quyền. Photobomb là một máy Linux, trong đó thông tin đăng nhập được bỏ quên trong mã nguồn và được sử dụng để truy cập vào một ứng dụng web nội bộ có chức năng Download
tồn tại lỗ hổng Blind Command Injection. Sau khi đã đi sâu vào máy nộ bộ, một tập lệnh shell được cấu hình kém chất lượng, tham chiếu đến các tệp nhị phân mà không có đường dẫn đầy đủ của chúng được tận dụng để đạt được đặc quyền cao hơn.
Enumeration
Sử dụng nmap có thể thấy có 2 dịch vụ được mở trên port 22(ssh), 80(http)
Truy cập port 80 trên trình duyệt và trang web chuyển hướng đến domain photobomb.htb
Thêm domain trên vào file /etc/host và refreshing lại trang
echo "10.10.11.182 photobomb.htb" | sudo tee -a /etc/host
Trang web quảng cáo một hệ thống franchise quà tặng ảnh sắp mở với một ứng dụng web "state-of-the-art". Trang cũng có một liên kết "click here", chuyển hướng đến một trang khác là /printer. Truy cập liên kết này sẽ hiện ra một yêu cầu nhập thông tin đăng nhập, theo thông tin trên bài đăng, thông tin đăng nhập này được cung cấp trong một loại "welcome pack".
Khi thực hiện kiểm thử ứng dụng web, thường rất hữu ích khi xem mã nguồn trang web. Bằng cách kiểm tra mã nguồn trang, chúng ta có thể hiểu rõ hơn về trang web mà chúng ta đang xem và tìm thấy bất kỳ tập lệnh nào có thể đang chạy bên dưới. Ngoài ra, các nhà phát triển web đôi khi mắc lỗi và để lại các cấu hình sai hoặc thông tin đăng nhập trong mã nguồn có thể nhìn thấy của trang web.
Review source code và tìm thấy một script tên là photobomb.js
Đọc nội dung file và thu thập được thông tin đăng nhập vào trang /printer.
Trong trang web, hiển thị một trang bao gồm nhiều hình ảnh khác nhau, các hình ảnh có thể chỉnh sửa được kích thước trước khi tải xuống. Trước khi nhấp vào nút tải xuống, thiết lập browser đi qua BurpSuite.
Foothold
Ở đây, chúng ta có thể thấy dữ liệu đang được gửi; trong trường hợp này, có ba tham số, cụ thể là photo
, filetype
và dimensions
Tại đây ta thử command injection với từng param và nhận thấy filetype dính command injection
Để kiểm tra xem trang web có tồn tại command injection không, tạo một server trên máy python -m http.server 8000
Chèn command gửi request đến server
Ở server nhận được request gửi đến → command được thực thi
Xác nhận có lỗi command injection.Bước tiếp theo là chuyển đổi khả năng thực thi các lệnh tùy ý trên mục tiêu thành việc có được một dòng lệnh tương tác, và để làm được điều đó ta cần tạo một revshell.
Ở máy chúng ta thiết lập một máy chủ Netcat trên cổng 8000 để bắt reverse shell.
Nâng cấp shell của mình thành một TTY shell bằng cách sử dụng đoạn mã Python sau đây:
python3 -c 'import pty;pty.spawn("/bin/bash")
Privilege Escalation
Việc kiểm tra hệ thống mục tiêu cho thấy một cronjob đang chạy một tập lệnh Bash nằm trong thư mục /opt/ mỗi 5 phút.
Vì cronjob được chạy bằng sudo, chúng ta kiểm tra xem người dùng "wizard" có thể chạy các lệnh khác với đặc quyền cao hơn hay không.
Đầu ra cho thấy người dùng "wizard" có thể chạy tập lệnh /opt/cleanup.sh
với đặc quyền của người dùng root, mà không cần mật khẩu. Hơn nữa, đối với lệnh này, chúng ta cũng có thể thiết lập biến môi trường, được chỉ định bởi SETENV
.
Chúng ta không thể chỉnh sửa tập lệnh, nhưng có thể đọc nội dung của tập tin đó.
💡
setenv là một hàm tích hợp của C shell (csh). Nó được sử dụng để xác định giá trị của các biến môi trường.
💡
Nếu setenv không có đối số, nó sẽ hiển thị tất cả các biến môi trường và giá trị của chúng. Việc set biến môi trường, sử dụng câu lệnh sau
💡
setenv MYVAR myvalue
Quay lại với /opt/cleanup.sh
Chúng ta không thể chỉnh sửa tập lệnh, nhưng có thể đọc nội dung của tập tin đó
Ta thấy đoạn script này sử dụng một số command như cd, find
. Việc chỉ gọi ra các câu lệnh mà không dùng đường dẫn tuyệt đối khiến nó có thể bị khai thác
Ở đây ta sẽ tạo ra một file find giả, cấp quyền thực thi và trỏ PATH đến file này. Khi đó thi chạy cleanup.sh
sẽ sử dụng find mà ta vừa tạo
Tạo file find
với nội dung /bin/bash
Chạy file cleanup.sh với PATH trỏ về file vừa tạo. Khi này, câu lệnh /bin/bash trong file find sẽ được thực thi dưới quyền root và tạo ra shell root.
Như vậy chúng ta leo thành công lên quyền root. Tiếp theo lấy flag và submit thôi
Tổng kết
Một bài HTB khá chill cho những ngày nghỉ lễ. Không quá khó để có thể khai thác lỗ hổng cũng như leo lên đặc quyền cao nhất của hệ thống. Mong mọi người đọc sẽ đóng góp để mình hoàn thiện hơn
Subscribe to my newsletter
Read articles from trọng nguyễn kim directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
