Linux Pentest Căn Bản – Bài 3: Tấn công, xâm nhập và kiểm soát server RootMe – TryHackMe (Phần 1)

Xin chào,

Trong bài ngày hôm nay, chúng ta sẽ có cơ hội vận dụng lại toàn bộ kiến thức đã học ở series Mạng Căn Bản, Linux Căn Bản và Kali Linux để tấn công, xâm nhập và kiểm soát server RootMe trên TryHackMe.

Do chúng ta đã quá quen với quy trình pentest và cách sử dụng các công cụ Kali Linux như Nmap và Gobuster, các câu lệnh Linux căn bản rồi cũng như cách thực hành trên TryHackMe rồi, nên mình sẽ không nhắc lại các kiến thức này nhiều nữa. Các bạn nào quên, thì hãy xem lại các kiến thức mình đã đề cập tại đây:

Theo đánh giá của cá nhân mình, RootMe không khó hơn Pickle Rick mà chúng ta đã làm cách đây không lâu, nhưng RootMe đòi hỏi bạn phải có kỹ năng Google thông tin tốt để chinh phục thành công. Cụ thể như thế nào thì chúng ta cùng xem trong 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

Sau khi truy cập vào phòng RootMe và bấm nút deploy, đợi trong 2 phút cho hệ thống khởi động hoàn tất, chúng ta sẽ có được IPv4 address của Linux server RootMe như sau:

H1a.1

Chúng ta sẽ thử kiểm tra kết nối từ máy Kali đến server RootMe:

root@ip-10-10-25-116:~# ping 10.10.203.175
H1a.2

Ping thành công. Xác nhận server RootMe đang online và chúng ta có thể kết nối đến nó.

1B – Nmap scans

Vì chúng ta đã quá quen thuộc với Nmap rồi, nên mình sẽ đi nhanh phần này. Bạn nào quên thì có thể xem lại cách dùng công cụ Nmap tại đây nhé.

Chúng ta tiến hành chạy lần lượt các câu lệnh Nmap sau:

Scan tất cả các TCP ports trong hệ thống:

root@ip-10-10-25-116:~# nmap -vv -Pn -T4 -p- -oN tcp-scan 10.10.203.175
H1b.1

Trong hình H1b.1 chúng ta thấy Nmap đã tìm được port 80 và port 22. Chúng ta có thể dự đoán port 80 đang chạy HTTP web service và port 22 đang chạy SSH. (Nếu bạn quên hãy xem lại bài này).

Như mình đã đề cập ở tip số 3 của bài 1 Linux Pentest Căn Bản, do quá trình chạy Nmap sẽ diễn ra khá lâu, nên thay vì ngồi chờ, chúng ta cứ tranh thủ tiết kiệm thời gian bằng cách kiểm tra trước các port mà Nmap đã tìm được. Trong trường hợp này chúng ta sẽ kiểm tra thử port 80 trước (phần 1C bên dưới).

Sau khoản tầm 20 phút, chúng ta có kết quả Nmap scan đầu tiên như sau

H1b.2

Kết luận 1: Tìm thấy port 22 (SSH) và port 80 (HTTP).

Scan UDP ports:

root@ip-10-10-25-116:~# sudo nmap -vv -Pn -T4 -sU -oN udp-scan 10.10.203.175

Chúng ta có kết quả như sau:

H1b.3

Kết luận 2: Các UDP ports tìm được đều ở trạng thái hoặc đang mở (open) hoặc đang bị tường lửa chặn (filtered), chúng ta sẽ lưu ý điểm này để nếu cần thiết sẽ nghiên cứu sâu hơn.

Scan services’ version, hệ điều hành của RootMe và chạy script tìm lỗi trên RootMe:

root@ip-10-10-25-116:~# sudo nmap -vv -Pn -T4 -sC -sV -O -oN script-scan 10.10.203.175

Chúng ta có kết quả như sau:

H1b.4

Kết luận 3:

  • Port 22/tcp chạy OpenSSH 7.6p1
  • Port 80/tcp chạy Apache httpd 2.4.29
  • Server RootMe có thể đang chạy Ubuntu

Chúng ta sẽ lưu ý các thông tin này để sử dụng khi cần thiết.

