
Hacker mũ trắng xâm nhập hệ thống như thế nào? Quy trình pentest 6 giai đoạn từ trinh sát đến web shell
Vũ Khôi
Tác giả tại Wotech Electronics Blog

Hacker mũ trắng xâm nhập hệ thống như thế nào? Quy trình pentest 6 giai đoạn từ trinh sát đến web shell
Không có màn hình đen chữ xanh chớp nhoáng, không có "một câu lệnh thần thánh" bẻ khóa máy chủ trong tích tắc. Một bài chia sẻ đúc kết từ khóa học thực hành của freeCodeCamp cho thấy công việc kiểm thử xâm nhập (pentest) ngoài đời thực là một quy trình 6 giai đoạn có hệ thống và kỷ luật: từ trinh sát mạng bằng Nmap, rà soát bề mặt web, vượt qua lớp xác thực, khai thác lỗ hổng tải tệp để cắm web shell, cho đến tự động hóa toàn bộ khâu trinh sát bằng Bash và Python.
Trả lời nhanh
- Pentest (kiểm thử xâm nhập) là việc mô phỏng một cuộc tấn công thật vào hệ thống — nhưng có ủy quyền hợp pháp — để tìm ra lỗ hổng trước khi kẻ xấu tìm thấy chúng.
- Quy trình chuẩn gồm 6 giai đoạn: (1) nền tảng Linux và dòng lệnh, (2) trinh sát và quét mạng bằng Nmap, (3) rà soát và fuzzing bề mặt web, (4) khai thác lớp xác thực bằng Burp Suite và ffuf, (5) khai thác lỗ hổng tải tệp để cài web shell, (6) tự động hóa bằng Bash và Python.
- Nguồn của quy trình này: khóa học thực hành "How Ethical Hackers Actually Break Into Systems" của freeCodeCamp (giảng viên Declan Middleton), thực hiện toàn bộ trong một máy ảo CTF chuyên dụng — môi trường lab hợp pháp và an toàn.
- Bài học lớn nhất cho người phòng thủ: bảo mật là một chuỗi mắt xích — chỉ một dịch vụ để lộ phiên bản, một trang đăng nhập không giới hạn số lần thử, hoặc một hàm upload thiếu kiểm tra đuôi tệp cũng đủ để mất toàn bộ hệ thống.
- Ranh giới bắt buộc: mọi kỹ thuật trong bài chỉ được áp dụng trên hệ thống của chính bạn hoặc khi có ủy quyền bằng văn bản; xâm nhập trái phép vào hệ thống của người khác là vi phạm pháp luật.
Pentest là gì và khác gì với "hack" trái phép?
Kiểm thử xâm nhập (penetration testing, gọi tắt là pentest) là hoạt động trong đó chuyên gia bảo mật — hacker mũ trắng — được chủ hệ thống ủy quyền để đóng vai kẻ tấn công: dùng chính các kỹ thuật, công cụ mà tội phạm mạng sử dụng nhằm tìm, chứng minh và báo cáo lỗ hổng trước khi chúng bị khai thác thật. Điểm khác biệt duy nhất nhưng quyết định giữa pentest và tấn công trái phép nằm ở sự ủy quyền và phạm vi được thỏa thuận trước: cùng một thao tác quét cổng, nếu có hợp đồng và phạm vi rõ ràng thì là dịch vụ bảo mật; nếu không, đó là hành vi xâm nhập trái phép có thể bị truy cứu hình sự.
Trong đào tạo, pentest được thực hành trong các phòng lab và máy ảo CTF (Capture The Flag) — những hệ thống được dựng lên cố ý có lỗ hổng để học viên tấn công hợp pháp. Bài chia sẻ gốc của tác giả Lữ Minh Khương (nhóm VGU Tech Alumni) là bản đúc kết một khóa học như vậy của freeCodeCamp, và tác giả cũng ghi rõ ngay từ đầu: đây là nội dung khóa học, không phải "video thực chiến" ngoài đời.
Tổng quan 6 giai đoạn
| Giai đoạn | Mục tiêu | Công cụ / kỹ thuật chính |
|---|---|---|
| 1. Nền tảng Linux & dòng lệnh | Làm chủ môi trường làm việc và máy mục tiêu | Parrot OS / Kali Linux, Terminal, quản trị user và phân quyền |
| 2. Trinh sát & quét mạng | Vẽ bản đồ cổng mở, dịch vụ và phiên bản | Nmap (-sV, -sC, quét ẩn danh decoy/SYN, ProxyChains) |
| 3. Rà soát bề mặt web | Tìm công nghệ, thư mục và endpoint ẩn | whatweb, curl -I, ffuf, dirsearch, wordlist SecLists |
| 4. Khai thác xác thực | Vượt qua cổng đăng nhập quản trị | Burp Suite chặn request, ffuf brute-force (Cluster Bomb), rockyou.txt |
| 5. Khai thác & web shell | Biến quyền truy cập ứng dụng thành quyền điều khiển máy chủ | searchsploit / Exploit-DB, lỗi Arbitrary File Upload, web shell PHP |
| 6. Tự động hóa | Tăng tốc khâu trinh sát lặp lại | Bash script quét host/cổng, Python (socket, requests) |
Giai đoạn 1: Vì sao mọi thứ bắt đầu từ Linux và dòng lệnh?
Hầu hết công cụ bảo mật mạnh nhất đều vận hành trên Linux (các bản phân phối chuyên dụng như Parrot OS hay Kali Linux), và người làm bảo mật thao tác chủ yếu qua Terminal thay vì giao diện đồ họa — vì dòng lệnh cho phép kiểm soát chính xác tiến trình, quyền hạn và mạng, đồng thời dễ ghi lại và tự động hóa.
Các thao tác nền tảng gồm hai nhóm: định danh và quản trị hệ thống — kiểm tra phiên làm việc hiện tại (whoami, hostname, phiên bản kernel uname -r), quản trị tài khoản và phân quyền sudo (usermod -aG sudo, chmod) — và kiểm tra kết nối mạng: xem interface nội bộ (ip a, ifconfig), kiểm tra phản hồi gói tin (ping), quét các thiết bị đang online trong cùng subnet (netdiscover). Nghe đơn giản, nhưng đây là "bảng chữ cái" mà mọi giai đoạn sau đều xây lên trên.
Giai đoạn 2: Nmap vẽ bản đồ hệ thống như thế nào?
Khi tiếp cận một địa chỉ IP lạ, mục tiêu đầu tiên là biết máy đó đang mở những "cánh cửa" nào:
- Quét cổng và dịch vụ cơ bản: Nmap xác định các cổng đang mở — trong bài lab kinh điển là cổng 22 (SSH) và 80 (HTTP).
- Quét phiên bản (
nmap -sV): nhận diện chính xác phần mềm và phiên bản, ví dụ web server Apache 2.4.x chạy trên Debian. Thông tin phiên bản là chìa khóa để tra cứu các mã khai thác đã được công bố cho đúng phiên bản đó. - Quét script mặc định (
nmap -sC): tự động kiểm tra các tệp nhạy cảm nhưrobots.txt— nơi đôi khi vô tình làm lộ đường dẫn quản trị bị ẩn, chẳng hạn một trình quản lý tệp tại/extplorer. - Kỹ thuật quét khó bị phát hiện: trong các bài kiểm thử cần tránh hệ thống phát hiện xâm nhập (IDS/Firewall), pentester kết hợp IP mồi (Decoy,
-D RND:10), quét SYN lén (-sS) hoặc định tuyến qua ProxyChains để phân tán dấu vết.
Với người phòng thủ, thông điệp ở giai đoạn này rất rõ: mọi dịch vụ mở ra ngoài và mọi phiên bản bị lộ đều là thông tin miễn phí cho kẻ tấn công.
Giai đoạn 3: Rà soát bề mặt web tìm gì?
Khi cổng 80 mở nhưng trang chủ chỉ là trang mặc định, trọng tâm chuyển sang tầng ứng dụng:
- Định danh công nghệ:
whatwebhoặc phân tích HTTP header quacurl -Icho biết kiến trúc máy chủ, ngôn ngữ backend (ví dụ PHP) và các thư viện liên quan. - Fuzzing thư mục và file ẩn: các công cụ như dirsearch hoặc ffuf kết hợp danh sách từ (wordlist) chuẩn như SecLists để thử hàng loạt đường dẫn, tìm endpoint, tham số ẩn hoặc subdomain còn tồn tại mà giao diện không hề liên kết tới.
- Lọc nhiễu bằng mã trạng thái: loại trừ các phản hồi 403, 404, 301 giúp tập trung vào những tài nguyên thực sự tồn tại thay vì chìm trong hàng nghìn kết quả giả.
Giai đoạn 4: Lớp đăng nhập bị vượt qua ra sao?
Tìm thấy cổng đăng nhập quản trị nhưng không có tài khoản, pentester xử lý theo hai bước:
- Bắt và phân tích gói tin bằng Burp Suite: Burp đóng vai proxy chặn giữa trình duyệt và server, ghi lại cấu trúc của HTTP POST request đăng nhập — các tham số
username,password, cookie phiên — để hiểu chính xác cơ chế xác thực. - Brute-force tự động bằng ffuf: raw request vừa bắt được được đưa vào ffuf với kỹ thuật Cluster Bomb (thử kết hợp nhiều danh sách cùng lúc) và wordlist mật khẩu phổ biến như
rockyou.txt. Nếu hệ thống không có cơ chế giới hạn số lần thử (rate limiting) và vẫn dùng thông tin đăng nhập mặc định hoặc yếu, việc tìm ra cặp tài khoản đúng chỉ còn là vấn đề thời gian.
Đây là một trong những điểm yếu xuất hiện nhiều nhất ngoài đời thực — và cũng là điểm dễ vá nhất: giới hạn số lần đăng nhập sai, khóa tài khoản tạm thời, bắt buộc mật khẩu mạnh và bật xác thực hai lớp.
Giai đoạn 5: Từ quyền đăng nhập đến web shell bằng cách nào?
Đăng nhập được vào ứng dụng quản lý tệp (trong bài lab là eXtplorer — một trình quản lý tệp web cũ), pentester tiếp tục:
- Tra cứu lỗ hổng đã biết: dùng
searchsploit(cơ sở dữ liệu Exploit-DB) để kiểm tra phiên bản phần mềm đang chạy có lỗ hổng công khai nào không. - Khai thác lỗi tải tệp tùy ý (Arbitrary File Upload): nếu ứng dụng cho phép tải lên hoặc tạo tệp mới mà không kiểm tra chặt loại tệp, kẻ tấn công có thể đẩy một web shell — đoạn mã PHP nhỏ (ví dụ p0wny-shell) đóng vai trò console điều khiển qua trình duyệt — lên thư mục web.
- Kích hoạt web shell: chỉ cần gọi đúng đường dẫn tệp vừa tải lên, attacker đã có giao diện dòng lệnh tương tác ngay trên máy chủ mục tiêu: đọc, ghi tệp hệ thống và chuẩn bị cho bước leo thang đặc quyền tiếp theo.
Chuỗi tấn công này cho thấy một hàm upload "cho tiện" có thể phá vỡ toàn bộ các lớp bảo vệ phía trước nó.
Giai đoạn 6: Vì sao pentester phải tự viết công cụ?
Một pentester chuyên nghiệp không gõ lại từng lệnh thủ công cho mỗi mục tiêu. Tự động hóa khâu trinh sát là kỹ năng bắt buộc:
- Bash script: đóng gói chuỗi kiểm tra host còn sống (
ping) và quét nhanh danh sách cổng mục tiêu, tiết kiệm thời gian ở vòng đầu. - Công cụ recon bằng Python: dùng thư viện
socketđể phân giải tên miền sang IP (gethostbyname) và thư việnrequestsđể tự động lấy mã trạng thái HTTP, trích xuất toàn bộ response header và phân tích cấu trúc phản hồi của máy chủ.
Viết được công cụ riêng cũng là ranh giới giữa "người dùng tool" và "người hiểu hệ thống": khi công cụ có sẵn không đáp ứng được tình huống, pentester tự chế được công cụ thay thế.
Người phòng thủ rút ra gì từ quy trình này?
Mỗi giai đoạn tấn công đều tương ứng với một lớp phòng thủ cụ thể mà doanh nghiệp có thể tự rà soát ngay:
| Điểm yếu bị khai thác | Cách vá tương ứng |
|---|---|
| Dịch vụ thừa vẫn mở cổng, để lộ phiên bản phần mềm | Đóng cổng/dịch vụ không dùng, ẩn thông tin phiên bản, vá lỗi và cập nhật định kỳ |
| Thư mục, endpoint quản trị bị dò ra bằng fuzzing | Không dựa vào "đường dẫn bí mật" để bảo mật; đặt xác thực và giới hạn IP cho khu vực quản trị |
| Đăng nhập không rate limiting, mật khẩu mặc định/yếu | Giới hạn số lần thử, khóa tạm thời, đổi mọi thông tin mặc định, bật MFA, dùng mật khẩu mạnh |
| Hàm upload không kiểm tra loại tệp | Kiểm tra đuôi tệp và nội dung ở phía server, lưu tệp ngoài thư mục web, không cấp quyền thực thi cho thư mục upload |
| Không ai đọc log | Giám sát log đăng nhập và truy cập bất thường — hầu hết các bước ở trên đều để lại dấu vết rõ ràng trong log |
Câu hỏi thường gặp
Học pentest bắt đầu từ đâu?
Theo đúng lộ trình của khóa học được đúc kết: vững Linux và dòng lệnh trước, sau đó là kiến thức mạng (cổng, giao thức, DNS), rồi mới đến công cụ quét và khai thác — và chỉ thực hành trong phòng lab hoặc máy ảo CTF được phép, thay vì thử trên hệ thống thật của người khác.
Pentest có phải nghề "toàn dùng tool có sẵn" không?
Không. Tool có sẵn (Nmap, Burp Suite, ffuf) chỉ là lớp vỏ; phần quyết định là tư duy hệ thống — biết đọc kết quả quét, nối các manh mối nhỏ thành chuỗi tấn công và tự viết script tự động hóa bằng Bash/Python khi cần, như giai đoạn 6 của quy trình.
Doanh nghiệp nhỏ không có đội bảo mật thì tự kiểm tra gì trước?
Ba việc rẻ và hiệu quả nhất tương ứng với ba mắt xích gãy trong bài: đổi toàn bộ mật khẩu mặc định và bật giới hạn số lần đăng nhập sai; rà soát mọi chức năng upload tệp trên website; đóng các cổng/dịch vụ không dùng và cập nhật phần mềm đã hết hỗ trợ.
Web shell nguy hiểm đến mức nào?
Rất nguy hiểm: web shell cho kẻ tấn công một giao diện điều khiển tương tác ngay trên máy chủ web — đọc trộm dữ liệu, sửa nội dung website, cài thêm mã độc và dùng máy chủ làm bàn đạp tấn công tiếp vào mạng nội bộ. Nó thường là điểm bắt đầu của các vụ rò rỉ dữ liệu lớn.
Thử các kỹ thuật này lên website của người khác để "kiểm tra giúp" có sao không?
Có sao — về mặt pháp lý, đó là hành vi xâm nhập trái phép dù ý định tốt, vì không có ủy quyền của chủ hệ thống. Mọi hoạt động pentest hợp pháp đều cần thỏa thuận và phạm vi bằng văn bản trước khi thực hiện, hoặc chỉ diễn ra trong môi trường lab/CTF.
Kết luận
Bức tranh toàn cảnh từ khóa học của freeCodeCamp cho thấy pentest thực thụ là công việc của sự kiên nhẫn và phương pháp: phần lớn thời gian nằm ở trinh sát, rà soát và nối manh mối, còn khoảnh khắc "chiếm được máy chủ" chỉ là kết quả cuối của một chuỗi mắt xích đã yếu sẵn. Với người làm quản trị và chủ doanh nghiệp, hiểu quy trình này không phải để tấn công ai, mà để biết chính xác hệ thống của mình đang hở ở mắt xích nào — trước khi có người khác chỉ ra bằng cách không mong muốn.
Nguồn: bài chia sẻ của Lữ Minh Khương trong nhóm VGU Tech Alumni trên Facebook (03/11/2026), đúc kết khóa học "How Ethical Hackers Actually Break Into Systems" của freeCodeCamp, biên tập và bổ sung góc nhìn phòng thủ bởi Wotech Electronics.
Bài viết liên quan

