Xin chào,
Trong bài thứ 5 của series Linux Pentest Căn Bản này chúng ta sẽ thực hành tấn công, xâm nhập và kiểm soát server Bolt trên TryHackMe. Đây là một bài khá cơ bản và nhẹ nhàng, nhưng đòi hỏi các bạn phải chịu khó Google tìm hiểu cách hoạt động của Bolt CMS để từ đó có thể tìm ra được trang đăng nhập của website mục tiêu. Đây là điều không hiếm khi các bạn chơi CTF hoặc pentest ngoài đời thật nhé.
Thêm nữa, cũng trong bài này, chúng ta sẽ sử dụng Metasploit để tấn công server Bolt, coi như đây là cơ hội để các bạn ôn lại kiến thức sử dụng Metasploit luôn.
Chúng ta cùng vào bài nhé.
1 – Performing reconnaissance (Thu thập thông tin từ bên ngoài)
1A – Kiểm tra kết nối
Các bạn vào phòng Bolt tại đây nhé

Sau khi bấm start machine, mặc dù IP đã hiện ra, nhưng chúng ta vẫn nên theo khuyến cáo của TryHackMe, nên đợi tối thiểu 3 – 4 phút trước khi bắt đầu thực hành nhé.
Đầu tiên, chúng ta sẽ thử ping đến server Bolt.

Ping thành công, chúng ta có thể tấn công server Bolt.
1B – Nmap scans
Scan tất cả TCP ports của Bolt
sudo nmap -vv -Pn -T4 -p- -oN tcp-scan 10.10.151.33

Phát hiện 2 ports 80 và 22. Mình dự đoán có thể đây port 80 sẽ chạy HTTP service và port 22 chạy SSH. Trong thời gian chờ đợi Nmap chạy, chúng ta sẽ kiểm tra thử port 80 bằng trình duyệt Firefox trên Kali Linux nhé. (Các bạn nhảy xuống phần 1C nhé)
Sau khoản 15 phút chạy, Nmap còn phát hiện thêm 1 ports nữa là port 8000, port 8000 này cũng chạy HTTP web service. Nên có thể kết luận server Bolt có 2 web services, một chạy ở port 80 và cái còn lại chạy ở port 8000.

Scan tất cả UDP ports của ports
sudo nmap -vv -Pn -T4 -sU -oN udp-scan 10.10.151.33

Có vẻ tất cả các port UDP đều đã bị tường lửa khóa. Chúng ta sẽ chuyển qua phần Nmap scan tiếp theo.
Scan services’ version, hệ điều hành của RootMe và chạy script tìm lỗi trên Bolt:
sudo nmap -vv -Pn -T4 -p 22,80,8000 -sV -sC -O -oN script-scan 10.10.151.33

Từ kết quả trả về, chúng ta có các thông tin sau:
- Port 22 chạy OpenSSH 7.6p1
- Port 80 chạy Apache httpd 2.4.29
- Port 8000 chạy http service
- Hệ điều hành Bolt đang chạy có thể là Ubuntu
1C – Web service
1C – 1 – Web service trên port 80
Khi đăng nhập vào port 80 của server Bolt, ta được kết quả như sau:

Đây là trang mặc định của Apache nhằm thông báo webservice đang hoạt động bình thường.
Chúng ta sẽ thử kiểm tra front-end source code xem sao nhé.
Các bạn ấn tổ hợp Ctrl + U

Sau khi kiểm tra hết tất cả source code nhưng không tìm thấy thông tin nào thú vị, mình quyết định sẽ dùng Gobuster.
Wordlist dùng trong câu lệnh bên trên đã được chúng ta sử dụng 1 lần trong bài tấn công Linux server Pickle Rick, bạn nào chưa có thì có thể download lại tại đây. Sau khi download wordlist, các bạn cd đến directory chứa wordlist và gõ câu lệnh Gobuster bên dưới nhé.
gobuster dir -u 10.10.151.33 -w common-web-content.txt -x .php,.txt,.sh

Không tìm thấy thông tin gì thú vị, chúng ta sẽ thử chuyển sang webserver ở port 8000 xem sao nhé.
1C – 2 – Web service trên port 8000
Khi truy cập vào webservice của server Bolt trên port 8000, chúng ta có được giao diện web như bên dưới.

