网络安全渗透测试端口扫描工具nmap教程
文档:Nmap 官方中文文档
安装nmap
官网:nmap.org
github: GitHub nmap
Windows安装:
winget install nmap -i
端口扫描
nmap -sn 192.168.1.0/24 # 扫描整个子网,检查哪些主机是活跃的
nmap -p 1-100,443,3389 192.168.1.1 # 指定端口扫描
nmap -p - -sS 192.168.1.1 # 扫描一个主机的所有端口
nmap -sV -O 192.168.1.1 # 服务版本检测和操作系统检测
-p
:指定要扫描的端口。如果不指定则是默认的最常见的1000个端口。-F
: 快速扫描,只扫描前100个最常见端口-O
(Operating System Detection):尝试识别目标主机的操作系统。
扫描选项:
-sn
(No port scan):仅进行主机发现,不扫描端口。会自动加上arp扫描功能。-sP
(同上述-sn):Ping 扫描,仅检查哪些主机是活跃的,不扫描端口。-sL
:列表扫描,仅列出目标主机,不进行实际扫描。-sS
:SYN 扫描(半开扫描),发送 SYN 包,但不完成三次握手。较快且隐蔽,较难被防火墙和 IDS 检测到。-sT
: TCP Connect 扫描,进行完整的 TCP 连接(三次握手)。适用于无法发送原始数据包的环境。-sU
:UDP 扫描,发送 UDP 数据包。适用于发现运行在 UDP 端口上的服务。-sA
:ACK 扫描,发送 TCP ACK 包,主要用于检测防火墙规则。可以通过 ACK 扫描检测防火墙的存在。-sW
:窗口扫描,基于 TCP 窗口大小的不同来推断端口状态。-sM
:Maimon 扫描,基于 FIN/ACK 探测,适用于某些防火墙和过滤器。-sF
:FIN 扫描,发送 FIN 包,适用于某些防火墙和过滤器。-sX
:Xmas 扫描,发送 FIN、PSH、URG 标志的组合包,适用于某些防火墙和过滤器。-sN
:NULL 扫描,不设置任何 TCP 标志位,适用于某些防火墙和过滤器。-sO
:IP 协议扫描,检测目标支持的 IP 协议。-sV
(Service Version Detection):检测端口上运行的服务及其版本。-sR
:RPC 扫描,识别和扫描 RPC 服务。
脚本引擎
Nmap 的 NSE(Nmap Scripting Engine)允许用户使用脚本进行更深入的扫描和测试。
NSE 脚本列表
NSE 库列表
nmap -sC 192.168.1.1
nmap --script http-vuln-cve2017-5638 -p 80 192.168.1.1
nmap --script vuln 192.168.1.1
nmap --script ftp-brute 192.168.1.1
nmap --script http-open-proxy 192.168.1.1
nmap --script http-enum 192.168.1.1
nmap --script ssh-brute 192.168.1.1
nmap --script whois-domain 192.168.1.1
nmap --script dns-brute 192.168.1.1
nmap --script malware-detect 192.168.1.1
nmap --script smb-enum-shares 192.168.1.1
nmap --script http-sql-injection 192.168.1.1
nmap --script broadcast-ping 192.168.1.1
nmap --script upnp-info 192.168.1.1
nmap --script http-default-accounts 192.168.1.1
nmap --script http-enum 192.168.1.1
nmap --script nfs-showmount 192.168.1.1
-sC
(Nmap Scripting Engine with default scripts):使用默认的Nmap脚本集进行扫描。--script
:指定要运行的NSE脚本。--script http-vuln-cve2017-5638
:检测特定的HTTP漏洞。--script vuln
:运行所有与漏洞检测相关的脚本。--script ftp-brute
:运行 FTP 弱密码暴力破解脚本。--script http-open-proxy
: 检测目标是否为开放HTTP代理服务器。--script ssh-brute
:运行 SSH 弱密码暴力破解脚本。--script http-enum
:枚举 HTTP 服务和资源,检测HTTP服务版本。--script whois-domain
:查询目标域名的 WHOIS 信息。--script dns-brute
:进行 DNS 子域名暴力破解。--script malware-detect
:检测已知的恶意软件,检测目标系统是否感染了已知的恶意软件。--script smb-enum-shares
:枚举 SMB 共享。--script http-sql-injection
:检测 HTTP SQL 注入漏洞。--script broadcast-ping
:通过广播 ping 扫描发现网络上的主机。--script upnp-info
:UPnP 设备发现,收集 UPnP 设备信息。--script http-default-accounts
:检测 HTTP 服务的默认帐户。--script http-enum
:枚举 HTTP 服务器上的目录和文件。--script nfs-showmount
:枚举 NFS 共享。
网络拓扑图
nmap --traceroute 192.168.1.1
--traceroute
:显示扫描过程中到目标的路由路径(路由跟踪)。
输出格式
nmap -oN scan_results.txt 192.168.1.1
nmap -oX scan_results.xml 192.168.1.1
-oN
:将扫描结果保存为普通文本格式。-oX
:将扫描结果保存为XML格式。
防火墙规避技术
nmap -f 192.168.1.1
nmap --source-port 53 192.168.1.1
-T4
:设置扫描速度模板(0-5,数字越大速度越快)。T4通常用于快速扫描。-f
(Fragment packets):使用分片扫描来绕过防火墙。--source-port 53
:指定源端口。使用53端口常用于绕过防火墙。--scan-delay 100ms
:在每个扫描数据包之间增加 100 毫秒的延迟。减少被检测的可能性。--max-rate 100
:限制扫描速率为每秒 100 个数据包。减少被检测的可能性。--data-length 25
:在每个数据包中添加 25 字节的随机数据。通过混淆扫描流量,使其更难以被检测到。--proxies http://proxy1:8080,http://proxy2:8080
: 指定一个或多个代理服务器。以隐藏源 IP。--tcp-timestamp --win 4096
: 修改 TCP 时间戳和窗口大小,使数据包看起来更合法。--spoof-mac 00:11:22:33:44:55
: 伪造 MAC 地址。绕过防火墙和 IDS。--script firewall-bypass
: 尝试绕过防火墙规则
综合示例
nmap -sS -sV -O -p 1-65535 --traceroute -oN comprehensive_scan.txt 192.168.1.1
-sS
:SYN扫描。-sV
:服务版本检测。-O
:操作系统检测。-p 1-65535
:扫描所有端口。--traceroute
:显示到目标的路由路径。-oN
:将结果保存为普通文本格式。