Nmap扫描原理与用法.doc_第1页
Nmap扫描原理与用法.doc_第2页
Nmap扫描原理与用法.doc_第3页
Nmap扫描原理与用法.doc_第4页
Nmap扫描原理与用法.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Nmap 扫描原理与用法 2012年6月16日1 Nmap介绍Nmap是一款开源免费的网络发现(Network Discovery)(Security Auditing)工具。软件名字 Nmap是 Network Mapper的简称。Nmap最初是由 Fyodor在 1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。最新版的 Nmap6.0在 2012年 5月 21日发布,详情请参见:。一般情况下,Nmap用于列举网络主机清单、管理服、监控主机或服状况。Nmap 可以检测目标机是否在线、端口开放情况、侦测运行的服侦测操作系统与设备类型等信息。、Nmap的优点:1. 灵活。支持数十种不同的扫描方式,支持多种目标对象的扫描。2. 强大。Nmap可以用于扫描互联网上大规模的计算机。3. 可移植。支持主流操作系统:Windows/Linux/Unix/Mac OS 等等;源码开放,方便移植。4. 简单。提供默认的操作能覆盖大部分扫描 nmap A targetip。,基本端口扫描 nmap targetip,全面的5. 自由。Nmap作为开源软件,在 GPL License的范围内可以自由的使用。6. 文档丰富。Nmap官网提供了详细的文档描述。Nmap作者及其他安全专家编写了多部 Nmap参考书籍。7. 社区支持。Nmap背后有强大的社区团队支持。8. 赞誉有 。获得很多的奖 ,并在很多影视作(如黑客帝国 2、Die Hard4等)。9. 流行。目 Nmap已经被成千上万的安全专家列为必备的工具之一。1.1 Zenmap Zenmap 是 Nmap 官方提供的图形界面,通常随 Nmap 的安装。Zenmap 是用Python 语言编写而成的开源免费的图形界面,能够运行在不同操作系统平台上(Windows/Linux/Unix/Mac OS等)。Zenmap旨在为 nmap提供更方式。简单常用的操作profile,用户扫描时选择 profile 即可;可以方便地比较不同的扫描结果;提供网络拓扑结构(Network Topology)的图形显示。1 / 23 其中 Profile栏位,用于选择“Zenmap默认提供的 Profile”或“用户创建的 Profile”;Command栏位,用于显示选择 Profile对应的 ;Topology选项卡,用于显示扫描与本机之间的拓扑结构。2 / 23 1.2Nmap:1) 主机发现(Host Discovery)2) 端口扫描(Port Scanning)3) 版本侦测(Version Detection)4) 操作系统侦测(Operating System Detection)而这四项,又存在大致的依赖关系(通常情况下的顺序关系,但特殊应用另外考虑),首先需要进行主机发现,随后确定端口状况,然后确定端口上运行具体应用程序与版本信息,然后可以进行操作系统的侦测。而在四项基本,Nmap提供防火墙与 IDS(Intrusion Detection System,入侵检测系统)的规避技巧,可以综合应用;另外 Nmap提供强大的 NSE(Nmap Scripting Language)脚本引擎本能,脚本可以对基本。3 / 23 2Nmap基本扫描方法Nmap主要扫描,主机发现、端口扫描、应用与版本侦测、操作系统侦测。在详细讲解每个具体,首先可以看看 Nmap的典型用法。2.1 用法引入2.1.1 确定端口状况如果直接针对某台计算的 IP地址或域名进行扫描,那么 Nmap对该主机进行主机发现。该方式执行迅速,可以用于确定端口的开放状况。形式:过程nmap targethost 可以确定目标主机在线情况及端口基本状况。2.1.2 完整全面的扫描如果希望对某台主机进行完整全面的扫描,那么可以使用 nmap 内置的-A 选项。使用了改选项,nmap对目标主机进行主机发现、端口扫描、应用程序与版本侦测、操作系统侦测及调用默认 NSE脚本扫描。:nmap T4 A v targethost 4 / 23 其中-A 选项用于使用进攻性(Aggressive)方式扫描;-T4 指定扫描过程使用的时序(Timing),总有 6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或 IDS检测并屏蔽掉,在网络通讯状况良好的情况推荐使用 T4;-v表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,从而让用户了解当 的扫描状态。例如,扫描局域网内地址为 00的电脑。显而易见,扫描出的信息非常丰富,在对00的扫描报端口扫描出的结果,有 996个关闭端口,4个开放端口(在未指定扫描端口时,Nmap默认扫描 1000 个最有可能开放的端口);而版本侦测针对扫描;OS侦测对该目标主机的设备类型与操作系统进行探测;中(以红框圈出),可以看 主机发现的结果“Host is up”;探测端口上运行的具体的应用程序而绿色框图是 nmap调用 NSE脚本进行进一步的信息挖掘的显示结果。2.2主机发现主机发现(Host Discovery),即用于发现目标主机是否在线(Alive,处于开2.2.1 主机发现原理)。主机发现发现的原理与 Ping类似,发送探测,如果收,那么说明目标主机是开。Nmap 支持十多种不同的主机探测方式,比如发送 ICMP5 / 23 ECHO/TIMESTAMP/NETMASK 报 文 、 发 送 TCP SYN/ACKINIT/COOKIE-ECHOSCTP目标机。主机发现基本原理:(以 ICMP echo方式为例)Nmap的用户位于源端,IP地址 ,向目标主机 发送 ICMP EchoRequest。如果该请求报文没有被防火墙拦截掉,那么目标机会回复 ICMP Echo Reply回来。以此来确定目标主机是否在线。默认情况下,Nmap会发送四种不同类型的数据。.ICMP echo requesta TCP SYN packet to port 443a TCP ACK packet to port 80an ICMP timestamp request依次发送四个报文探测目标机是否开 。只要收,那就证明目标机。开 。使用四种不同类型的数据避免因防火墙或丢2.2.2 主机发现的用法通常主机发现并不单独使用,而只是作为端口扫描、版本侦测、OS侦测先行步骤。而在某些特殊应用(例如确定大型局域网内活。),可能会单独专门适用主机发现不管是作为辅还是专门用途,用户都可以使用 Nmap 提供的丰富的选项来定主机发现的探测方式。-sL: List Scan 列表扫描,仅将指定的目标的 IP列举出来,不进行主机发现。-sn: Ping Scan 只进行主机发现,不进行端口扫描。-Pn: 将所有指定的主机视作开,跳过主机发现的过程。-PS/PA/PU/PYportlist: 使用 TCP SYN/ACK或 SCTP INIT/ECHO方式进行发现。-PE/PP/PM: 使用 ICMP echo, timestamp, and netmask 请求。-POprotocol list: 使用 IP协议对方主机是否开 。-n/-R: -n表示不进行 DNS解析;-R表示总是进行 DNS解析。-dns-servers : 指定 DNS服-system-dns: 指定使用系统的 DNS服-traceroute: 追踪每个路由节点。其中,比较常用的使用的是-sn,表示只单独进行主机发现过程;-Pn 表示直接跳过主机发现而进行端口扫描等高级操作(如果已经确知目标主机已经开 ,可用该选项);-n,如果不想使用 DNS或 reverse DNS解析,那么可以使用该选项。6 / 23 2.2.3 使用演示探测 下面以探测 的主机为例,简单演示主机发现的用法。如下:nmap sn PE PS80,135 PU53 使用 Wireshark抓 ,我们看 , 的 IP地址 7发送了四个探测 :ICMP Echo,80 135端口的TCP SYN53端口的UDPDNS domain)。而收ICMP Echo的回复与80端口的回复。从而确定了主机正常在线。探测局域网内活扫描局域网 00-20范围内IP的主机是活。:nmap sn 00-120 7 / 23 从结果中,可以看IP范围内有三台主机处于活。从 Wireshark抓取的,可以看:在局域网内,Nmap是通过 ARP询问 IP地址上的主机是否活,如果收ARP回复 ,那么说明主机在线。例如,某条 ARP回复的报文详细信息如下:2.3端口扫描端口扫描是 Nmap 最基本最核心的,用于确定目标主机的 TCP/UDP 端口的开放情况。默认情况下,Nmap会扫描 1000个最有可能开放的 TCP端口。8 / 23 Nmap通过探测将端口划分为 6个状态:.5.6.open:端口是开放的。closed:端口是关闭的。filtered:端口被防火墙 IDS/IPS屏蔽,无法确定其状态。unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。open|filtered:端口是开放的或被屏蔽。closed|filtered :端口是关闭的或被屏蔽。2.3.1 端口扫描原理Nmap在端口扫描方面非常强大,提供了十多种探测方式。 TCP SYN scanning这是 Nmap默认的扫描方式,通常被称作半开放扫描(Half-open scanning)。该方式发送 SYN,如果收SYN/ACK回复,那么判断端口是开放的;如果收RST。如果没有收,那么判断该端口被屏蔽(Filtered)。因为该,但不建立的完整的 TCP 连接,所以相对比较方式仅发送 SYN隐蔽,而且效率比较高,适用范围广。TCP SYN探测:TCP SYN探测:TCP connect scanningTCP connect方式使用系统网络 API connect向目标主机的端口发起连接,如果无法连接,说明该端口关闭。该方式扫描速度比较慢,而且由于建立完整的 TCP连接会在目标机上留下记录信息,不够隐蔽。所以,TCP connect是 TCP SYN无法使用才考虑选择的方式。TCP connect探测:9 / 23 TCP connect探测:TCP ACK scanning向目标主机的端口发送 ACKRST;没有收RST。该方式只能用于确定防火墙是否屏蔽某个端口,可以辅TCP SYN的方式来判断目标主机防火墙的状况。TCP ACK探测:TCP ACK探测:TCP FIN/Xmas/NULL scanning这三种扫描方式被称为秘密扫描(Stealthy Scan),因为相对比较隐蔽。FIN扫描向目标主机的端口发送的 TCP FINXmas tree/NullRST回复 ,那(open|filtered)。NULL么说明该端口是关闭的;没有收RST其中 Xmas treeflags中 FIN URG PUSH被置为 1的 TCP10 / 23 有 flags都为 0的 TCPTCP FIN探测:TCP FIN探测:UDP scanningUDP扫描方式用于判断 UDP端口的情况。向目标主机的 UDP端口发送探测 ,如果“ICMP port unreachable”就说明该端口是关闭的;如果没有收 回复,那说明收UDP端口可能是开放的或屏蔽的。因此,通过反向排除法的方式来断定UDP端口是可能出于开放状态。UDP端口关闭:UDP端口开放或被屏蔽:11 / 23 其他方式除上述几种常用的方式之外, Nmap 还支持多种其他探测方式。例如使用 SCTPINIT/COOKIE-ECHO方式来探测 SCTP的端口开放情况;使用 IP protocol方式来探测目标主机支持的协议类型(TCP/UDP/ICMP/SCTP 等等);使用 idle scan 方式借(zombie host,也被称为 idle host,该主机处于空闲状态并且它的 IPID方式为递增。详细实现原理参见:/book/idlescan.html)来扫描目标在主机,达目的;或者使用 FTP bounce scan,借 FTP允许的代理服,同样达隐藏自己的身份的目的。2.3.2 端口扫描用法端口扫描用法比较简单,Nmap提供丰富的。具体可以参见如下描述。 扫描方式选项-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描。-sU: 指定使用 UDP扫描方式确定目标主机的 UDP端口状况。-sN/sF/sX: 指定使用 TCP Null, FIN, and Xmas scans秘密扫描方式来协的 TCP端口状态。-scanflags : 定TCPflags。-sI : 指定使用 idle scan方式来扫描目标主机(zombie host)要找-sY/sZ: 使用 SCTP INIT/COOKIE-ECHO来扫描 SCTP协议端口的开放的情况。-sO: 使用 IP protocol 扫描确定目标机支持的协议类型。-b : 使用 FTP bounce scan扫描方式端口参数与扫描顺序-p : 扫描指定的端口实例: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(其中 T代表 TCP协议、U代表 UDP协议、S代表 SCTP协议)-F: Fast mode 快速模式,仅扫描 TOP 100的端口-r: 不进行端口随机打乱的操作(如无该参数,nmap 会将要扫描的端口以随机顺序方式扫描,以让 nmap的扫描不易被对方防火墙检测 )。-top-ports :扫描开放概率最高的 number个端口(nmap的作者曾经做过大规模地互联网扫描,以此统计出网络上各种端口可能开放的概率。以此排列出最有可能开放端口的列表,具体可以参见文件:nmap-services。默认情况下,nmap 会扫描最有可能的1000个 TCP端口)-port-ratio : 扫描指定频率以上的端口。与上述-top-ports类似,这里以概率作12 / 23 为参数,让概率大于-port-ratio的端口才被扫描。显然参数必须在在 0 1之间,具体范围概率情况可以查看 nmap-services文件。2.3.3 端口扫描演示这里,我们以扫描局域网内 00主机为例。:nmap sS sU T4 top-ports 300 00 参数-sS表示使用 TCP SYN方式扫描 TCP端口;-sU表示扫描 UDP端口;-T4表示时间级别配置 4级;-top-ports 300表示扫描最有可能开放的 300个端口(TCP别有 300个端口)。UDP分从上图中,我们看,横线处写明有共有 589 端口是关闭的;红色框图中列举出开放的端口。2.4版本侦测版本侦测,用于确定目标主机开放端口上运行的具体的应用程序及版本信息。Nmap提供的版本侦测具有如下的优点: 高速。并行地进行套接字操作,实现一组高效的探测匹配定义语法。 尽可能地确定应用名字与版本名字。 支持 TCP/UDP协议,支持文本格式与二进。13 / 23 支持多种平台服 如果检测 SSL,会调用 openSSL 继续侦测运行在 SSL 上的具体协议(如HTTPS/POP3S/IMAPS)。,Linux/Windows/Mac OS/FreeBSD等系统。 如果检测 SunRPC服 ,那么会调用 brute-force RPC grinder进一步确定 RPC程序编号、名字、版本号。 支持完整的 IPv6 通用平台枚举,TCP/UDP,基于 TCP的 SSL。(CPE) 广泛的应用程序数据库(nmap-services-probes)。目 Nmap可以识别几千种服,180多种不同的协议。2.4.1 版本侦测原理简要的介绍版本的侦测原理。版本侦测主要分为以下几个步骤:1. 首先检查 open与 open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口。2. 如果是 TCP 端口,尝试建立 TCP 连接。尝试等待片 (通常 6 秒或更多,具体时间可以查询文件 nmap-services-probes 中 Probe TCP NULL q|对应的totalwaitms)。通常在等待时间内,会接收发送的“Welcome Banner”信息。nmap将接收 Banner与 nmap-services-probes中 NULL probe中的签名进行对比。查找对应应用程序的名字与版本信息。3. 如果通过“Welcome Banner”无法确定应用程序版本,那么 nmap再尝试发送其他的探测 (即从 nmap-services-probes中挑选合适的 probe),将 probe得复数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。4. 如果是 UDP端口,那么直接使用 nmap-services-probes中探测。根据结果对比分析出 UDP应用服5. 如果探测。SSL,那么调用 openSSL 进一步的侦查运行在 SSL 之上的具体的应用类型。6. 如果探测SunRPC,那么调用 brute-force RPC grinder进一步探测具体服 。2.4.2 版本侦测的用法版本侦测方面的。-sV: 指定让 Nmap进行版本侦测-version-intensity : 指定版本侦测强度(0-9),默认为 7。数值越高,探测出的,但是运行时间会比较长。服-version-light: 指定使用轻量侦测方式 (intensity 2)-version-all: 尝试使用所有的 probes进行侦测 (intensity 9)-version-trace: 显示出详细的版本侦测过程信息。14 / 23 2.4.3 版本侦测演示:nmap sV 00对主机 00进行版本侦测。从结果中,我们可以看996个端口是关闭状态,对于 4个 open的端口进行版本侦测。图中红色为版本信息。红色线条划出部分是版本侦测得,因为从应用中检测微软特定的应用服 ,所以推断出对方运行的 Windows的操作系统。2.5OS侦测操作系统侦测用于检测目标主机运行的操作系统类型及设备类型等信息。Nmap 拥有丰富的系统数据库 nmap-os-db,目 可以识别 2600 多种操作系统与设备类型。2.5.1 OS侦测原理Nmap 使用 TCP/IP 协议栈指纹来识别不同的操作系统 设备。在 RFC 规范中,有些地方对 TCP/IP的实现并没有强,由此不同的 TCP/IP方案中可能都有自己的特定方式。Nmap主要是根据这些细节上的差异来判断操作系统的类型的。具体实现方式如下: Nmap内部2600多已知系统的指纹特征(在文件 nmap-os-db文件中)。将此指纹数据库作为进行指纹对比的样本库。 分别挑选一个 openclosed的端口,向其发送经过精心设计的 TCP/UDP/ICMP数据 ,根据返回的数据系统指纹。15 / 23 将探测生成的指纹与 nmap-os-db中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。2.5.2 OS侦测用法OS侦测的用法简单,Nmap提供的-O: 指定 Nmap进行 OS侦测。-osscan-limit: 限 Nmap只对确定的主机的进行 OS探测(至少需确知该主机分别有一个 openclosed的端口)。-osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统。2.5.3 OS侦测演示:nmap O 00 从上图中可看 ,指定-O 选项后先进行主机发现与端口扫描,根据扫描来进行进一步的 OS侦测。获取的结果信息有设备类型,操作系统类型,操作系统的 CPE描述,操作系统细节,网络距离等。16 / 23 3Nmap高级用法3.1 防火墙/IDS规避防火墙与 IDS 规避为用于绕开防火墙与 IDS(入侵检测系统)的检测与屏蔽,以便能够更发现目标主机的状况。Nmap提供了多种规避技巧,通常可以从两个方面考虑规避方式:数据变换(PacketChange)与时序变换(Timing Change)。3.1.1 规避原理 分片(Fragmentation)将可疑的探测处理(例如将 TCPIP),某些简单的防火墙为了处理速度可能不会进行重组检查,以此避开其检查。IP诱骗(IP decoys)在进行扫描时,将真实 IP地址 其他主机的 IP地址(其他主机需要在线,否则目标主机将回复大量数据不存在的主机,从而实质构成了拒绝服)混合使用,以此让目标主机的防火墙或 IDS 追踪检查大量的不同 IP 地址的数据 ,降低其追查注意,某些高级的 IDS系统通过统计分析仍然可以追踪出扫描者真实 IP地址。概率。IP伪装(IP Spoofing)顾名思义,IP伪装即将自己发送的数据IP地址伪装成其他主机的地址,从而目标机认为是其他主机在与之通信。需要注意,如果希望接收,那么伪装的 IP需要位于统一局域网内。另外,如果既希望隐蔽自己的 IP地址,又希望收的回复 ,那么可以尝试使用 idle scan或匿名代理(如 TOR)等网络技术。指定源端口某些目标主机只允许来自特定端口的数据。例如 FTP 服配置为:允许源端口为 21号的 TCP防火墙与 FTP服,但是源端口为其他端口的数据。所以,在此类情况下,可以指定 Nmap 将发送的数据端口。17 / 23 扫描延时某些防火墙针对发送过于频繁的数据,而且某些系统限产生的频率(例如,Solaris 系统通常会限 每秒钟只能产生一个 ICMP 消息回复给 UDP扫描),所以,定络带宽。的频率 发可以降低目标主机的审查强度、节省网其他技术Nmap还提供多种规避技巧,比如指定使用某个网络接口来发送数据 、指定发送最小长度、指定发MTU、指定 TTL、指定伪装的 MAC地址、使用错误检查(badchecksum)。更多信息 /book/man-bypass-firewalls-ids.html3.1.2 规避用法-f; -mtu : 指定使用分片、指定数据MTU.-D : 用一组 IP 地址掩盖真实地址,其中 ME填入自己的 IP地址。-S : 伪装成其他 IP地址-e : 使用特定的网络接口-g/-source-port : 使用指定源端口-data-length : 填充随机数据让数据Num。-ip-options : 使用指定的 IP选项来发送数据 。-ttl : 设置 time-to-live时间。-spoof-mac : 伪装 MAC地址-badsum: 使用错误的 checksum来发送数据 (正常情况下,该类数据,说明回复来自防火墙或 IDS/IPS)。,如果收3.1.3 规避演示使用:nmap -v -F -Pn -D 00,02,ME -e eth0 -g 3355 其中,-F表示快速扫描 100个端口;-Pn表示不进行 Ping扫描;-D表示使用 IP诱骗方式掩盖自己真实 IP(其中 ME表示自己 IP);-e eth0表示使用 eth0网卡发送该数据 ;-g 3355表示自己的源端口使用 3355;是被扫描的目标 IP地址。18 / 23 我们可以从 Wireshark 中看:对于每个探测 ,Nmap 都使用-D选项指定的 IP地址发送不同的数据 ,从而达 扰乱对方防火墙/IDS检查的目的(更好的方式-D 选项中嵌入 RND 随机数,这样更具有迷惑性)。当探测 80 端口时候,目标主机向我们回复了 SYN/ACK(当然也向其他诱骗的 IP 回复 SYN/ACK收 ),证明 80端口是开放的。19 / 23 3.2NSE脚本引擎NSE脚本引擎(Nmap Scripting Engine)是 Nmap最强大最灵活的,允许用户自己编写脚本来执行自Nmap的NSE 使用 Lua 脚本语言,并且默认提供了丰富的脚本库,目350多个脚本。14 个类别的NSE的设计初衷主要考虑以下几个方面: 网络发现(Network Discovery) 更(例如 skype软件) 漏洞侦测(Vulnerability Detection) 后门侦测(Backdoor Detection) 漏洞利用(Vulnerability Exploitation)3.2.1 NSE创建脚本方法下面以 daytime.nse脚本为例说明一下 NSE格式。NSE的使用 Lua脚本,并且配置固定格式,以减轻用户编程负担。通常的一个脚本分为几个部分:description字段:描述脚本,使用双层方括号表示。comment字段:以-开头的行,描述脚本输出格式author字段:描述脚本作者license字段:描述脚本使用许可证,通常配置为 Nmap相同的 licensecategories字段:描述脚本所属的类别,以对脚本的调用进行管理。rule 字段:描述脚本执

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论