nmap简介与运用
1 介绍
Nmap,也就是Network Mapper,中文为“网络映射器”。
Nmap是一款开源的网络探测和安全审核的工具,它的设计目标是快速地扫描大型网络。
它是网络管理员必用的软件之一,以及用以评估网络系统保安。
1.1 基本功能
(1)探测一组主机是否在线
(2)扫描主机端口,嗅探所提供的网络服务
(3)推断主机所用的操作系统
1.2 工作原理
Nmap对目标主机进行一系列的测试,利用测试结果建立相应目标主机的Nmap指纹,然后Nmap会对指纹进行匹配,最终输出相应的结果。
1.3 语法格式
Nmap的固定语法格式如下:
Nmap【空格】【选项|多选项|协议】【空格】【目标】
2 常用参数
2.1 全面扫描
全面扫描指定IP或域名的所有端口及其目标系统信息等。所需时间较长
nmap -A 192.168.0.12
扫描结果:目标主机MAC地址、设备类型、操作系统、中央处理单元、主机详细资料、网络距离等
2.2 简单扫描
该扫描方式可以针对IP或者域名进行扫描,扫描方式迅速,可以很方便地发现目 标端口的开放情况及主机在线情况。
nmap 192.168.0.12
简单扫描结果:(只能扫描工具规定的一些常见端口)
2.3 其他举例
指定扫描一个网段:nmap 192.168.0.0/24 或者 nmap 192.168.0.1-200(扫描1-200的主机) 扫描部分网段(逗号隔开):nmap 192.168.0.1,2,3,4 或 nmap 192.168.0,1,2,3,4.1 扫描指定IP所开放的端口:nmap -p 1-65535 -v 127.0.0.1 扫描C段存活主机:nmap 192.168.1.0/24 指定端口扫描:nmap -p 80,1433,22,1521 192.168.1.1 探测主机操作系统:nmap -O 192.168.1.1 全面的系统探测:nmap -v -A 192.168.1.1(Nmap默认扫描主机1000个高危端口) 穿透防火墙进行扫描:nmap -Pn -A 192.168.1.1(禁止用ping的) 使用脚本扫描Web敏感目录:nmap -p 80 --script=http-enum.nse 192.168.1.1
3 主机发现
3.1 Ping扫描
Ping扫描只进行ping,然后显示出在线的主机。使用该选项扫描可以轻易获取目标信息而不会被轻易发现。
在默认情况下,Nmap会发送一个ICMP回声请求和一个TCP报文到目标端口。Ping扫描的优点是不会返回太多的信息影响对结果的分析,并且扫描方式高效。
nmap -sP 192.168.0.0/24
3.2 无Ping扫描
无ping扫描通常用于防火墙禁止ping的情况下,它能确定正在运行的机器。
默认情况下,nmap只对正在运行的主机进行高强度的探测,如端口扫描,版本探测或者操作系统探测。
用-P0禁止主机发现会使nmap对每一个特定的目标IP地址进行所要求的扫描,这可以穿透防火墙,也可以避免被防火墙发现。
nmap -P0 192.168.0.12
3.3 TCP SYN Ping 扫描
通常情况下,nmap默认是使用TCP ACK 和 ICMP Echo 请求对目标进行是否存活的响应,当目标主机的防火墙阻止这些请求时,可以使用TCP SYN Ping扫描来判断主机是否存活。
-PS 选项发送一个设置了SYN标志位的空TCP报文。默认端口为80。
但不同的端口也可以作为选项指定,甚至可以指定一个以逗号分隔的端口列表(如-PS22,23,25,80,115,3306,3389),在这种情况下,每个端口会被并发地扫描
nmap -PS -v 192.168.0.12
上面结果可得知Nmap是通过SYN/ACK和RST响应来对目标主机是否存活进行判断,但在特定情况下防火墙会丢弃RST包。
这时结果会不准确,我们需要指定一个端口或端口范围来避免这种情况。
nmap -PS80,100-200 -v 192.168.0.12
3.4 TCP ACK Ping 扫描
使用-PA选项可以进行TCP ACK Ping扫描,它与TCP SYN Ping扫描非常类似,区别在于设置的TCP标志位是ACK而不是SYN,使用这种方式扫描可以探测阻止SYN包或ICMP Echo请求的主机。
nmap -PA -v 192.168.0.12
同时使用-SP与-PA选项命令如下:
nmap -PA -PS 192.168.0.12
3.5 UDP Ping扫描
使用UDP Ping扫描时Nmap会发送一个空UDP包到目标之间,如果目标主机相应则返回一个ICMP端口不可达错误,如果目标主机不是存活状态则会返回各自ICMP错误信息。
nmap -PU -v 192.168.0.12
3.6 ICMP Ping Types 扫描
ICMP是控制报文协议。nmap发送一个ICMP type8(回声请求)报文到目标ip地址,从运行的主机得到一个type0(回声相应)报文。
-PE选项简单的来说是通过向目标发送ICMP Echo数据包来探测目标主机是否在线,使用-PE选项打开该回声请求功能。
-PP选项是ICMP时间戳ping扫描,-PM选项可以进行icmp地址掩码ping扫描
nmap -PE -v 192.168.0.12 nmap -PP -v 192.168.0.12 nmap -PM -v 192.168.0.12
3.7 ARP Ping扫描
-PR 通常在扫描局域网时使用,在内网的情况下,使用ARP ping扫描方式是最有效的,在本地局域网中防火墙不会禁止ARP请求,这就使得它比其他ping扫描都更加高效。
nmap -PR 192.168.0.12
3.8 扫描列表
列表扫描时主机发现的退化形式,它仅仅列出指定网络上的每台主机,不发送任何报文到目标主机。
默认情况下,Nmap仍然对主机进行反向域名解析以获取它们的名字。
nmap -sL 192.168.0.0/24
3.9 禁止反向域名解析
如果单纯扫描一段IP,使用该选项可以大幅度减少目标主机的相应时间,从而更快的得到结果。
namp -n -sL 192.168.0.0/24
3.10反向域名解析
nmap -R -sL *. 192.168.0.0/24
3.11 扫描TPv6地址
nmap -6 fe80::20c:29ff:fee0:2e76
3.12 路由跟踪
通过此选项可以轻松地查找出本地计算机到目标之间所经过的网络节点,并可以看到通过各个节点的时间。
nmap --traceroute -v www.baidu.com
3.13 SCTP INIT Ping扫描
SCTP(流控制传输协议)是IETF在2000年定义的一个传输层协议。
SCTP可以看作是TCP协议的改进,它改进了TCP的一些不足,SCTP INIT Ping扫描通过向目标发送INIT包,根据目标主机的相应判断目标主机是否存活。
nmap -PY -v 192.168.0.12
4 端口扫描
4.1 从nmap识别端口状态
Open:对外开放 Closed:端口关闭状态 Filtered:防火墙过滤或者网络堵塞 Unfiltered:未被过滤,端口可访问,但是无法判断是开放还是关闭状态 Open|Filtered:开放还是被过滤 Closed|Filtered:不能确定是关闭还是被过滤,只可能出现在IPID Idle扫描中。
4.2 时序选项
在nmap中使用-T(0-5)可以启用时序选项,对于时序选项这里有0~5不同选项。
-T0(偏执的):非常慢的扫描,用于IDS逃避。 -T1(鬼祟的):缓慢的扫描,用于IDS逃避。 -T2(文雅的):降低速度以降低对带宽的消耗,此选项不常用。 -T3(普通的):默认,根据目标的反应自动调整时间。 -T4(野蛮的):快速扫描,常用扫描方式,需要在很好的网络环境下进行扫描,请求可能会淹没目标。 -T5(疯狂的):极速扫描,这种扫描方式以牺牲准确度来提示扫描速度。
4.3 TCP SYN 扫描
半开放扫描,扫描速度快,扫描方式隐蔽。(在SYN扫描不能用时,TCP连接扫描会使用默认的TCP扫描)
nmap -sS 192.168.0.12
4.4 TCP 连接扫描
端口扫描中最基础,最稳定的扫描方式
nmap -sT 192.168.0.12
4.5 UDP扫描
UDP扫描非常缓慢,UDP端口扫描通过发送UDP数据包到目标主机并等待响应,它将判断目标端口是否开放状态,如果目标返回ICMP不可达的错误,说明端口是关闭的,如果得到正确的适当的响应,这说明端口是开放的。
nmap -sU -p 80-500 192.168.0.12
4.6 隐蔽扫描
-sN是Null扫描,是通过发送非常规的TCP通信数据包对计算机进行探测,很多情况下Null扫描与Xmas扫描恰好相反,因为Null扫描不会标记任何数据包,若目标主机的相应端口是关闭的,会响应一个RST数据包,若目标端口是开放的则不会响应任何信息。
nmap -sN 192.168.0.12
-sF是FIN扫描,当我们使用TCP SYN扫描时可能会被目标主机的防火墙发现,会阻止SYN数据包,这时我们使用TCP FIN扫描方式会有很好的穿透效果,因为TCP FIN扫描并不需要完成TCP握手。TCP FIN扫描就是向目标端口发送一个FIN包,如果收到目标响应的RST包,则说明目标端口是开放的,如果没有收到RST包则说明目标端口是关闭的。
nmap -sF 192.168.0.12
-sX是Xmas扫描,数据包的FIN、PSH和URG标记位置打开,既标志位1,根据RFC 793规定如果目标主机端口是开放的则会响应一个RST标志包。
nmap -sX 192.168.0.12
4.7 TCP ACK 扫描
使用该扫描不能确定端口是否是开放还是被过滤的。
nmap -sA -v 192.168.0.12
4.8 TCP 窗口扫描
当收到RST包时,根据TCP窗口的值是正数还是0来判断目标端口是开放还是关闭的。
从输出结果来看是不准确的,如果扫描的端口都是开放状态或者只有少数几个是关闭状态就很不准确。
nmap -sW -v -F 192.168.0.12
4.9 TCP Maimon扫描
探测报文是FIN/ACK 根据 RFC 793(TCP),无论端口开放或者关闭,都应该对这样的探测响应RST报文,如果端口开放,许多基于BSD的系统只是丢弃该探测报文。
nmap -sM -T4 192.168.0.12
4.10 自定义TCP扫描
可以通过指定任意的TCP标志位来进行扫描。
nmap -sT --scanflags SYNURG 192.168.0.12
4.11 空闲扫描
空闲扫描允许端口完全欺骗扫描。可以使攻击者能够不使用自己的IP向目标主机发送数据包,它可以利用不活跃的僵尸主机反弹给攻击者一个旁通信道,从而进行端口扫描。IDS会把不活跃的僵尸主机当做攻击者,这是一种非常隐蔽的扫描方法。
nmap -sI www.0day.co:80 192.168.0.12
这是利用僵尸主机为www.0day.co的主机对192.168.0.12进行空闲扫描,如果有IDS,IDS则会把www.0day.co当做扫描者。选择的端口必须不能被自己的nmap主机或目标主机过滤掉并且必须为开放的。
4.12 IP协议扫描
扫描IP协议号。IP协议扫描可以帮助用户确定目标主机哪些是支持IP协议的,例如TCP,ICMP.IGMP。虽然它遍历的是IP协议号并不是TCP或UDP端口,但仍可以使用-p选项选择需要扫描的协议号。它不是在UDP报文的端口域上循环,而时在IP协议域的2位上循环,发送空的IP报文头。
nmap -sO -T4 192.168.0.12
4.13 FTP Bounce扫描
使用-b选项就可以进行FTP Bounce Scan扫描。它允许用户连接到一台FTP服务器,然后要求文件送到一台第三方服务器,这种扫描方式被支持较少,但可绕过防火墙。
nmap -b 192.168.0.12
5 指纹识别与探测
5.1 设置扫描强度
使用Nmap进行扫描的时候,Nmap发送一系列探测报文,--version-intensity选项可以为每个报文赋予1~9之间的值。
被赋予较低值的探测报文对大范围的常见服务有效,而被赋予较高值的报文一般没有实际作用,强度水平说明了应该使用哪些探测报文。
当我们赋予的值越高,服务越有可能被正确识别,但是这也会牺牲相当长的一段实际,强度必须在0~9,默认的强度是7。
nmap -sV --version-intensity 1 192.168.0.12
5.2 RPC扫描
该选项对用于与其他端口扫描选项相结合使用,它对所有被发现开放的TCP/UDP端口执行SunRPC程序NULL命令,来试图确定它们是否为RPC端口,如果是RPC端口,则返回程序和版本号。
nmap -sS -sR 192.168.0.12
5.3 对指定的目标进行操作系统检测
使用--osscan-limit选项可以对指定的目标进行操作系统检测。
Nmap只对满足“具有打开和关闭的端口”条件的主机进行操作系统检测,这样可以节约时间,特别是在使用-P0扫描多个主机时。
这个选项仅在使用-O或-A进行操作系统检测时起作用。
nmap -O --osscan-limit 192.168.0.0/24
6 躲避防火墙
nmap -f -v 192.168.1.131 #报文分段,将TCP头分段在几个包中,IDS及其他工具监测更加困难 nmap --mtu 16 192.168.1.131 #指定偏移大小,设置TCP/IP协议传输数据报时的最大传输单元,需要注意的是偏移量必须是8的倍数 nmap -D 192.168.1.20,192.168.1.21,192.168.1.22,ME 192.168.1.131 #IP欺骗,在进行版本检测或者TCP扫描的时候诱饵是无效的 -D,指定诱饵ip,多个ip用逗号隔开 ME,指定真实IP nmap -sI www.baidu.com:80 192.168.1.131 #源地址欺骗 nmap --source-port 88 192.168.1.131 #源端口欺骗,指定一个比较安全的端口,nmap就可以从这些端口中发送数据 nmap --data-length 30 192.168.1.131 #指定发包长度,通常TCP包是40字节,ICMP Echo是28字节 nmap -sT -PN --spoof-mac 0 192.168.1.131 #MAC地址欺骗 0,随机MAC地址 MAC Address,手动指定MAC地址 Vendor Name,指定厂商生成MAC地址
7 保存与输出
#标准保存 nmap -F -oN test1.txt 192.168.0.12 #XML保存 nmap -F -oX test1.xml 192.168.0.12 #133t保存 namp -F -oS test2.txt 192.168.0.12 #Grep保存 nmap -F -oG test3.txt 192.168.0.12 #保存到所有格式 nmap -F -oA testA 192.168.0.12 #补充保存文件 nmap -F --append-output -oN test1.txt 192.168.0.12