渗透利器--nmap超级详解一

目录

0x01 nmap简介

0x02 四大功能一 -- 主机发现 

0x03 四大功能二 -- 端口扫描

0x04 四大功能三 -- 服务和版本检测 

0x05 四大功能四 -- 操作系统侦测

0x06 总结:


0x01 nmap简介

(1)Nmap 一款开源免费的网络发现安全审计工具。名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的,随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。最新版的Nmap6.0在2012年5月21日发布,现如今最新版本到Nmap7.90。

        官网下载地址:www.nmap.org。

        中文手册:http://www.nmap.com.cn/doc/manual.shtm#4(版本有点老)

(2)Zenmap是Nmap官方提供的图形界面(随Nmap的安装包发布),旨为nmap提供更加简单的操作方式,由Python语言编写而成的开源免费的图形界面,能够运行在现有操作系统平台上。

(3)Nmap包含四项基本功能:主机发现、端口扫描、版本侦测以及操作系统侦测。


0x02 四大功能一 -- 主机发现 

(1)Nmap支持十多种不同的主机探测方式,可根据实际情况灵活选用不同的方式来探测目标机:

1) -sn: Ping Scan 只进行主机发现,不进行端口扫描。通常称为"ping 扫描",在以前的 Nmap 版本中,-sn被称为 -sP。它允许对目标网络进行轻度侦察,而不会引起太多关注。

2) -Pn:  完全跳过主机发现阶段。默认情况下,Nmap只对正在运行的主机进行高强度的探测如:端口扫描、版本探测或者操作系统探测。用此命令可以使Nmap对每一个指定的目标IP地址都进行所要求的扫描。老版本称作-P0(数字0)。通常实际使用中 -Pn -sn 一起使用。

3) -PU: 使用UDP ping探测主机,当设备的外部接口过滤所有TCP端口情况下使用。未指定端口,则默认为 40125,修改位置:可在nmap.h文件中修改此默认值DEFAULT_UDP_PROBE_PORT_SPEC。

4) -PR[ARP Ping]:使用场景之一是扫描一个以太局域网, 比基于IP的扫描更快更可靠。在默认情况下,如果Nmap发现目标主机就在它所在的局域网上,它会进行ARP扫描,即使指定了不同的ping类型。

5) -PO[protocollist]: 使用IP协议包探测对方主机是否开启。 

6) -PE/PP/PM: 使用ICMP echo、 ICMP timestamp、ICMP netmask 请求包发现主机。

7) -PS/PA/PY[portlist]: 使用TCP SYN/TCP ACK或SCTP INIT方式进行发现。

8) -sL: 一种退化形式,它简单地列出指定网络的每个主机,而不向目标主机发送任何数据包。 

9) -n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。 

10) --dns-servers : 指定DNS服务器。 

11) --system-dns: 指定使用系统的DNS服务器 

12) --traceroute: 追踪每个路由节点

(2)常用命令 -sn 抓包解析: 

        1)扫描公网ip时:

        Nmap会发送四种不同类型的数据包来探测目标主机是否在线。

        ①ICMP echo request

        ②a TCP SYN packet to port 443(https)

        ③a TCP ACK packet to port 80(http)

        ④an ICMP timestamp request

        使用此命令探测会依次发送这四个报文探测目标机是否开启。只要收到其中一个包的回复,就可以证明目标机开启。同时使用这四种不同类型的数据包可以有效避免因防火墙或丢包而造成的判断错误。

        2)扫描内网ip时:

        使用此命令会发送arp请求包探测目标ip是否在线,如果有arp回复包,则说明在线。如果在线,此命令还可以得到其MAC地址,但是不会探测其开放的端口号。

(3)高级命令 -PE/-PP/-PM/PU 抓包分析:

        ① -PE(ICMP Echo): 通过向目标发送ICMP Echo数据包来探测目标主机是否存活,但由于许多主机的防火墙会禁止这些报文,实际使用需要配合其他命令才有更好效果。

渗透利器--nmap超级详解一_第1张图片

         ② -PP(ICMP time stamp): 该扫描方式在大多数防火墙配置不当时可能会得到回复从而判断目标主机是否存活。如果目标主机在线,该命令还会探测其开放的端口以及运行的服务。  

渗透利器--nmap超级详解一_第2张图片

         ③ -PM(ICMP address maskPing):通过地址掩码方式扫描,会试图用备选的ICMP等级Ping指定主机,有不错的穿透防火墙的效果。

