🖥️Room 1: Overpass

What happens when a group of broke Computer Science students try to make a password manager? Obviously a perfect commercial success!

Enumeration

Đầu tiên, quét tất cả các cổng đang được mở:

Như kết quả hiển thị: có 2 cổng đang mở đó là port 22 (ssh) và port 80 (http)

Enumeration HTTP 80

Truy cập máy chủ web qua trình duyệt, một trang web được hiển thị:

Sau một thời gian khám phá trang web, dường như không có gì đặc biệt đối với tôi. Có 1 link dẫn đến source code, nhưng thật sự không có gì thú vị ở đây cả Tiếp theo, tôi thử tìm xem có những tệp hoặc thư mục ẩn bằng gobuster:

Trong quá trình quét, gobuster phát hiện có một thư mục ẩn mà ta đáng quan tâm "admin". Truy cập trang web này:

Trang web này, xuất hiện một biểu mẫu đăng nhập. Đối với một biểu mẫu đăng nhập, thường thì chúng ta thường nghĩ đến một lỗi SQL injection. Tôi đã thử, nhưng dường như nó không tồn tại ở đây.

Broken Authentication

Kiểm tra source code của trang web này, có 1 file login.js mà chúng ta đáng quan tâm. Đây là một file chứa chức năng đăng nhập:

1. Nếu đăng nhập không thành công (phản hồi trả về "Incorrect credentials"), hàm cập nhật nội dung của phần tử HTML với ID "loginStatus" để hiển thị thông báo "Incorrect Credentials". Ngoài ra, hàm xóa giá trị trong ô mật khẩu để người dùng có thể nhập lại. 2. Nếu đăng nhập thành công (phản hồi trả về mã thông báo phiên đăng nhập), hàm sử dụng thư viện Cookies.js để lưu mã thông báo phiên đăng nhập trong cookie có tên "SessionToken". Sau đó, hàm chuyển hướng người dùng đến trang "/admin" để truy cập vào trang quản trị. Nó sẽ đặt giá trị SessionToken thành statusOrCookie Như vậy có thể hiểu nôm na là, nếu SessionToken = statusOrCookie thì bạn có thể login thành công vào trang /admin.

Tạo cookie SessionToken theo cách thủ công với giá trị “statusOrCookie” trong trình duyệt:

Sau khi làm mới trang, thì truy cập được vào trang /admin với khóa SSH được biểu diễn. Sao chép khóa này vào 1 file và login vào ssh.

Như vậy, khóa private_ssh được bảo vệ bởi mật khẩu. Đến đây ta cần tìm mật khẩu bằng cách sử dụng john the ripper.

Ok. Sau khoảng thời gian rất ngắn, mật khẩu được tìm ra. Vì đây là mật khẩu rất dễ đoán. Vì vậy, hãy đặt mật khẩu đúng với tiêu chuẩn mà nhà cung cấp dịch vụ đề cập để tránh bị brute force.

Flag1

Flag2 - Nâng cấp đặc quyền

Phân tích crontab cho thấy rằng có một tập lệnh được thực thi bởi root mỗi phút:

Tập lệnh đang sử dụng curl để lấy buildscript.shtừ máy chủ web cục bộ ( overpass.thmtrỏ vào 127.0.0.1trong /etc/hosts). Hy vọng , /etc/hoststệp có thể ghi được:

Người dùng james có quyền sửa đổi với file này

Đổi địa chỉ ip 127.0.0.1 của file overpass.thm thành 10.8.70.162 (địa chỉ ip của attacker):

Tạo 1 file dịch ngược và đặt nó vào cron job:

Khởi động máy chủ web cục bộ và đợi công việc định kỳ nhận nội dung của tệp:

Khởi động trình nghe netcat trên cổng 8443

Nhận được flag

Last updated