免责声明:使用本教程或工具,用户必须遵守所有适用的法律和法规,并且用户应自行承担所有风险和责任。
一、Nmap介绍
Nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的 网络探测和安全审核的工具,它的设计目标是快速地扫描大型网络,当然用它扫描单个主机也没有问题。
Nmap以新颖的方式使用原始IP报文来发现网络上有哪些主机,那些主机提供什么服务(应用程序名和版本),那些服务运行在什么操作系统(包括版本信息), 它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。虽然Nmap通常用于安全审核, 许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息, 管理服务升级计划,以及监视主机和服务的运行。
二、功能概述
- 查看主机存活
- 扫描目标主机开放端口
- 识别目标主机操作系统
- 查看目标主机服务的版本信息
- 漏洞探测
三、Nmap参数详解
Nmap用法格式如下:
- 目标指定
- 可以传递主机名、IP地址、网络等。
- 例如:scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
- -iL <输入文件名>:从指定文件中的主机/网络列表中输入,导入扫描地址
- -iR <主机数量>:随机选择目标
- --exclude <主机1[,主机2][,主机3],...>:排除主机/网络
- --excludefile <排除文件>:从文件中排除列表
- 主机发现
- -sL:列表扫描 - 仅列出要扫描的目标,不进行扫描
- -sn:Ping扫描 - 禁用端口扫描,不扫描端口,只主机发现,跟-sP一样
- -Pn:将所有主机视为在线 - 跳过主机发现
- -PS/PA/PU/PY[端口列表]:对给定端口执行TCP SYN/ACK、UDP或SCTP发现
- -PE/PP/PM:ICMP回显、时间戳和网络掩码请求发现探针
- -PO[协议列表]:IP协议Ping,发送ICMP报文
- -n/-R:永不进行DNS解析,可以加快扫描速度 /始终解析
- --dns-servers <服务器1[,服务器2],...>:指定自定义DNS服务器
- --system-dns:使用操作系统的DNS解析器
- --traceroute:追踪到每个主机的跳数路径,一般不启用,会比较慢
- 端口扫描技术
Nmap支持的6种端口状态:
- open(开放)
- closed(关闭)
- filtered(被过滤的)
- unfiltered(未被过滤) 可访问但不确定开放情况
- open|filtered(开放或被过滤)无法确定端口是开放的还是被过滤的
- closed|filtered(关闭或被过滤)无法确认端口是关闭的还是被过滤的
- -sS:TCP SYN扫描,半开放状态,扫描速度快隐蔽性好,能够明确区分端口状态
- -sT:TCP连接扫描,容易产生记录,效率低
- -sA:TCP ACK扫描,只设置ACK标志位,可以区分被过滤与过滤
- -sW:窗口扫描
- -sM:Maimon扫描
- -sU:UDP扫描
- -sN/sF/sX:TCP空、FIN和Xmas扫描
- --scanflags <标志>:自定义TCP扫描标志
- -sI <僵尸主机[:探测端口]>:空闲扫描,利用僵尸主机进行扫描
- -sY/sZ:SCTP INIT/COOKIE-ECHO扫描
- -sO:IP协议扫描,可以确定目标机支持哪些IP协议(TCP,ICMP,IGMP)
- -b :FTP反弹扫描
- 端口指定和扫描顺序
- -p <端口范围>:仅扫描指定的端口
- -p U:[UDP端口],T:[TCP端口]:对指定端口进行指定协议的扫描
- 例如:-p U:53,111,137,T:21-25,80,139,8080,S:9
- 注意,要既扫描 UDP又扫描TCP,您必须指定 -sU ,以及至少一个TCP扫描类型(如 -sS,-sF,或者 -sT)
- --exclude-ports <端口范围>:从扫描中排除指定的端口
- -F:快速模式 - 扫描的端口比默认扫描少(仅扫描100个最常用的端口)
- -r:顺序扫描端口 - 不随机化
- --top-ports <数量>:扫描最常见的<数量>个端口
- --port-ratio <比例>:扫描比<比例>更常见的端口
- 服务/版本检测
- -sV:探测开放端口以确定服务/版本信息
- --version-intensity <等级>:设置从0(轻量级)到9(尝试所有探测),默认是7,强度越高,时间越长,服务越可能被正确识别
- --version-light:限制到最可能的探测,轻量扫描(强度为2)
- --version-all:尝试所有探测(强度为9)
- --version-trace:显示详细的版本扫描活动(用于调试)
- 脚本扫描
- -sC:等同于 --script=default,启用默认脚本扫描模式
- --script=: 是一个由逗号分隔的目录、脚本文件或脚本类别列表
- --script-args=:向脚本提供参数
- --script-args-file=文件名:在文件中提供NSE脚本参数
- --script-trace:显示发送和接收的所有数据
- --script-updatedb:更新脚本数据库
- --script-help=:显示有关脚本的帮助信息。 是一个由逗号分隔的脚本文件或脚本类别列表
- 操作系统检测
- -O:启用操作系统检测,-A可以同时启用操作系统检测和版本检测
- --osscan-limit:针对指定的目标进行操作系统检测
- --osscan-guess:更主动积极地猜测操作系统
- 定时和性能
- 接受
- -T <0-5>:设置定时模板(数值越高越快)
- --min-hostgroup/max-hostgroup <大小>:调整并行主机扫描组大小,Nmap具有并行扫描多主机端口或版本的能力,Nmap将多个目标IP地址空间分成组,然后在同一时间对一个组进行扫描。通常,大的组更有效。缺点是只有当整个组扫描结束后才会提供主机的扫描结果
- --min-parallelism/max-parallelism :探测并行化
- --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <时间>:指定探测往返时间。
- --max-retries <尝试次数>:限制端口扫描探测的重传次数。
- --host-timeout <时间>:在这么久之后放弃目标
- --scan-delay/--max-scan-delay <时间>:调整探测之间的延迟
- --min-rate <数量>:每秒发送数据包不低于 <数量>
- --max-rate <数量>:每秒发送数据包不高于 <数量>
- 防火墙和IDS规避和伪装
- -f; --mtu <值>:分片数据包(可选地使用给定的MTU),将TCP头分段在几个包中,使得包过滤器、 IDS以及其它工具的检测更加困难
- -D <诱饵1,诱饵2[,ME],...>:用诱饵隐蔽扫描,使用逗号分隔每个诱饵主机,也可用自己的真实IP作为诱饵
- -S :伪装源地址
- -e <接口>:使用指定的接口
- -g/--source-port <端口号>:使用给定的端口号
- --proxies :通过HTTP/SOCKS4代理中继连接
- --data <十六进制字符串>:向发送的数据包追加自定义负载
- --data-string <字符串>:向发送的数据包追加自定义ASCII字符串
- --data-length <数量>:向发送的数据包追加随机数据
- --ip-options <选项>:发送带有指定IP选项的数据包
- --ttl <值>:设置IP生存时间字段
- --spoof-mac :伪装你的MAC地址
- --badsum:发送带有错误TCP/UDP/SCTP校验和的数据包
- 输出
- -oN <文件>:标准输出
- -oX <文件>:XML格式输出
- -oS <文件>:脚本格式输出
- -oG <文件>:将扫描结果输出为普通、XML、s|
- -oA <基名>:一次性输出三种主要格式
- -v:增加详细程度(使用 -vv 或更多以增强效果)
- -d:增加调试级别(使用 -dd 或更多以增强效果),9最高
- --reason:显示端口处于特定状态的原因
- --open:仅显示开放(或可能开放)的端口
- --packet-trace:显示所有发送和接收的数据包
- --iflist:打印主机接口和路由(用于调试)
- --append-output:追加到指定的输出文件而不是覆盖
- --resume <文件名>:恢复中断的扫描
- --noninteractive:禁用通过键盘的运行时交互
- --stylesheet <路径/URL>:XSL样式表,用于将XML输出转换为HTML
- --webxml:引用Nmap.Org的样式表,以获得更便携的XML
- --no-stylesheet:防止将XSL样式表与XML输出关联
- 杂项
- -6:启用IPv6扫描
- -A:启用操作系统检测、版本检测、脚本扫描和traceroute
- --datadir <目录名>:指定自定义Nmap数据文件位置
- --send-eth/--send-ip:使用原始以太网帧或IP数据包发送
- --privileged:假设用户具有完全权限
- --unprivileged:假设用户缺乏原始套接字权限
- -V:打印版本号
- -h:打印此帮助摘要页面。
四、Nmap用法
使用示例
常用扫描命令
-
普通/综合扫描 Nmap 会自动检测目标主机 192.168.30.196 上开放的常见端口,并尝试识别端口对应的服务及版本信息,这种扫描方式速度较快,但可能不会扫描到所有端口,适用于快速初步了解目标主机的端口开放情况和基本服务信息 -ANmap 会自动检测目标主机 192.168.30.196 包含1-10000端口的ping扫描,操作系统扫描,路由跟踪,服务探测,会显示端口状态,服务信息,以及服务版本,会比普通扫描慢
-
扫描整个网段(支持CIDR和地址范围) - nmap 192.168.30.0/24
- nmap 192.168.30.1-254
复制代码Nmap将扫描网段192.168.30.1-192.168.30.254内在线的主机,并且初步显示在线主机的端口,端口状态以及服务类型
-
扫描文件中的主机列表
以普通扫描方式扫描文件中的主机 还可以额外添加参数,比如启用综合扫描
-
主机发现(不扫描端口) - nmap -sn 192.168.30.1-254
- nmap -sP 192.168.30.0/24
复制代码-sn 参数表示只进行主机存活探测,不进行端口扫描,这里是对 192.168.30.1 - 192.168.30.254这 个 IP 地址段内的主机进行存活检测 -sP参数也是一样表示只进行主机存活探测,不进行端口扫描,采用CIDR方式对192.168.30.1 - 192.168.30.254这 个 IP 地址段内的主机进行存活检测
-
扫描特定端口 - nmap 192.168.30.196 -p 22,80
- nmap 192.168.30.196 -p 1-65535
- nmap 192.168.30.196 -p-
复制代码使用-p 1-65535参数指定扫描目标主机 192.168.30.196 的所有 65535 个端口,-p-也是扫描全端口,扫描速度会比较缓慢
-
TOP100 端口扫描 - nmap -sT -A --top-ports=100 192.168.30.1-254 -oG top-port-sweep.txt
复制代码多种功能,-A 参数启用全面扫描模式,包括操作系统探测、版本探测、脚本扫描等--top-ports=100 指定只扫描最常见的 100 个端口,这种扫描方式在保证一定全面性的同时, 通过只扫描常见端口可以提高扫描速度,适用于对一个网络范围内的主机进行快速的初步安全评估,获 取主机开放的常见端口信息、对应的服务版本以及操作系统类型等基本信息,并将结果以 Grepable 格式输出到 top-port-sweep.txt 文件中,方便后续整理和分析 查看top-port-sweep.txt
-
SYN扫描 -sS 参数表示使用 SYN 扫描方式,SYN 扫描是一种半开放扫描,它不建立完整的 TCP 连接,而是发送 一个 SYN 包到目标端口,如果收到 SYN + ACK 响应,则表示端口开放,如果收到 RST 响应,则表示端口关闭,这种扫描方式相对比较隐蔽,因为不会在目标系统上留下完整的连接记录,常用于渗透测试中对目标主机端口开放情况的探测,同时可以减少被目标系统的防火墙或入侵检测系统发现的概率
-
TCP连接扫描 -sT 参数表示进行 TCP 连接扫描,这种扫描方式会与目标主机的端口建立完整的 TCP 连接,就像正常的网络连接过程一样,它的优点是准确性高,因为建立了完整的连接,可以获取到更详细的服务信息,但缺点是容易被目标系统检测到,因为会在目标系统上留下完整的连接记录,适用于在合法授权且不需要过于隐蔽的情况下对目标主机端口进行扫描,例如在内部网络安全评估中对服务器端口的检查
-
UDP扫描 -sU 参数表示进行 UDP 扫描,用于探测目标主机 192.168.30.196 上开放的 UDP 端口,由于 UDP 协议的特性,UDP 扫描结果可能不如 TCP 扫描准确,因为 UDP 服务对扫描包的响应方式各不相同,有些服务可能不会响应空的扫描包,在对一些常见的 UDP 服务(如 DNS、SNMP 等)进行安全评估时,经常使用
-
UDP和SYN扫描 - sudo nmap -sU -sS 192.168.30.196
复制代码该命令同时使用-sU 和-sS 参数,即对目标主机 192.168.30.196 进行 UDP 和 SYN 扫描,这种方式可以在一次扫描过程中同时探测目标主机的 UDP 和 TCP 端口开放情况,节省时间并获取更全面的端口信息,但由于涉及到两种不同类型的扫描方式且都需要特殊权限,对系统资源和网络环境也有一定要求, 需要在合适的场景下使用,如在进行全面的网络安全评估且有足够权限和资源支持时
-
文件输出 - nmap -v -sn 192.168.30.1-253 -oG ping-sweep.txt
复制代码这是在上述存活主机枚举的基础上,添加了-v参数以启用详细输出模式,这样可以在扫描过程中看到更多关于主机存活探测的详细信息,如每个 IP 地址的响应情况等。-oG ping-sweep.txt 参数表示将扫描结果以 Grepable 格式输出到 ping-sweep.txt 文件中,这种格式方便后续使用 grep 等工具对结果进行进一步处理和分析,例如提取存活主机的 IP 地址列表等 查看ping-sweep.txt - grep Up ping-sweep.txt | cut -d " " -f 2
复制代码这行命令用于从 ping-sweep.txt 文件中提取存活主机的 IP 地址, grep Up命令会在文件中查找包含 Up字符串的行,因为 Nmap 在 Grepable 格式的输出中,存活主机的状态会标记为Up, cut -d " " -f 2则是将查找到的行按照空格进行分割,并提取第二个字段,即存活主机的 IP 地址,通过这种方式,可以快速从 Nmap 的存活主机枚举结果中获取到存活主机的 IP 地址列表,以便进行后续的针对性操作
-
指纹探测 操作系统指纹探测 - nmap -O 192.168.30.196 --osscan-guess
复制代码-O 参数表示进行操作系统指纹识别,Nmap 会通过发送一系列特殊的数据包并分析目标主机的响应来尝试确定目标主机运行的操作系统类型,--osscan-guess 参数启用操作系统猜测功能,当 Nmap 无法准确确定操作系统类型时,会根据已有的信息进行合理猜测。由于操作系统指纹识别涉及到一些特殊的网络探测技术,可能会被目标系统视为潜在的攻击行为,所以在使用时需要谨慎,确保是在合法授权的情况下进行操作,例如在内部网络安全评估或渗透测试的信息收集阶段 操作系统与端口服务指纹探测 - nmap 192.168.30.196 -p 22,80,139,445 -sV -sC -O --version-all
复制代码-sV:进行版本检测,获取这些端口上运行的服务的版本信息,-sC:使用 Nmap 默认脚本集进行扫描,以检测常见的安全问题和漏洞,-O:尝试识别目标系统的操作系统,--version-all:启用更详细的版本检测,提供关于服务和版本的更多信息
-
SMB枚举 - nmap -v -p 139,445 -oG smb.txt 192.168.30.1-254
复制代码使用 Nmap 对 192.168.30.1 - 192.168.30.254地址段内的主机进行端口扫描, -v 启用详细输出模式-p 139,445指定只扫描 139 和 445 端口,这两个端口通常与 SMB(Server Message Block)服务 相关,SMB 服务用于文件共享、打印机共享等功能,在 Windows 网络环境中广泛使用,通过扫描这两 个端口,可以发现网络中哪些主机开放了 SMB 服务,为后续进一步的 SMB 相关安全评估(如 SMB 漏 洞检测、共享资源访问权限检查等)提供基础信息,并将扫描结果以 Grepable 格式输出到 smb.txt 文 件中,方便后续处理和分析 查看smb.txt 会将探测到smb服务的结果放在txt末尾
-
脚本扫描 - nmap --script=vuln 192.168.30.196 -A
复制代码使用 Nmap 对目标主机 192.168.30.196 进行综合扫描,指定运行Nmap脚本vuln进行漏洞检测以及详细信息采集(-A),包括操作系统、服务版本、路由跟踪以及已知漏洞的检测,涉及较多,扫描会比较缓慢 - nmap --script=http-title 192.168.30.196
复制代码使用–script 参数指定运行特定的 Nmap 脚本,这里是 http-title 脚本,用于获取目标主机 192.168.30.196 上 HTTP 服务的标题信息 没有title,换一个有的 - nmap --script="http-*" 192.168.30.196
复制代码使用–script 参数指定运行所有以 http- 开头的脚本,适用于 HTTP 服务分析,涉及较多,十分缓慢
-
版本扫描 -sV用于探测目标主机的开放端口及其运行的服务名称和版本信息,适合识别网络服务的具体类型和版本,用于安全评估和漏洞检测
以上就是Nmap各种基础用法,后面还会持续更新高级用法
文章原创,欢迎转载,请注明文章出处 |