1C – HTTP web service

Chúng ta sẽ truy cập thử vào địa chỉ 10.10.218.76 của RootMe bằng Firefox trên Kali Linux. Sau khi truy cập, chúng ta sẽ có được giao diện như sau:

H1c.1

Chúng ta thử kiểm tra front end source code của RootMe xem có chứa thông tin gì không nhé. Các bạn click chuột phải > chọn View Page Source

H1c.2

Kiểm tra front end source code của RootMe và không tìm thấy thông tin nào thú vị.

H1c.3

Chúng ta sẽ thử chạy Gobuster để kiểm tra xem liệu có tìm được hidden directories nào không nhé. Bạn nào quên kiến thức về Gobuster có thể xem lại tại đây.

root@ip-10-10-25-116:~# gobuster dir -w commons.txt -u 10.10.203.175

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 nhé.

H1c.4

Ở đây chúng ta tìm được 2 hidden directories khả nghi tên là /panel và /upload. Chúng ta thử lần lượt truy cập vào các directory này để xem nó có gì nhé.

Trên thanh địa chỉ của Firefox, chúng ta gõ địa chỉ sau:

10.10.203.175/uploads/
H1c.5

Chúng ta thấy directory /uploads là một directory trống. Chúng ta thử qua bên directory /panel xem sao nhé.

H1c.6

Ở địa chỉ

10.10.203.175/panel/

Chúng ta tìm được một trang cho phép upload dữ liệu lên webserver.

Kết luận 4: Chúng ta có thể lợi dụng chức năng này để tải lên webserver mục tiêu một file mã độc. Khi file mã độc này chạy trên server mục tiêu, nó sẽ chúng ta có được một shell kết nối đến máy Kali cho phép chúng ta kiểm soát server RootMe từ xa.

2 Identifying vulnerabilities (Xác định lỗi bảo mật để xâm nhập)

Trước khi kiểm tra xem kết luận 4 ở phần 1 của chúng ta có chính xác hay không? trước tiên chúng ta hãy kiểm tra port 22 SSH xem nó có bị dính lỗi bảo mật gì không nhé.

2a – Thử nghiệm xâm nhập OpenSSH 7.6p1

Thử nghiệm xâm nhập với những username và password thường gặp:

Chúng ta sẽ thử lần lượt các cặp username:password phổ biến sau:

admin:admin
admin:password
username:password
root:password
root:root

Câu lệnh của chúng ta như sau (mình sẽ làm mẫu cặp admin:admin và admin:password, các bạn làm các cặp còn lại nhé):

root@ip-10-10-25-116:~# ssh admin@10.10.203.175
H2a.1

Do không có cặp username:password nào có thể dùng được nên chúng ta sẽ chuyển sang bước tiếp theo.

Dùng searchsploit và Google để tìm các phần mềm xâm nhập OpenSSH 7.6p1:

Câu lệnh dùng sẽ như sau:

root@ip-10-10-25-116:~# searchsploit OpenSSH 7.6p1
H2a.2

Chúng ta tìm được 3 phần mềm cho phép chúng ta tìm username thông qua hình thức bruteforce. Tuy nhiên, chúng ta sẽ tạm bỏ qua các phần mềm tấn công này vì quá trình bruteforce có thể kéo dài và dù có tìm ra được username, chúng ta lại phải brute force để tìm password. Nên mình sẽ để giải pháp này là giải pháp cuối cùng nếu tất cả các cách xâm nhập đều thất bại.

Tìm kiếm trên Google cũng không cho kết quả khả quan hơn, nên chúng ta sẽ tạm gác lại OpenSSH và tập trung vào trang web upload file mà chúng ta đã tìm được.

2b – Thử nghiệm tải và chạy file mã độc trên webserver mục tiêu

2b-1 – Cài đặt và chạy Wappalyzer trên Firefox

Đầu tiên, chúng ta sẽ cài 1 plugin nhỏ trên Firefox có tên là Wappalyzer (tải về tại đây).

Wappalyzer là một plugin mạnh mẽ dùng cho mục đích thu thập thông tin hệ thống mà bạn đang truy cập. Khi bạn truy cập vào một website, Wappalyzer sẽ cho bạn biết những web framwork nào đang được sử dụng, trang được code bằng ngôn ngữ gì, version của các framework, v.v.