Cuộn trang xuống một tí ở phần Lastest Entries, các bạn sẽ thấy 2 bài post có chứa thông tin khá thú vị:


Dựa vào 2 bài post này chúng ta có được các thông tin sau:
- Jake là admin của hệ thống
- Username đăng nhập của Jake là bolt
- Password đăng nhập của Jake là boltadmin123
Mặc dù chúng ta hiện có 2 web service có thể dùng để đăng nhập hệ thống là SSH và Webservice, nhưng dựa vào nội dung của các bài post, mình nghĩ username và password này dùng để đăng nhập Webservice hơn là SSH. Nhưng để chắc chắn, chúng ta cứ thử trên cả 2 xem sao nhé.
Ngoài ra cũng còn một thông tin khá thú vị đó là Bolt server đang chạy một nền tảng web có tên là Bolt.

Chúng ta cũng sẽ chạy Gobuster với Webservice này để xem xem nó có chứa directories hay file ẩn nào không.
gobuster dir -u http://10.10.151.33:8000 -w common-web-content.txt -x .php,.txt,.sh

Mình đã thử tất cả các kết quả tìm được và không thấy trang đăng nhập.
Mình quyết định theo đường link The Bolt site trên Webservice để đi đến trang chủ của nền tảng CMS web Bolt. (Trang boltcms này không thuộc TryHackMe các bạn nhé).


Mình click vào mục Documentation > User Manual > Login, thì được hướng dẫn như sau:

Có nghĩa là để vào được trang đăng nhập, URL của chúng ta nên như sau:
http://<url>/bolt
Chúng ta sẽ thử xem nhé.

Và chúng ta đã tìm được trang đăng nhập.
2 – Identifying vulnerabilities (Xác định lỗi bảo mật để xâm nhập)
Chúng ta sẽ thử sử dụng username và mật khẩu đã tìm được là bolt:boltadmin123 để đăng nhập thử xem nhé.

Chúng ta đã đăng nhập vào trình điều khiển web thành công. Ở trình điều khiển web, chúng ta thấy được version CMS Bolt đang được dùng là 3.7.1.
Chúng ta sẽ dùng Metasploit để kiểm tra xem CMB Bolt version 3.7.1 có dính lỗi bảo mật gì hay không nhé. Các bạn gõ lần lượt 4 câu lệnh bên dưới, bạn nào quên thì xem lại bài cũ tại đây nhé.
sudo su
systemctl start postgresql
msfdb init
msfconsole

Sau đó chúng ta sẽ search lỗi với câu lệnh sau:
search bolt

Chúng ta tìm thấy CMS Bolt dính 2 lỗi bảo mật. Vì lỗi bảo mật số 1 gần với version của mục tiêu chúng ta đang tấn công nhất, nên chúng ta sẽ thử dùng lỗi này xem sao nhé.
3 – Exploiting vulnerabilities (Tiến hành xâm nhập)
Để dùng lỗi số 1, ta dùng lệnh:
use 1

Sau đó kiểm tra các options của module tấn công này bằng lệnh
show options

Chúng ta sẽ cung cấp các thông tin cần thiết với lệnh set. Bạn nào quên thì xem lại bài này nhé.

Bảng options của các bạn sẽ giống như thế này.

Sau đó chúng ta sẽ thực thi lệnh exploit để Metasploit bắt đầu tấn công.

Và chúng ta đã tấn công thành công. Vì server Bolt chỉ có duy nhất account user root và không có người dùng với phân quyền thấp hơn, nên sau khi xâm nhập thành công, chúng ta mặc định có phân quyền của root luôn, do đó không cần phải leo thang đặc quyền nữa.
Vậy là chúng ta đã tấn công, xâm nhập và kiểm soát server Bolt thành công.
Ngoài cách sử dụng Metasploit, chúng ta còn có thể sử dụng đoạn code sau để tấn công, tuy nhiên, do cách sử dụng có phần hơi phức tạp, nên mình sẽ không đề cập đến. Bạn nào giỏi Python có thể đọc sơ qua và thử dùng đoạn code này tấn công mà không cần đến Metasploit xem sao nhé.
Chúc các bạn học tốt,
Vincent Nguyễn