介绍nmap常见的参数及意义
1 -A :选项用于使用进攻性方式扫描
2 -T4: 指定扫描过程使用的时序,总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况较好的情况下推荐使用T4
3 -oX test.xml: 将扫描结果生成 test.xml 文件
4 -oG test.txt: 将扫描结果生成 test.txt 文件
5 -sn : 只进行主机发现,不进行端口扫描
6 -O : 指定Nmap进行系统版本扫描
7 -sV: 指定让Nmap进行服务版本扫描
8 -p <port ranges>: 扫描指定的端口
9 -sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描
10 -sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况
11 -script <script name> : 指定扫描脚本
12 -Pn : 不进行ping扫描
13 -sP : 用ping扫描判断主机是否存活,只有主机存活,nmap才会继续扫描,一般最好不加,因为有的主机会禁止ping
14 -PI : 设置这个选项,让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行。
15 -iL 1.txt : 批量扫描1.txt中的目标地址
16
17 -sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现
18 -sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况
19 -sO: 使用IP protocol 扫描确定目标机支持的协议类型
20 -PO : 使用IP协议包探测对方主机是否开启
21 -PE/PP/PM : 使用ICMP echo、 ICMP timestamp、ICMP netmask 请求包发现主机
22 -PS/PA/PU/PY : 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式进行发现
23
24 -sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态
25 -e eth0:指定使用eth0网卡进行探测
26 -f : --mtu <val>: 指定使用分片、指定数据包的 MTU.
27 -b <FTP relay host>: 使用FTP bounce scan扫描方式
28 -g: 指定发送的端口号
29 -r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到)
30 -v 表示显示冗余信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态
31 -n : 表示不进行DNS解析;
32 -D <decoy1,decoy2[,ME],...>: 用一组 IP 地址掩盖真实地址,其中 ME 填入自己的 IP 地址
33 -R :表示总是进行DNS解析。
34 -F : 快速模式,仅扫描TOP 100的端口
35 -S <IP_Address>: 伪装成其他 IP 地址
36 --ttl <val>: 设置 time-to-live 时间
37 --badsum: 使用错误的 checksum 来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或 IDS/IPS)
38 --dns-servers : 指定DNS服务器
39 --system-dns : 指定使用系统的DNS服务器
40 --traceroute : 追踪每个路由节点
41 --scanflags <flags>: 定制TCP包的flags
42 --top-ports <number> :扫描开放概率最高的number个端口
43 --port-ratio <ratio>: 扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数
44 --version-trace: 显示出详细的版本侦测过程信息
45 --osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)
46 --osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统
47 --data-length <num>: 填充随机数据让数据包长度达到 Num
48 --ip-options <options>: 使用指定的 IP 选项来发送数据包
49 --spoof-mac <mac address/prefix/vendor name> : 伪装 MAC 地址
50 --version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。
51 --version-light: 指定使用轻量侦测方式 (intensity 2)
52 --version-all: 尝试使用所有的probes进行侦测 (intensity 9)
一、检测主机是否在线
nmap支持多种主机探测方式,常见参数如下
1 -sn: Ping Scan 只进行主机发现,不进行端口扫描。
2 -PE/PP/PM: 使用ICMP echo、 ICMP timestamp、ICMP netmask 请求包发现主机。
3 -PS/PA/PU/PY[portlist]: 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式进行发现。
4
5 -sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。
6 -Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。
7 -PO[protocollist]: 使用IP协议包探测对方主机是否开启。
8 -n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。
9 --dns-servers <serv1[,serv2],...>: 指定DNS服务器。
10 --system-dns: 指定使用系统的DNS服务器
探测公网ip时可以使用nmap -sn命令,例如nmap -sn ip
nmap会发送四种不同类型的数据包来探测目标主机是否存活。只要收到其中的一个包的回复,就证明主机存活
1 ICMP echo request
2 a TCP SYN packet to port 443(https)
3 a TCP ACK packet to port 80(http)
4 an ICMP timestamp request
对于上面的不同类型数据包来说
-PE的ICMP Echo扫描简单来说是通过向目标发送ICMP Echo数据包来探测主机是否存活,
但由于许多主机的防火墙会禁止这些报文,所以仅仅是ICMP扫描时不够的。
命令:nmap -PE ip
-PP的ICMP time stamp时间戳扫描在大多数防火墙配置不当是可能会得到回复,可以以此来判断目标主机是否存活,
除此之外,该命令还会探测 其他开放的端口及服务
命令:nmap -PP ip
-PM 的ICMP address maskPing地址掩码扫描会试图备用选的ICMP等级Ping指定的主机,有不错的穿透防火墙效果
命令:nmap -PM ip
以上是对于探测公网的ip,当探测内网ip时
使用nmap -sn 内网ip 这个命令会发送arp请求包探测目标ip是否在线,如果有arp回复包,则说明在线。此命令可以探测目标主机是否在线,
如果在线,还可以得到其MAC地址。但是不会探测其开放的端口号
使用 -PE/PP/PM 内网ip 探测主机的开启情况,使用的是arp请求报文,如果有arp回复,说明主机在线。
探测网段主机的在线情况,使用的是nmap -sn 网段/子网掩码
例如 nmap -sn 192.168.16.128/24 或 nmap -sn 192.168.16.100-200
探测192.168.16.128/24这个网段内主机的在线情况,返回主机的ip地址和MAC地址
二、端口扫描及其原理
nmap通过探测将端口划分为6个状态:
open:端口是开放的。
closed:端口是关闭的。
filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
open|filtered:端口是开放的或被屏蔽。
closed|filtered :端口是关闭的或被屏蔽
TCP SYN 扫描(-sS)
这是默认的扫描方式,通常被称作半开放扫描,该方式通过发送SYN到目标端口,如果收到SYN/ACK回复,就可以判断端口是开放的,如果收到RST包,说明
该端口是关闭的。如果没有收到回复,就可以判断该端口被屏蔽了,该方式不建立完整的TCP连接,相对比较隐蔽,而且效率高,时用范围广
TCP connent 扫描(-sT)
TCP connect方式使用系统网络API connect向目标主机的端口发起连接,如果无法连接,说明该端口关闭。该方式扫描速度比较慢,而且由于建立完整的TCP连接会在目标主机上留下记录信息,不够隐蔽。所以,TCP connect是TCP SYN无法使用才考虑使用的方式
TCP ACK 扫描(-sA)
向目标主机的端口发送ACK包,如果收到RST包,说明端口没有被防火墙屏蔽,该方式只能用于确定防火墙是否屏蔽某个端口吗,可以辅助TCP SYN的方式来判断目标主机防火墙的状况
TCP FIN/Xmas/NULL 扫描(-sN/sF/sX)
这三种扫描方式被称为秘密扫描,因为相对比较隐蔽。FIN扫描向目标主机的端口发送的TCP FIN 包或Xmas tree包或NULL包,如果收到对方的RST回复包,那么说明该端口是关闭的;没有收到RST包说明该端口可能是开放的或者被屏蔽了。其中Xmas tree包是指flags中FIN URG PUSH被置为1的TCP包;NULL包是指所有的flags都为0的TCP包。
UDP扫描(-sU)
UDP扫描用于判断UDP端口的情况,向目标主机的UDP端口发送探测包,如果收到回复ICMP port unreachable就说明该端口是关闭的;如果没有收到回复,那说明该UDP端口可能是开放的或者屏蔽的。因此,通过反向排除法的方式来判断哪些UDP端口是可能处于开放状态的
三、端口扫描用法
1 -sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描。
2
3 -sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况。
4
5 -sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态。
6
7 --scanflags <flags>: 定制TCP包的flags。
8
9 -sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)
10
11 -sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。
12
13 -sO: 使用IP protocol 扫描确定目标机支持的协议类型。
14
15 -b <FTP relay host>: 使用FTP bounce scan扫描方式
简单扫描(nmap ip)
nmap ip 这个命令会按照nmap-Service文件中指定的端口扫描吗,然后列出目标主机开放的端口号,以及端口号上运行的服务。在一次简单的扫描中,nmap会默认以TCP-SYN扫描目标主机开放的端口号,以及端口是否开放,若开放,则列出对应的服务
全面扫描(nmap -A ip)
这个命令不仅列出目标主机开放的端口号,对应的服务,还较为详细的列出了服务的版本,其支持的命令,到达目标主机的每一跳路由等信息。在进行完全扫描时,扫描机与目标主机之间存在大量的数据流量交互,扫描时长随之增加。完全扫描不仅仅是TCP协议上的通信交互,还有例如ICMP、HTTP、NBSS、TDS、POP等等协议的交互,这些协议的交互是因为在完全扫描开始时首先对目标主机的开放端口进行了确认,之后再根据不同对应的不同服务进行服务版本信息探测、账户信息等信息的探测!
nmap -T4 -A -V ip
-A选项用于使用攻击性方式扫描
-T4指定扫描过程使用的时序,总共有6个级别(0-5)级别越高扫描速度越快,但是也容易被防火墙检测并屏蔽掉,在网络情况较好的是可以使用T4
-v 表示显示冗余信息,在扫描的过程中显示扫描的细节
探测指定端口的开放状态
默认情况下,nmap对端口的扫描方式是从小到大进行的,或者参照nmap-services中文列出的端口进行扫描。-p选项可以指定一个端口号或者一个端口范围。若想扫描TCP端又想扫描UDP端口,需要在前面加上T:或者U:来分别代表TCP和UDP协议。注意,既要扫描TCP又扫描UDP,则需要指定-sU及至少一个TCP扫描类型
(-sS半连接扫描),-sT(全连接扫描)
namp -p 80-445 ip 扫描主机的80-445端口的开放情况
若既想以半连接的TCP SYN方式扫描主机的80端口,又以UDP方式扫描主机的445端口
nmap -sS -sU -p T:80,U:445 ip
探测N个最有可能开放的端口
nmap -sS -sU --top-port 100 ip 表示以TCP和UDP分别扫描最有可能开放的100个端口(TCP和UDP分别100个端口)
四、版本侦测
nmap提供的版本侦测具有如下的优点
1、高速。并行地进行套接字操作,实现一组高效的探测匹配定义语法。
2、尽可能地确定应用名字与版本名字。
3、支持TCP/UDP协议,支持文本格式与二进制格式。
4、支持多种平台服务的侦测,包括Linux/Windows/Mac OS/FreeBSD等系统。
5、如果检测到SSL,会调用openSSL继续侦测运行在SSL上的具体协议(如HTTPS/POP3S/IMAPS)。
6、如果检测到SunRPC服务,那么会调用brute-force RPC grinder进一步确定RPC程序编号、名字、版本号。
7、支持完整的IPv6功能,包括TCP/UDP,基于TCP的SSL。
8、通用平台枚举功能(CPE)
广泛的应用程序数据库(nmap-services-probes)。目前Nmap可以识别几千种服务的签名,包含了180多种不同的协议。
版本侦测用法
比如目标主机把SSH的22号端口改成了2222端口,那么如果使用普通扫描只会发现2222端口是开启的,并不能知道2222号端口上运行的程序,通过加参数 -sV 进行版本扫描,可以探测到目标主机上2222端口运行的是SSH服务
命令:nmap -sV ip
五、OS侦测
具体实现方法
1、Nmap内部包含了2600多已知系统的指纹特征(在文件nmap-os-db文件中)。将此指纹数据库作为进行指纹对比的样本库。
2、分别挑选一个open和closed的端口,向其发送经过精心设计的TCP/UDP/ICMP数据包,根据返回的数据包生成一份系统指纹。
3、将探测生成的指纹与nmap-os-db中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。
OS侦测用法
nmap -O ip
六、nmap高级用法
防火墙与IDS规避为用于绕开防火墙与IDS的检测与屏蔽,以便能够更加详细地发现目标主机的状况。nmap提供了多种规避技巧通常可以从两个方面考虑规避方式:数据包的变换(Packet Change)和时序变换(Timing Change)
分片
将可疑的探测包进行分片处理(例如将TCP包拆分成多个IP包发送过去),某些简单的防火墙为了加快处理速度可能不会进行重组检查,以此避开其检查
ip诱骗(IP decoys)
在进行扫描时,将真实IP地址在和其他主机的IP地址混合使用(其他主机需要在线,否则目标主机将回复大量数据包到不存在的数主机,从而实质构成了DOS攻击),以此让目标主机的防火墙或IDS追踪大量的不同IP地址的数据包,降低其追查到自身的概率。但是,某些高级的IDS系统通过统计分析仍然可以追踪出扫描者真实的IP地址
IP 伪装
IP伪装就是将自己发送的数据包中的IP地址伪装成其他主机的地址,从而目标机认为是其他主机与之通信。需要注意的是,如果希望接收到目标主机的回复包,那么伪装的IP需要位于统一局域网内。另外,如果既希望隐蔽自己的IP地址,又希望收到目标主机的回复包,那么可以尝试使用idle scan 或匿名代理等网络技术
指定端口
某些目标主机只允许来自特定端口的数据包通过防火墙。例如,FTP服务器的配置为允许源端口为21号的TCP包通过防火墙与FTP服务器通信,但是源端口为其他的数据包被屏蔽。所以,在此类情况下,可以指定数据包的源端口
扫描延迟
某些防火墙针对发送过于频繁的数据包会进行严格的侦查,而且某些系统限制错误报文产生的频率。所以,我们可以降低发包的频率和发包延时以此降低目标主机的审查强度
其他技术
nmap还提供其他多种规避技巧,比如指定使用某个网络接口来发送数据包、指定发送包的最小长度、指定发包的MTU、指定TTL、指定伪装的MAC地址,使用错误检查。
1 -f; --mtu <val>: 指定使用分片、指定数据包的 MTU.
2 -D <decoy1,decoy2[,ME],...>: 用一组 IP 地址掩盖真实地址,其中 ME 填入自己的 IP 地址。
3 -S <IP_Address>: 伪装成其他 IP 地址
4 -e <iface>: 使用特定的网络接口
5 -g/--source-port <portnum>: 使用指定源端口
6 --data-length <num>: 填充随机数据让数据包长度达到 Num。
7 --ip-options <options>: 使用指定的 IP 选项来发送数据包。
8 --ttl <val>: 设置 time-to-live 时间。
9 --spoof-mac <mac address/prefix/vendor name>: 伪装 MAC 地址
10 --badsum: 使用错误的 checksum 来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,
11 说明回复来自防火墙或IDS/IPS
实例
nmap -F -Pn -D 10.96.10.100,10.96.10.110,ME -e eth0 -g 5555 202.207.236.3
-F参数表示快速扫描100个端口,-Pn不进行ping扫描,-D表示使用ip诱骗方式掩饰真实ip,使用的是10.96.10.100和10.96.10.110,ME表示自己真实的ip,这里是10.96.10.234,-e 参数指定eth0网卡发送数据包,-g参数指定发送的端口号
参照原文:https://blog.csdn.net/qq_36119192/article/details/82079150
来源:oschina
链接:https://my.oschina.net/u/4399009/blog/3444038