4 tháng 11, 2026 · 13 phut doc
Benchmark Claude Code \"solo\" vs đội 3 agent: đa agent chậm gần gấp đôi, rẻ hơn một chút, nhưng thắng ở task bảo mật lớn
Một lập trình viên vừa công bố kết quả đo đạc khá hiếm hoi: cho Claude Code làm một mình đấu trực tiếp với một "đội" 3 agent — Claude làm trưởng nhóm điều phối, agent giá rẻ pi viết code, Codex revie…

3 tháng 11, 2026 · 6 phut doc
Vận hành đội 5 AI agent OpenClaw 24/7 dưới 50 USD/tháng: bài học tổ chức
Một chia sẻ đang được cộng đồng AI quan tâm: có người đang vận hành một "đội" gồm 5 AI agent trên nền tảng mã nguồn mở OpenClaw, chạy liên tục 24/7, với tổng chi phí dưới 50 USD mỗi tháng. Con số này…

2 tháng 11, 2026 · 10 phut doc
Google mở mã nguồn Elephant-Goldfish Model: thiết kế với \"voi\", review với \"cá vàng\" để AI hết tự khen mình
Google vừa công khai Elephant-Goldfish Model (EGM) — bộ kỹ năng mã nguồn mở cho phép hàng nghìn kỹ sư của hãng dùng AI agent để viết bản thiết kế phần mềm rồi cho một nhóm "reviewer mất trí nhớ" soi …