渗透利器--nmap超级详解一_第3张图片

        ④-PU(UDP ping):它发送一个空的(除非指定了--data-length UDP)报文到给定的端口探测主机。如果目标机器的端口是关闭的,则会得到一个ICMP端口无法到达的回应报文;反则到达一个开放的端口,大部分服务仅仅忽略这个空报文而不做任何回应。未指定端口,则默认为 40125,该扫描类型的主要优势是它可以穿越只过滤TCP的防火墙和过滤器。

 4)总结:实际使用过程中主机发现并不单独使用,而只是作为端口扫描、版本侦测、OS侦测先行步骤。通常只有在探测某些大型局域网的活动主机数量时才会单独使用主机发现功能来完成。


0x03 四大功能二 -- 端口扫描

 (1)核心功能,用于确定目标主机的TCP/UDP端口的开放情况。默认情况下,Nmap会扫描1000个最有可能开放的TCP端口。

 (2)Nmap通过探测将端口划分为6个状态:

         1)open:端口是开放的。

        2)closed:端口是关闭的。

        3)filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。

        4)unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。

        5)unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。

        6)closed|filtered :端口是关闭的或被屏蔽,Nmap不能识别。

(3)-sS (TCP SYN扫描):

        这是Nmap默认的扫描方式,通常被称作半开放扫描。该方式发送SYN到目标端口,如果收到SYN/ACK回复,那么可以判断端口是开放的;如果收到RST包,说明该端口是关闭的。如果没有收到回复,那么可以判断该端口被屏蔽了。执行得很快,扫描相对来说不张扬,不建立完整的TCP连接,所以相对比较隐蔽,而且效率比较高,适用范围广

渗透利器--nmap超级详解一_第4张图片

 (4)-sT (TCP connent扫描):

        使用系统网络API connect向目标主机的端口发起连接,如果无法连接,说明该端口关闭。该方式扫描速度真的是,而且由于建立完整的TCP连接会在目标主机上留下记录信息,不够隐蔽。所以,-sT命令是TCP SYN无法使用才考虑使用的方式。

(5)-sA (TCP ACK 扫描):

        向目标主机的端口发送ACK包,如果收到RST包,说明该端口没有被防火墙屏蔽;没有收到RST包,说明被屏蔽。该方式只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况。

渗透利器--nmap超级详解一_第5张图片

(6)-sU (UDP扫描-sU):

        UDP扫描用于判断UDP端口的情况,向目标主机的UDP端口发送探测包,如果收到回复ICMP port unreachable就说明该端口是关闭的;如果没有收到回复,那说明该UDP端口可能是开放的或者屏蔽的。因此,通过反向排除法的方式来判断哪些UDP端口是可能处于开放状态的。 

 (7)-sN/sF/sX (TCP FIN/Xmas/NULL 扫描):

       这三种扫描方式被称为秘密扫描,因为相对比较隐蔽。FIN扫描向目标主机的端口发送的TCP FIN 包、Xmas tree包或NULL包,如果收到对方的RST回复包,那么说明该端口是关闭的;没有收到RST包说明该端口可能是开放的或者被屏蔽了。其中Xmas tree包是指flags中FIN URG PUSH被置为1的TCP包;NULL包是指所有的flags都为0的TCP包。

(8)-sY/-sZ (SCTP INIT/COOKIE-ECHO):

        除了以上几种常用的方式外,Nmap还支持多种其他的探测方式。例如使用SCTP INIT/Cookie-ECHO方式是来探测SCTP的端口开放情况。

(9)-sS -sU 联用探测指定端口的开放状态:

        若既想扫描目标TCP端口又想扫描UDP的端口,则需要指定扫描方式以及端口。

        例: nmap  -sS   -sU  -p  T:80,U:445   192.168.187.129    

        以半连接的TCP SYN方式扫描目标主机的80端口,以UDP方式扫描目标主机的445端口。

(10)--top-ports 探测N个最有可能开放的端口:

        例:nmap -sS -sU --top-ports 100 10.96.10.246

        与 -F 有异曲同工之处:通常 Nmap 会为每个扫描的协议扫描最常见的 1000 个端口。使用 -F,这减少到 100。

(11)-r 不要随机化端口:

        默认情况下,Nmap 会随机顺序扫描的端口(除了某些常见的端口出于效率原因移动到开头附近)。可以指定 -r 顺序(从低到高排序)端口扫描。


0x04 四大功能三 -- 服务和版本检测 

 (1)用于确定目标主机开放端口上运行的具体的应用程序及版本信息。

