Nmap常用命令详解
一、Nmap介绍
1、Nmap(Network Mapper)是一款开源的网络扫描和安全评估工具,广泛用于网络发现、漏洞检测和安全审计。
2、Nmap下载地址:
Download the Free Nmap Security Scanner for Linux/Mac/Windows
二、基本功能
1. 主机发现:检测网络上活跃的设备(IP 地址)。
2. 端口扫描:识别目标主机开放的端口。
3. 服务与版本检测:确定端口上运行的服务及其版本。
4. 操作系统识别:猜测目标主机的操作系统类型。
5. 漏洞检测:通过 NSE(Nmap 脚本引擎)执行安全检查。
三、常用命令详解
1、主机存活探测
nmap -sn -PR 192.168.1.1/24
-sP -sn 扫描时使用ping命令探测目标主机的存活性
-PR 扫描发送ARP请求包进行主机存活探测
默认主机发现扫描
nmap 192.168.0.1-255
Nmap 会发送一个 ICMP echo 请求,一个 TCP SYN 包给 443 端口,一个 TCP ACK 包给 80 端口和一个 ICMP 时间戳请求
这就等价于使用命令nmap -PE -PS443 -PA80 -PP 192.168.0.1-255
此命令返回一个 IP 地址段中活动的主机,及其 IP 地址,主机域名,开启的服务以及相应的端口,MAC 地址等信息。
1.1主机发现(Ping 扫描)
nmap -sn 192.168.1.0/24
• -sn:不进行端口扫描,仅发现在线主机。
• 192.168.1.0/24:扫描整个子网。
1.2简单端口扫描
nmap 192.168.1.100
• 默认扫描 1000 个常用端口,显示开放状态。
1.3全面扫描
nmap -sS -sV -O -A -p- 192.168.1.100
• -sS:TCP SYN 扫描(快速隐蔽)。
• -sV:检测服务版本。
• -O:尝试识别操作系统。
• -A:启用全面分析(含脚本扫描)。
• -p-:扫描所有 65535 个端口。
服务版本识别(-sV),Nmap可以在进行端口扫描的时候检测服务端软件的版本信息。版本信息将使后续的漏洞识别工作更有针对性。
操作系统检测(-O),Nmap还能识别目标主机的操作系统
禁用主机检测(-Pn),如果主机屏蔽了ping请求,Nmap可能会认为该主机没有开机。这将使得Nmap无法进行进一 步检测,比如端口扫描、服务版本识别和操作系统识别等探测工作。为了克服这一问题,就 需要禁用Nmap的主机检测功能。在指定这个选项之后,Nmap会认为目标主机已经开机并会 进行全套的检测工作
强力检测选项(-A),启用-A选项之后,Nmap将检测目标主机的下述信息
服务版本识别(-sV);操作系统识别(-O);脚本扫描(-sC);Traceroute(–traceroute)。
主机发现
nmap [Scan Type(s)] [Options] {target specification} #指令格式
#Scan Types 指探测类型:
-PS 指 TCP SYN Ping,
-PA 指 TCP ACK Ping,
-PU 指 UDP Ping
-PE
#ICMP Ping,现在很多主机封锁这些报文,适用于管理员监视内部网络
#Options 指探测选项:
-n 指不对活动的 IP 地址进行反向域名解析,用以提高扫描速度
-R 指对活动的 IP 进行反向域名解析
#target specification 指探测的目标地址或 IP 地址范围
192.168.0.1-255
nmap -sP 192.168.0.1-255 #ping扫描,只列出存活主机,速度最快
nmap -Pn 192.168.0.1-255 #无ping扫描,结果和默认主机发现一样
nmap -p 1-65535 192.168.0.8 # -p选项,只扫描指定的端口
常用参数
nmap -T4 -A -v -Pn IP
#最常用的一种扫描
-T4 #设置时序,越高扫描越快
-A #启用操作系统检测,版本检测,脚本扫描和跟踪路由
-v #增加详细级别(使用-vv或更高级别以获得更好的效果)
-Pn #无ping扫描
2、端口开放探测
nmap -sS -Pn -p1-65535 -n –open –min-hostgroup 2 –min-parallelism 1024 -T4 192.168.1.8
-sT -sS -sF -Sa -sU 以TCP SYN FIN ACK UDP方式进行端口探测
-Pn 扫描时不使用ping命令进行主机存活探测
-p 指定扫描的端口
-sV 对端口运行的服务进行版本探测
–open 只显示开放端口
-F 快速扫描,仅扫描TOP 100端口
#只列举常见的,详细可参考官方文档
-sT #TCP连接扫描
-sS #SYN扫描
-sU #UDP扫描
-sA #ACK扫描
-sF #FIN扫描
TCP连接扫描
使用操作系统的网络连接系统调用 connect(),对目标主机发起 TCP 三路握手,待完成后 Nmap 立即中断此次连接。
Nmap 通过获取每个尝试连接的状态信息来判定侦测端口的状态
SYN扫描
Nmap 产生一个 SYN 数据报文,如果侦测端口开放并返回 SYN-ACK 响应报文
Nmap 据此发送 RST 报文给侦测端口结束当前连接,这样做的好处在于缩短了端口扫描时间
UDP扫描
UDP 本身是无连接的协议,Nmap 向目标主机的端口发送 UDP 探测报文
如果端口没有开放,被侦测主机将会发送一个 ICMP 端口不可到达的消息
Nmap 根据这个消息确定端口闭合(closed)或者被过滤 (unfiltered)
通常没有回复意味着端口是开放(open)状态 。
ACK扫描
这种扫描比较特殊,它不能确切知道端口的基本状态,而是主要用来探测防火墙是否存在以及其中设定的过滤规则
FIN扫描
和 SYN 扫描相比,这种方式更为隐蔽,因此能够穿过防火墙的过滤
关闭(closed)端口将会返回合适的 RST 报文,而开放端口将忽略这样的侦测报文
具备类似防火墙不敏感特性的还有 -sN NULL 扫描,-sX X-mas 扫描。
TCP扫描选项
1.TCP连接扫描(-sT):指定这个选项后,程序将和目标主机的每个端口都进行完整的三次 握手。如果成功建立连接,则判定该端口是开放端口。由于在检测每个端口时都需要进行三 次握手,所以这种扫描方式比较慢,而且扫描行为很可能被目标主机记录下来。如果启动 Nmap的用户的权限不足,那么默认情况下Nmap程序将以这种模式进行扫描。
2.SYN扫描(-sS):该选项也称为半开连接或者SYN stealth。采用该选项后,Nmap将使用 含有SYN标志位的数据包进行端口探测。如果目标主机回复了SYN/ACK包,则说明该端口处 于开放状态:如果回复的是RST/ACK包,则说明这个端口处于关闭状态;如果没有任何响应 或者发送了ICMP unreachable信息,则可认为这个端口被屏蔽了。SYN模式的扫描速度非常 好。而且由于这种模式不会进行三次握手,所以是一种十分隐蔽的扫描方式。如果启动Nmap 的用户有高级别权限,那么在默认情况下Nmap程序将以这种模式进行扫描。
3.TCP NULL(-sN)、FIN(-sF)及XMAS(-sX)扫描:NULL 扫描不设置任何控制位;FIN扫描仅设置FIN标志位:XMAS扫描设置FIN、PSH和URG的标识位。如果目标主机返回 了含有RST标识位的响应数据,则说明该端口处于关闭状态;如果目标主机没有任何回应, 则该端口处于打开|过滤状态。
4.TCP Maimon扫描(-sM):Uriel Maimon 首先发现了TCP Maimom扫描方式。这种模式的 探测数据包含有FIN/ACK标识。对于BSD衍生出来的各种操作系统来说,如果被测端口处于 开放状态,主机将会丢弃这种探测数据包;如果被测端口处于关闭状态,那么主机将会回复 RST。
5.TCPACK扫描(-sA):这种扫描模式可以检测目标系统是否采用了数据包状态监测技术 (stateful)防火墙,并能确定哪些端口被防火墙屏蔽。这种类型的数据包只有一个ACK标识 位。如果目标主机的回复中含有RST标识,则说明目标主机没有被过滤。
6.TCP窗口扫描(-sW):这种扫描方式检测目标返回的RST数据包的TCP窗口字段。如果目 标端口处于开放状态,这个字段的值将是正值;否则它的值应当是0。
7.TCP Idle扫描(-sI):采用这种技术后,您将通过指定的僵尸主机发送扫描数据包。本机 并不与目标主机直接通信。如果对方网络里有IDS,IDS将认为发起扫描的主机是僵尸主机。
UDP扫描选项
Nmap有多种TCP扫描方式,而UDP扫描仅有一种扫描方式(-sU)。虽然UDP扫描结果没有 TCP扫描结果的可靠度高,但渗透测试人员不能因此而轻视UDP扫描,毕竟UDP端口代表着 可能会有价值的服务端程序。但是UDP扫描的最大问题是性能问题。由干Linux内核限制1秒内最多发送一次ICMP Port Unreachable信息。按照这个速度,对一台主机的65536个UDP端口进行完整扫描,总耗时必 定会超过18个小时。
优化方法主要是:
1.进行并发的UDP扫描; 2.优先扫描常用端口; 3.在防火墙后面扫描; 4.启用--host-timeout选项以跳过响应过慢的主机。
假如我们需要找到目标主机开放了哪些 UDP端口。为提高扫描速度,我们仅扫描 53端口 (DNS)和161端口(SNMP)。
可以使用命令nmap -sU 192.168.56.103 -p 53,161
目标端口选项
默认情况下,Nmap将从每个协议的常用端口中随机选择1000个端口进行扫描。其nmapservices文件对端口的命中率进行了排名。
可以自定义端口参数:
-p端口范围:只扫描指定的端口。扫描1〜1024号端口,可设定该选项为–p 1-1024。扫描1 〜65535端口时,可使用-p-选项。
-F(快速扫描):将仅扫描100 个常用端口。
-r(顺序扫描):指定这个选项后,程序将从按照从小到大的顺序扫描端口。● –
-top-ports <1 or=”” greater=””>:扫描nmap-services 里排名前N的端口。
输出选项
Nmap可以把扫描结果保存为外部文件。在需要使用其他工具处理Nmap的扫描结果时,这一 功能十分有用。即使您设定程序把扫描结果保存为文件,Nmap还是会在屏幕上显示扫描结果。
Nmap支持以下几种输出形式。
正常输出(-oN):不显示runtime信息和警告信息。
XML 文件(-oX):生成的 XML 格式文件可以转换成 HTML 格式文件,还可被Nmap 的图 形用户界面解析,也便于导入数据库。本文建议您尽量将扫描结果输出为XML文件。
生成便于Grep使用的文件(-oG):虽然这种文件格式已经过时,但仍然很受欢迎。这种格 式的文件,其内容由注释(由#开始)和信息行组成。信息行包含6个字段,每个字段的字段 名称和字段值以冒号分割,字段之间使用制表符隔开。这些字段的名称分别为Host、Ports、Protocols、Ignored State、OS、Seq Index、IP ID Seq 和Status。这种格式的文件便于 grep或awk之类的UNIX指令整理扫描结果。
时间排程控制选项
Nmap可通过-T选项指定时间排程控制的模式。它有6种扫描模式。
paranoid(0):每5分钟发送一次数据包,且不会以并行方式同时发送多组数据。这种模式 的扫描不会被IDS检测到。
sneaky(1):每隔15秒发送一个数据包,且不会以并行方式同时发送多组数据。
polite(2):每0.4 秒发送一个数据包,且不会以并行方式同时发送多组数据。
normal(3):此模式同时向多个目标发送多个数据包,为 Nmap 默认的模式,该模式能自 动在扫描时间和网络负载之间进行平衡。
aggressive(4):在这种模式下,Nmap 对每个既定的主机只扫描5 分钟,然后扫描下一 台主机。它等待响应的时间不超过1.25秒。
insane(5):在这种模式下,Nmap 对每个既定的主机仅扫描75 秒,然后扫描下一台主 机。它等待响应的时间不超过0.3秒。
默认的扫描模式通常都没有问题。除非您想要进行更隐匿或更快速的扫 描,否则没有必要调整这一选项。
扫描IPv6主机
启用Nmap的-6选项即可扫描IPv6的目标主机。当前,只能逐个指定目标主机的IPv6地址。
nmap -6 fe80::a00:27ff:fe43:1518
同一台主机在IPv6网络里开放的端口比它在IPv4网络里开放的端口数量要 少。这是因为部分服务程序尚未支持IPv6网络。
3、服务与版本探测
-O 识别操作系统类型及版本号
-A 操作系统识别、服务版本探测、路由跟踪等
-iL 批量读取文件中的IP地址信息
-T 时间模板,数字越大,扫描速度越快(T5>T4>T3)
–min-hostgroup和–max-hostgroup 调整并行扫描组的大小
–min-parallelism和–max-parallelism 调整探测报文的并行数量
–host-timeout 调整扫描过程中等待目标主机的应答时间
–script 调用Nmap的探测脚本
nmap -O -sV 192.168.1.8 -script=vuln
nmap对目标地址进行漏洞扫描
其它参数
-O #启用操作系统检测
-sV #探测服务版本信息
-v #增加详细级别(使用-vv或更高级别以获得更好的效果)
–script=script_name #使用nse脚本
4、扩展功能
Nmap除了主机存活探测、端口开放探测以及服务类型识别功能,还具备一些扩展功能,如弱口令暴力破解、高危漏洞的扫描、拒绝服务攻击、模糊测试等
使用Nmap扩展功能时,需要调用–script参数,根据需求添加对应的脚本名称。
auth 处理身份验证
broadcast 网络广播
brute 暴力猜解
default 默认
discovery 服务发现
dos 拒绝服务
exploit 漏洞利用
external 外部扩展
fuzzer 模糊测试
intrusive 扫描可能造成不良后果
malware 检测后门
safe 扫描危害较小
version 版本识别
vuln 漏洞检测
可以通过nmap/scripts目录查看每个扩展脚本的具体内容。
脚本引擎功能(Nmap Scripting Engine,NSE)
最后但是同样重要的,Nmap本身已经很强大了,但是加上它的脚本引擎更加开挂了,NSE 可使用户的各种网络检査工作更为自动化,有助于识别应 用程序中新发现的漏洞、检测程序版本等Nmap原本不具有的功能。虽然Nmap软件包具有各 种功能的脚本,但是为了满足用户的特定需求,它还支持用户撰写自定义脚本。
auth:此类脚本使用暴力破解等技术找出目标系统上的认证信息。
default:启用–sC 或者-A 选项时运行此类脚本。这类脚本同时具有下述特点:执行速度快;输出的信息有指导下一步操作的价值;输出信息内容丰富、形式简洁;必须可靠;不会侵入目标系统;能泄露信息给第三方。
discovery:该类脚本用于探索网络。
dos:该类脚本可能使目标系统拒绝服务,请谨慎使用。
exploit:该类脚本利用目标系统的安全漏洞。在运行这类脚本之前,渗透测试人员需要获取 被测单位的行动许可。
external:该类脚本可能泄露信息给第三方。
fuzzer:该类脚本用于对目标系统进行模糊测试。
instrusive:该类脚本可能导致目标系统崩溃,或耗尽目标系统的所有资源。
malware:该类脚本检査目标系统上是否存在恶意软件或后门。
safe:该类脚本不会导致目标服务崩溃、拒绝服务且不利用漏洞。
version:配合版本检测选项(-sV),这类脚本对目标系统的服务程序进行深入的版本检 测。
vuln:该类脚本可检测检査目标系统上的安全漏洞。
在Kali Linux系统中,Nmap脚本位于目录/usr/share/nmap/scripts。
-sC 或–script=default:启动默认类NSE 脚本。
–script <filename>|<category>|<directories>:根据指定的文件名、类别名、目录名,执行 相应的脚本。
–script-args <args>:这个选项用于给脚本指定参数。例如,在使用认证类脚本时,可通过 这个选项指定用户名和密码
nmap --script http-enum,http-headers,http-methods,http-php-version -p 80 192.168.56.103
脚本引擎 Nmap 的 NSE(Nmap Scripting Engine)允许用户使用脚本进行更深入的扫描和测试。
NSE 脚本列表
NSE 库列表 shell 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
使用默认的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 共享。
5、规避检测的选项
在渗透测试的工作中,目标主机通常处于防火墙或 IDS 系统的保护之中。在这种环境中使用 Nmap 的默认选项进行扫描,不仅会被发现,而且往往一无所获。此时,我们就要使用Nmap 规避检测的有关选项。
-f(使用小数据包):这个选项可避免对方识别出我们探测的数据包。指定这个选项之后, Nmap将使用8字节甚至更小数据体的数据包。
–mtu:这个选项用来调整数据包的包大小。MTU(Maximum Transmission Unit,最大传输 单元)必须是8的整数倍,否则Nmap将报错。
-D(诱饵):这个选项应指定假 IP,即诱饵的 IP。启用这个选项之后,Nmap 在发送侦测 数据包的时候会掺杂一些源地址是假IP(诱饵)的数据包。这种功能意在以藏木于林的方法 掩盖本机的真实 IP。也就是说,对方的log还会记录下本机的真实IP。您可使用RND生成随机 的假IP地址,或者用RND:number的参数生成<number>个假IP地址。您所指定的诱饵主机 应当在线,否则很容易击溃目标主机。另外,使用了过多的诱饵可能造成网络拥堵。尤其是 在扫描客户的网络的时候,您应当极力避免上述情况。
–source-port <portnumber>或-g(模拟源端口):如果防火墙只允许某些源端口的入站流 量,这个选项就非常有用。
防火墙/IDS逃逸
nmap -f –mtu=16 192.168.0.8
#报文分段,mtu必须是8的倍数
nmap -sI www.0day.com:80 192.168.0.8
#源IP欺骗
nmap –source-port 53 192.168.0.8
#源端口欺骗
#防火墙对服务器的设置会根据端口选择是否信任数据流
#管理员可能会认为这些端口不会有攻击发生,所以可以利用这些端口扫描
nmap –data-length 30 192.168.0.8
#在原来报文基础上,附加随机数据,达到规避防火墙的效果
nmap –spoof-mac 0 192.168.0.8
#指定一个随机的MAC地址
6、Nmap所识别的6个端口状态
open(开放的)
应用程序正在该端口接收TCP 连接或者UDP报文。
closed(关闭的)
关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。
filtered(被过滤的)
由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。
过滤可能来自专业的防火墙设备,路由器规则 或者主机上的软件防火墙。
unfiltered(未被过滤的)
未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。
只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。
用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定 端口是否开放。
open|filtered(开放或者被过滤的)
当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。
开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃 了探测报文或者它引发的任何响应。
因此Nmap无法确定该端口是开放的还是被过滤的。 UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。
closed|filtered(关闭或者被过滤的)
该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中。
Nmap常用命令详解:等您坐沙发呢!