Nội dung bài viết
Nmap là gì ?

- Nmap (Network Mapper) là một công cụ quét, theo dõi và đánh giá bảo mật một hệ thống mạng được phát triển bởi Gordon Lyon (hay còn được biết đến với tên gọi Fyodor Vaskovich).
- Nmap được công bố lần đầu tiên vào tháng 9 năm 1997.
- Nmap là phần mềm mã nguồn mở miễn phí, ban đầu chỉ được phát triển trên nền tảng Linux sau đó được phát triển trên nhiều nền tảng khác nhau như Windows, Solari, Mac OS… và phát triển thêm phiên bản giao diện người dùng (Zenmap).
Các chức năng của Nmap:
- Phát hiện host (là máy tính hoặc các thiết bị) hoạt động trên môi trường mạng.
- Liệt kê các port (cổng dịch vụ mạng) đang mở trên một host.
- Xác định các dịch vụ chạy trên các port đang mở cùng với phần mềm và phiên bản đang dùng.
- Xác định hệ điều hành của thiết bị.
- Chạy các script (kịch bản) đặc biệt.
Cài đặt Nmap
Trên Windows hãy truy cập trang https://nmap.org và tải về phiên bản mới nhất, cài đặt như các phần mềm thông thường.
Trên Linux (Debian) có thể cài từ Repository (kho chứa) với lệnh:
Trên Linux (Red Hat) có thể cài từ Repository
Trên macOS có thể cài thông qua homebrew (cần cài đặt homebrew trước) và với lệnh:
Hướng dẫn Scan port với NMap
Nmap chạy dưới giao diện dòng lệnh, trên Windows hãy mở “cmd” trên Linux và macOS hãy mở “Terminal” và gõ lệnh “nmap”
Nmap cung cấp nhiều tham số lệnh để thực hiện scan, do đó cần xác định trước các thông tin cần thiết và áp dụng tham số lệnh phù hợp để thực hiện scan. Một số ví dụ về nmap cheatsheet:
Đặc điểm mục tiêu
Tham số | Ví dụ | Chi tiết |
nmap 192.168.1.1 | Quét một IP đơn | |
nmap 192.168.1.1 192.168.2.1 | Quét nhiều IP | |
nmap 192.168.1.1-254 | Quét một dải IP | |
nmap scanme.nmap.org | Quét một miền cụ thể | |
nmap 192.168.1.0/24 | Quét một Subnet (CIDR) | |
-iL | nmap -iL targets.txt | Quét các mục tiêu trong một tệp |
-iR | nmap -iR 100 | Quét ngẫu nhiên 100 IP |
–exclude | nmap –exclude 192.168.1.1 | Quét mà không bao gồm IP được chỉ rõ. |
Kỹ thuật quét
Tham số | Ví dụ | Chi tiết |
-sS | nmap 192.168.1.1 -sS | Quét cổng TCP gửi gói SYN |
-sT | nmap 192.168.1.1 -sT | Quét kết nối cổng TCP |
-sU | nmap 192.168.1.1 -sU | Quét cổng UDP |
-sA | nmap 192.168.1.1 -sA | Quét cổng TCP với gói ACK |
-sW | nmap 192.168.1.1 -sW | Quét các cổng TCP của Windows |
-sM | nmap 192.168.1.1 -sM | Quét các cổng Maimon |
Tìm kiếm các HOST
Tham số | Ví dụ | Chi tiết |
-sL | nmap 192.168.1.1-3 -sL | Không quét, chỉ liệt kê các đối tượng |
-sn | nmap 192.168.1.1/24 -sn | Chỉ tìm kiếm các host, không quét cổng |
-Pn | nmap 192.168.1.1-5 -Pn | Không tìm kiếm các host, chỉ quét cổng |
-PS | nmap 192.168.1.1-5 -PS22-25,80 | Phát hiện Host dựa trên gói SYN đến một cổng TCP cụ thể. |
-PA | nmap 192.168.1.1-5 -PA22-25,80 | Phát hiện Host dựa trên gói ACK đến một cổng TCP cụ thể. |
-PU | nmap 192.168.1.1-5 -PU53 | Phát hiện Host dựa trên gói SYN đến một cổng UDP cụ thể. |
-PR | nmap 192.168.1.1-1/24 -PR | Khám phá các ARP trên mạng nội bộ. |
-n | nmap 192.168.1.1 -n | Không phân giải tên miền. |
Quét các cổng đặc biệt
Tham số | Ví dụ | Chi tiết |
-p | nmap 192.168.1.1 -p 21 | Quét một cổng cụ thể (21) |
-p | nmap 192.168.1.1 -p 21-100 | Quét một dải cổng cụ thể |
-p | nmap 192.168.1.1 -p U:53,T:21-25,80 | Quét nhiều cổng bao gồm UDP và TCP |
-p- | nmap 192.168.1.1 -p- | Quét tất cả các cổng (1-65535) |
-p | nmap 192.168.1.1 -p http,https | Quét cổng theo tên dịch vụ. |
-F | nmap 192.168.1.1 -F | Quét nhanh (100 ports) |
–top-ports | nmap 192.168.1.1 –top-ports 2000 | Quét một dải cổng đầu tiên (2000) |
-p-65535 | nmap 192.168.1.1 -p-65535 | Quét tuần tự từ cổng 1-65535 |
Phát hiện dịch vụ và phiên bản
Tham số | Ví dụ | Chi tiết |
-sV | nmap 192.168.1.1 -sV | Cố gắng phát hiện phiên bản đang chạy trên cổng. |
-sV –version-intensity | nmap 192.168.1.1 -sV –version-intensity 8 | Cấp độ phân tích từ 0-9, càng cao càng chính xác. |
-sV –version-light | nmap 192.168.1.1 -sV –version-light | Chế độ quét nhẹ nhàng, nhanh hơn nhưng thiếu chính xác. |
-sV –version-all | nmap 192.168.1.1 -sV –version-all | Cấp độ chi tiết nhất, chậm hơn nhưng chính xác nhất. |
-A | nmap 192.168.1.1 -A | Cho phép phát hiện hệ điều hành, phát hiện phiên bản, quét tập lệnh và theo dõi. |
Phát hiện hệ điều hành
Tham số | Ví dụ | Chi tiết |
-O | nmap 192.168.1.1 -O | Phát hiện Hệ điều hành dựa trên các tín hiệu của TCP/IP đặc trưng. |
-O –osscan-limit | nmap 192.168.1.1 -O –osscan-limit | Nếu một cổng mở, một cổng đóng, cổng TCP không nhìn thấy thì sẽ không thử phát hiện lại. |
-O –osscan-guess | nmap 192.168.1.1 -O –osscan-guess | Nmap sẽ phải đoán nhiều hơn. |
-O –max-os-tries | nmap 192.168.1.1 -O –max-os-tries 1 | Thiết lập số lần tối đa mà nmap sẽ đoán phiên bản hệ điều hành. |
-A | nmap 192.168.1.1 -A | Cho phép phát hiện hệ điều hành, phát hiện phiên bản, quét tập lệnh và theo dõi. |
Thời gian và hiệu suất
Tham số | Ví dụ | Chi tiết |
-T0 | nmap 192.168.1.1 -T0 | Quét rất chậm. Tránh các hệ thống phát hiện xâm nhập chủ động. |
-T1 | nmap 192.168.1.1 -T1 | Quét chậm. Tránh các hệ thống phát hiện xâm nhập bị động. |
-T2 | nmap 192.168.1.1 -T2 | Quét nhàn rỗi, hạn chế chiếm dụng băng thông và tránh ảnh hưởng đến vận hành của mục tiêu. |
-T3 | nmap 192.168.1.1 -T3 | Quét thông thường, trạng thái mặc định. |
-T4 | nmap 192.168.1.1 -T4 | Quét nhanh, cần băng thông rộng và có ít thời gian để quét. |
-T5 | nmap 192.168.1.1 -T5 | Quét rất nhanh, cần băng thông mạng rộng hơn nữa, đây là chế độ quét nhanh nhất. |
NSE – Các kịch bản quét
Tham số | Ví dụ | Chi tiết |
-sC | nmap 192.168.1.1 -sC | Quét bằng các tập lệnh NSE mặc định. Được coi là hữu ích để khám phá và an toàn |
–script default | nmap 192.168.1.1 –script default | Quét bằng các tập lệnh NSE mặc định. Được coi là hữu ích để khám phá và an toàn |
–script | nmap 192.168.1.1 –script=banner | Quét với một script cụ thể, ví dụ banner. |
–script | nmap 192.168.1.1 –script=http* | Quét với một Wildcard, ví dụ http |
–script | nmap 192.168.1.1 –script=http,banner | Quét với 2 kịch bản đồng thời. |
–script | nmap 192.168.1.1 –script “not intrusive” | Quét bình thường, nhưng loại bỏ các script xâm nhập. |
–script-args | nmap –script snmp-sysdescr –script-args snmpcommunity=admin 192.168.1.1 | Quét với các đối số. |
Các ví dụ hữu ích với NSE
Lệnh | Chi tiết |
nmap -Pn –script=http-sitemap-generator scanme.nmap.org | Tạo bản đồ trang web. |
nmap -n -Pn -p 80 –open -sV -vvv –script banner,http-title -iR 1000 | Tìm kiếm nhanh thông tin Web server |
nmap -Pn –script=dns-brute domain.com | Đoán tên miền phụ |
nmap -n -Pn -vv -O -sV –script smb-enum*,smb-ls,smb-mbenum,smb-os-discovery,smb-s*,smb-vuln*,smbv2* -vv 192.168.1.1 | Chạy các kịch bản quét SMB an toàn. |
nmap –script whois* domain.com | Truy vấn thông tin Domain |
nmap -p80 –script http-unsafe-output-escaping scanme.nmap.org | Phát hiện lỗ hổng XSS |
nmap -p80 –script http-sql-injection scanme.nmap.org | Kiểm tra SQL injection |
Tránh phát hiện của Firewall & IDS
Tham số | Ví dụ | Chi tiết |
-f | nmap 192.168.1.1 -f | Phân mảnh các gói gồm ping để tránh phát hiện. |
–mtu | nmap 192.168.1.1 –mtu 32 | Đặt kích thước gói mtu. |
-D | nmap -D 192.168.1.101,192.168.1.102,192.168.1.103, | Làm giả thông tin IP trước khi quét. |
-D | nmap -D decoy-ip1,decoy-ip2,your-own-ip,decoy-ip3,decoy-ip4 remote-host-ip | |
-S | nmap -S www.microsoft.com www.facebook.com | Quét facebook từ Microsoft. |
-g | nmap -g 53 192.168.1.1 | Sử dụng cổng nguồn để quét |
–proxies | nmap –proxies http://192.168.1.1:8080, http://192.168.1.2:8080 192.168.1.1 | Chuyển tiếp các kết nối qua cổng Proxy. |
–data-length | nmap –data-length 200 192.168.1.1 | Thêm dữ liệu ngẫu nhiên vào gói gửi. |
Ví dụ cụ thể
nmap -f -t 0 -n -Pn –data-length 200 -D 192.168.1.101,192.168.1.102,192.168.1.103,192.168.1.23 192.168.1.1
Xuất kết quả scan
Tham số | Ví dụ | Chi tiết |
-oN | nmap 192.168.1.1 -oN normal.file | Xuất file bình thường ví dụ normal.file |
-oX | nmap 192.168.1.1 -oX xml.file | Xuất ở định dạng XML |
-oG | nmap 192.168.1.1 -oG grep.file | Gộp dữ liệu vào tệp Grep.file |
-oA | nmap 192.168.1.1 -oA results | Xuất cả ba định dạng cùng một lúc. |
-oG – | nmap 192.168.1.1 -oG – | |
–append-output | nmap 192.168.1.1 -oN file.file –append-output | Nối các bản quét vào bản quét trước đó. |
-v | nmap 192.168.1.1 -v | Tăng mức độ chi tiết (sử dụng -vv trở lên để có hiệu quả cao hơn) |
-d | nmap 192.168.1.1 -d | Tăng mức độ gỡ lỗi (sử dụng -dd trở lên để có hiệu quả cao hơn) |
–reason | nmap 192.168.1.1 –reason | Hiển thị lý do một cổng ở trạng thái cụ thể, đầu ra giống như -vv |
–open | nmap 192.168.1.1 –open | Chỉ hiển thị các cổng đang mở (hoặc có thể đang mở) |
–packet-trace | nmap 192.168.1.1 -T4 –packet-trace | Hiển thị tất cả các gói được gửi và nhận |
–iflist | nmap –iflist | Hiển thị giao diện máy chủ và các đường định tuyến. |
–resume | nmap –resume results.file | Phục hồi quét. |
Ví dụ hữu ích về xuất kết quả
Lệnh | Chi tiết |
nmap -p80 -sV -oG – –open 192.168.1.1/24 | grep open | Quét máy chủ web và grep để hiển thị IP nào đang chạy máy chủ web |
nmap -iR 10 -n -oX out.xml | grep “Nmap” | cut -d ” ” -f5 > live-hosts.txt | Tạo và giữ lại danh sách các IP đã phát hiện. |
nmap -iR 10 -n -oX out2.xml | grep “Nmap” | cut -d ” ” -f5 >> live-hosts.txt | Nối thêm các IP vào danh sách |
ndiff scanl.xml scan2.xml | So sánh đầu ra từ nmap bằng cách sử dụng ndif |
xsltproc nmap.xml -o nmap.html | Chuyển đổi tệp nmap xml thành tệp html |
grep ” open ” results.nmap | sed -r ‘s/ +/ /g’ | sort | uniq -c | sort -rn | less | Danh sách được sắp xếp ngược về tần suất các cổng hoạt động. |
Chỉ cần sử dụng tốt nmap, ta có thể tìm thấy rất nhiều thông tin cần thiết. Nmap được xếp vào nhóm các công cụ trinh sát và thu thập thông tin, đây cũng là bước quan trọng trong các quy trình kiểm tra an ninh mạng.
Nguồn: Nmap Cheat Sheet (stationx.net)