H2b-1.1

Các bạn click vào nút Add to Firefox, chờ 1 lúc sẽ thấy bảng này xuất hiện.

H2b-1.2

Các bạn ấn vào nút Add, đợi vào phút, các bạn sẽ thấy icon của Wappalyzer xuất hiện trên thanh tab của Firefox như bên dưới.

H2b-1.3

Các bạn click vào icon của Wappalyzer trên tab của Firefox sẽ thấy hiện ra một bảng thông báo ngụ ý “Wappalyzer muốn gửi thông tin ẩn danh về những trang web mà bạn đã truy cập bao gồm cả domain name và công nghệ của những website đó về máy chủ của Wappalyzer. Vậy bạn có đồng ý hay không?”. Vì tính năng này có thể bị lợi dụng để theo dõi người dùng nên mình chọn Disable.

H2b-1.4

Chúng ta cho Wappalyzer chạy thử trên trang Upload file mà chúng ta đã tìm được xem sao nhé.

H2b-1.5

Wappalyzer cho chúng ta biết web này chạy code bằng PHP, hệ điều hành của webserver này là Ubuntu và sử dụng Apache 2.4.29 (giống với kết quả mà ta tìm được trên Nmap).

2b-2 – Tải file reverse shell lên webserver RootMe

Dựa vào kết quả của Wappalyzer chúng ta biết được rằng hệ thống web của RootMe được code bằng PHP, vậy nếu chúng ta có thể upload một file reverse shell được viết bằng PHP lên hệ thống của RootMe và tìm được nơi chứa file đã upload sau đó cho chạy file trên hệ thống của RootMe, chúng ta sẽ lấy được reverse shell.

Chúng ta làm việc đó như sau:

Trên Kali Linux, chúng ta sẽ thử tạo ra một file php như sau:

root@ip-10-10-25-116:~# touch sample.php
H2b-2.1

Upload thử file php này lên RootMe

H2b-2.2

Chúng ta nhận được báo lỗi như sau:

H2b-2.3

Sử dụng Google Dịch để dịch dòng báo lỗi, chúng ta có kết quả như sau:

H2b-2.4

Nếu chúng ta vào trang sau, dùng phím ctrl + f và gõ PHP sẽ thấy rằng, ngoài PHP ra chúng ta còn có các đuôi PHP khác như:

  • .phtml
  • .phtm
  • .php2
  • .php3
  • .php4
  • .php5

Có khả năng quản trị viên của server RootMe chặn file .php nhưng những extension khác như .php2, v.v. lại không bị chặn.

Tuy nhiên, khi chúng ta sẽ nghiên cứu source code của file PHP reverse shell mà chúng ta dự định upload tại trang sau.

Khi đọc phần Limitation, chúng ta thấy có phần lưu ý như sau:

H2b-2.5

Có nghĩa là để chạy được file PHP reverse shell này, hệ thống RootMe phải chạy PHP version 4.3+ hoặc 5+. Khi các bạn Google thêm về extension .php và .php5, các bạn sẽ thấy trên các hệ thống hiện đại, extension .php mặc định dùng để chỉ .php5, nghĩa là 2 extension này là 1 (đọc thêm tại đây).

Vì .php đã bị chặn không cho upload, chúng ta sẽ thử nghiệm xem liệu file đuôi .php5 có upload được lên server RootMe hay không?

Để thử giả thuyết trên, chúng ta sẽ dùng lệnh touch của Linux tạo ra file sample.php5

root@ip-10-10-25-116:~# touch sample.php5
H2b-2.6

Khi upload file sample.php5 chúng ta được kết quả như sau:

H2b-2.7

Kiểm tra Google Dịch và chúng ta có kết quả như sau:

H2b-2.8

Vậy là chúng ta đã thành công tìm ra extension file php có thể dùng để upload file reverse shell.


Trong bài tiếp theo, chúng ta sẽ thực hành upload file reverse shell, upgrade shell và leo thang đặc quyền, các bạn nhớ đón xem nhé.

Xin cám ơn,

Vincent Nguyễn

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s