(2)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)。

        9广泛的应用程序数据库(nmap-services-probes)。目前Nmap可以识别几千种服务的签名,包含了180多种不同的协议。

(3)版本侦测原理:

        1)首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。

        2)如果是TCP端口,尝试等待6秒建立TCP连接(默认值6秒,可在文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms值修改)。

        如果在等待时间内,接收到目标机发送的“WelcomeBanner”信息。nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比。查找对应应用程序的名字与版本信息。

        如果通过“Welcome Banner”无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。

        3)如果是UDP端口,那么直接使用nmap-services-probes中的探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。

(4)版本侦测用法:

1)-sV:  常用的指令,指定让Nmap进行版本侦测。

   当目标主机把ftp的21号端口改成了12端口,普通扫描则只探测到12端口是开启的,并不12号端口上运行的具体程序,可通过加参数  -sV  探测到目标主机上12端口运行的是ftp服务。

2)--version-intensity : 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。

3)--version-light: 指定使用轻量侦测方式 (intensity 2)。

4)--version-all: 尝试使用所有的probes进行侦测 (intensity 9)。

5)--version-trace: 显示出详细的版本侦测过程信息。

0x05 四大功能四 -- 操作系统侦测

(1)Nmap拥有丰富的系统数据库nmap-os-db,目前可以识别2600多种操作系统与设备类型。

(2)OS侦测原理:

        使用 TCP/IP 堆栈指纹进行远程操作系统检测。Nmap 向远程主机发送一系列 TCP 和 UDP 数据包,并几乎检查响应中的每一位。在执行了 TCP ISN 采样、TCP 选项支持和排序、IP ID 采样和初始窗口大小检查等数十项测试后,Nmap 将结果与其 nmap-os-db 中的2600 多个已知操作系统指纹的数据库进行匹配得出操作系统详细信息。

        具体简化:

        1)Nmap内部包含了2600多已知系统的指纹特征(在文件nmap-os-db文件中)。将此指纹数据库作为指纹匹配的样本库。

        2)分别挑选一个open和closed的端口,向其发送经过精心设计的TCP/UDP/ICMP数据包,根据返回的数据包生成一份系统指纹。

        3)将探测生成的指纹与nmap-os-db中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。

(3)OS侦测用法:

1)-O: 指定Nmap进行OS侦测。

2)--osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)。

3)--osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统。

0x06 总结:

(1)nmap -T[0-5] 时间参数如何选择:

        1)-T0:非常慢,可用于躲避目标主机的防火墙拦截。

        2)-T1:比较慢,可用于躲避目标主机的防火墙拦截。

        3)-T2:一般不用,可以降低对带宽的消耗,相应速度降下来了。

        4)-T3:默认,根据目标的反应自动调整时间。

        5)-T4:快速扫描,常用,需要在很好的网络环境下进行扫描,请求可能会淹没目标。

        6)-T5:极速扫描,速度飞快同时牺牲了准确度。

(2)常用参数:  

-sn:只进行主机存活检测,不进行端口扫描。通常称为"ping 扫描",在以前的 Nmap 版本中,-sn被称为 -sP。它允许对目标网络进行轻度侦察,而不会引起太多关注。

-sS:半开放扫描。默认的端口扫描方式,不建立完整的3次握手,不在目标主机上产生任何日志记录就能获得远程主机的端口开放信息。

-Pn:跳过主机发现进行后续扫描,解决因主机的防火墙拦截而误以为当前主机不存活,导致停止所有后续扫描问题。

-sT:需要完成三次握手,速度慢,通常在 -sS 无法使用才考虑使用的方式。

-O:检测操作系统类型。

-sA:用来穿过防火墙的规则集,速度慢。

-sV:实用于目标主机端口更换绑定后的服务及版本探测。

-v:在扫描的过程显示详细信息。

(3)-A (全面扫描):

        这个命令不仅列出目标主机开放的端口号,对应的服务,还较为详细的列出了服务的版本,其支持的命令,到达目标主机的每一跳路由等信息。在进行完全扫描时,扫描机与目标主机之间存在大量的数据流量交互,扫描时长随之增加。完全扫描不仅仅是TCP协议上的通信交互,还有例如ICMP、HTTP、NBSS、TDS、POP等等协议的交互。

        通常搭配 -T4 一起使用:  >> nmap -A -T4 192.168.187.129

 

你可能感兴趣的:(工具使用,nmap)