扫描神器Nmap

好久没有冒泡了,今天小迷妹给大家带来所熟知的扫描神器Nmap。Nmap 是可用于UNIX和Windows的免费的开源端口扫描器。它具有可选的图形前端NmapFE,并支持各种扫描类型,每种扫描类型具有不同的优点和缺点。
今天给大家介绍其中的一些扫描类型,说明了它们的相对优势以及它们的实际工作原理。它还提供有关哪种类型的扫描最适​​合哪种类型的主机的提示。(许多扫描需要root或管理员权限)。


#用法

##1. 语法

nmap [扫描类型] [选项] {目标规格}

##2. 选项

目标规格:
可以通过主机名,IP地址,网络等
例如:

scanme.nmap.org,microsoft.com/24,192.168.0.1; 10.0.0-255.1-254
  -iL <inputfilename>:从主机/网络列表输入
  -iR <num hosts>:选择随机目标
  --exclude <host1 [,host2] [,host3],...>:排除主机/网络
  --excludefile <exclude_file>:从文件中排除列表

主机发现:

  -sL:列表扫描 - 只需列出要扫描的目标
  -sn:Ping扫描 - 禁用端口扫描
  -Pn:将所有主机视为在线 - 跳过主机发现
  -PS / PA / PU / PY [portlist]:向给定端口发送TCP SYN / ACK,UDP或SCTP
  -PE / PP / PM:ICMP回显,时间戳和网络掩码请求发现探测
  -PO [协议列表]:IP协议Ping
  -n / -R:不要做DNS解析/总是解决[默认:有时]
  --dns-servers <serv1 [,serv2],...>:指定自定义DNS服务器
  --system-dns:使用操作系统的DNS解析器
  --traceroute:跟踪每个主机的跳转路径

扫描技术:

  -sS / sT / sA / sW / sM:TCP SYN / Connect()/ ACK / Window / Maimon扫描
  -sU:UDP扫描
  -sN / sF / sX:TCP Null,FIN和Xmas扫描
  --scanflags <flags>:自定义TCP扫描标志
  -sI <zombie host [:probeport]>:空闲扫描
  -sY / sZ:SCTP INIT / COOKIE-ECHO扫描
  -sO:IP协议扫描
  -b <FTP中继主机>:FTP跳转扫描

端口规格和扫描订单:

  -p <端口范围>:仅扫描指定的端口
    例如:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
  -F:快速模式 - 扫描比默认扫描更少的端口
  -r:连续扫描端口 - 不要随机化
  --top-ports <number>:扫描<number>最常用的端口
  --port-ratio <ratio>:扫描端口比<ratio>更常见

服务/版本检测:

  -sV:探测打开端口以确定服务/版本信息
  --version-intensity <level>:从0(亮)到9(尝试所有探针)
  - 变换光:极限探测器(强度2)
  --version-all:尝试每一个探针(强度9)
  --version-trace:显示详细的版本扫描活动(用于调试)

脚本扫描:

  -sC:相当于--script = default
  --script = <Lua scripts>:<Lua scripts>是逗号分隔的列表目录,脚本文件或脚本类别
--script-args = <n1 = v1,[n2 = v2,...]>:为脚本提供参数
  --script-args-file = filename:在文件中提供NSE脚本参数
  --script-trace:显示发送和接收的所有数据
  --script-updatedb:更新脚本数据库。
  --script-help = <Lua脚本>:显示有关脚本的帮助。
                          <Lua脚本>是一个逗号分隔的脚本文件列表脚本的类别。

操作系统检测:

  -O:启用操作系统检测
  --osscan-limit:将操作系统检测限制为有希望的目标
  - 可以猜测:猜测操作系统更积极

时间和性能:

  采取<time>的选项以秒为单位,或追加“ms”(毫秒)
  '(秒),'m'(分钟)或'h'(小时)到该值(例如30m)。
  -T <0-5>:设置时间模板(越高越好)
  --min-hostgroup / max-hostgroup <size>:并行主机扫描组大小
  --min-parallelism / max-parallelism <numprobes>:探针并行化
  --min-rtt-timeout / max-rtt-timeout / initial-rtt-timeout <time>:指定
      探测往返时间。
  --max-retries <attempts>:端口扫描探测重传的Caps number。
  --host-timeout <time>:在此之后放弃目标
  --scan-delay /  -  max-scan-delay <time>:调整探测器之间的延迟
  --min-rate <number>:发送速度慢于<number>每秒
  --max-rate <number>:发送数据包速度不超过每秒的<number>

防火墙/ IDS逃避和SPOOFING:

  -F; --mtu <val>:片段数据包(可选地,给定MTU)
  -D <decoy1,decoy2 [,ME],...>:用诱惑遮掩扫描
  -S <IP_Address>:欺骗源地址
  -e <iface>:使用指定的接口
  -g /  -  source-port <portnum>:使用给定的端口号
  --data-length <num>:将随机数据附加到发送的数据包
  --ip-options <options>:使用指定的ip选项发送数据包
  --ttl <val>:设置IP生存时间字段
  --spoof-mac <mac address / prefix / vendor name>:欺骗您的MAC地址
  --badsum:发送具有假TCP / UDP / SCTP校验和的数据包

OUTPUT:

  -oN / -oX / -oS / -oG <file>:正常输出扫描,XML,s | <rIpt kIddi3,
     和Grepable格式,分别给给定的文件名。
  -oA <basename>:一次输出三种主要格式
  -v:增加详细程度(使用-vv或更多的效果)
  -d:增加调试级别(使用-dd或更多更大的效果)
  --reason:显示端口处于特定状态的原因
  --open:仅显示打开(或可能打开)的端口
  --packet-trace:显示发送和接收的所有数据包
  --iflist:打印主机接口和路由(用于调试)
  --log错误:将错误/警告记录到正常格式的输出文件中
  --append-output:追加而不是clobber指定的输出文件
  --resume <filename>:恢复中止的扫描
  --stylesheet <path / URL>:将XML输出转换为HTML的XSL样式表
  --webxml:来自Nmap.Org的引用样式表,用于更多的便携式XML
  --no-stylesheet:防止XSL样式表与XML输出关联

MISC:

  -6:启用IPv6扫描
  -A:启用操作系统检测,版本检测,脚本扫描和跟踪路由
  --datadir <dirname>:指定自定义Nmap数据文件位置
  --send-eth /  -  send-ip:使用原始以太网帧或IP数据包发送
  --privileged:假设用户是完全特权的
  --unprivileged:假设用户缺少原始套接字权限
  -V:打印版本号
  -h:打印此帮助摘要页面。

例子:

  nmap -v -A scanme.nmap.org
  nmap -v -sn 192.168.0.0/16 10.0.0.0/8
  nmap -v -iR 10000 -Pn -p80

##3基本扫描类型[-sT,-sS]


在Nmap中使用的两种基本扫描类型是TCP connect()扫描[-sT]和SYN扫描(也称为半开或隐形扫描)[-sS]。

这两种类型在下面详细说明。

3.1 TCP连接()扫描[-sT]

这些扫描是所谓的,因为UNIX套接字编程使用名为connect()的系统调用来开始到远程站点的TCP连接。
如果connect()成功,则进行连接。如果失败,则无法进行连接(远程系统脱机,端口关闭或沿途出现其他一些错误)。
这允许基本类型的端口扫描,其尝试依次连接到每个端口,并记录连接是否成功。
一旦完成扫描,可以建立连接的端口被打开,其余的被认为是关闭的。

这种扫描方法非常有效,并提供了您可以访问和不能访问的端口的清晰图像。
如果一个connect()扫描将端口列为open,那么你可以连接到它 - 这就是扫描计算机刚刚完成的!
然而,这种扫描有一个主要缺点; 在被扫描的系统上检测非常容易。
如果受害者正在运行防火墙或入侵检测系统,则尝试连接()到系统上的每个端口几乎总是触发警告。
实际上,使用现代防火墙,尝试连接到已被阻止或未被特别“打开”的单个端口通常会导致连接尝试被记录。
此外,大多数服务器将记录连接及其源IP,因此很容易检测TCP连接()扫描的源。

为此,开发了TCP隐形扫描技术。

3.2 SYN隐形扫描[-sS]

我将从TCP连接过程的概述开始本节。熟悉TCP / IP的人可以跳过前几段。

当在两个系统之间进行TCP连接时,会发生称为“三次握手”的过程。
这涉及到三个数据包的交换,并使系统彼此同步(TCP内建的错误纠正是必需的)。
有关详细信息,请参阅一个良好的TCP / IP本书。

发起连接的系统将数据包发送到要连接的系统。
TCP数据包具有一个带有标志字段的头部分
标志告诉接收端有关数据包的类型,因此正确的响应是什么。

在这里,我只谈四个可能的标志。这些是SYN(同步),ACK(应答),FIN(完成)和RST(复位)。
SYN数据包包括一个TCP序列号,使得远程系统能够知道后续通信中期望的序列号。
ACK确认接收到一个数据包或一组数据包,当通信完成时发送FIN,请求连接被关闭,并且当连接复位(立即关闭)时发送RST。

为了发起TCP连接,发起系统向目的地发送一个SYN报文,目的地将用自己的SYN进行响应,确认接收到第一个报文(这些被合并成一个SYN / ACK报文) 。
然后,第一个系统发送ACK数据包来确认SYN / ACK的接收,然后可以开始数据传输。

SYN或Stealth扫描通过发送SYN数据包并查看响应来使用此过程。
如果发回SYN / ACK,端口打开,远端尝试打开TCP连接。扫描仪然后发送一个RST,以便在完全建立连接之前将其断开; 通常会阻止应用程序日志中出现连接尝试。如果端口关闭,RST将被发送。
如果被过滤,则SYN数据包将被丢弃,不会发送响应。这样,Nmap可以检测三种端口状态 -
打开,关闭和过滤。过滤的端口可能需要进一步的探测,因为它们可能受到防火墙规则的限制,这些规则使得它们对某些IP或条件开放,并且对其他端口关闭。

现代防火墙和入侵检测系统可以检测SYN扫描,但结合Nmap的其他功能,可以通过更改时序和其他选项(稍后解释)创建几乎不可检测的SYN扫描。

##4 FIN,Null和Xmas Tree Scans [-sF,-sN,-sX]

现在有许多现代防火墙和IDS正在寻找SYN扫描,这三种扫描类型在不同程度上可能是有用的。每个扫描类型是指TCP头中设置的标志。这些扫描类型的想法是,一个封闭的端口应该在接收到数据包时响应一个RST,而一个开放端口应该丢弃它(它正在侦听具有SYN集的数据包)。这样一来,你永远不会发生连接,也不会发送一个SYN数据包; 这是IDS的大部分内容。

FIN扫描发送只有FIN标志设置的数据包,Xmas Tree扫描设置FIN,URG和PUSH标志(有关更多详细信息,请参阅好的TCP / IP书),Null扫描将发送没有标志打开的数据包。

这些扫描类型将适用于TCP / IP实现遵循RFC 793的任何系统。Microsoft Windows不遵循RFC,即使在封闭端口上也将忽略这些数据包。这种技术性允许您通过运行SYN以及其中一个扫描来检测MS Windows系统。如果SYN扫描显示打开的端口,并且FIN / NUL / XMAS没有,您可能会看到一个Windows框(虽然OS指纹是一种更可靠的方式来确定在目标上运行的操作系统!)

下面的示例显示了针对Linux系统执行的SYN扫描和FIN扫描。结果可以预见地相同,但FIN扫描不太可能出现在日志记录系统中。

1 [chaos]#nmap -sS 127.0.0.1
2
3启动Nmap 4.01在2006-07-06 17:23 BST
4有趣的港口混乱(127.0.0.1):
5(1668端口扫描但未显示如下:
6关闭)
7港口服务
8 21 / tcp open ftp
9 22 / tcp open ssh
10 631 / tcp open ipp
11 6000 / tcp打开X11
12
13 Nmap完成:在0.207中扫描1个IP地址(1个主机)
14秒
15 [混乱] #nmap -sF 127.0.0.1
16
17开始Nmap 4.01在2006-07-06 17:23 BST
18有趣的港口混乱(127.0.0.1):
19(扫描1668个端口,但未显示如下:
20封闭)
21港口服务
22 21 / tcp open | filters ftp
23 22 / tcp open | filtered ssh
24 631 / tcp open | filtered ipp
25 6000 / tcp打开|过滤X11
26
27 Nmap完成:1.在1.284扫描1个IP地址(1个主机)
28秒
##5 Ping扫描[-sP]

此扫描类型列出响应ping的指定范围内的主机。它允许您检测哪些计算机在线,而不是哪些端口是打开的。Nmap中有四种方法用于ping扫描。

第一种方法向目标系统发送ICMP ECHO REQUEST(ping请求)数据包。如果接收到ICMP ECHO REPLY,则系统启动,ICMP报文不被阻塞。如果对ICMP ping没有响应,Nmap将尝试“TCP Ping”,以确定ICMP是否被阻止,或者主机是否真的不在线。

TCP Ping向远程系统上的任何端口(80为默认)发送SYN或ACK数据包。如果返回RST或SYN / ACK,则远程系统处于联机状态。如果远程系统没有响应,则它是脱机的,或者所选择的端口被过滤,因此没有响应任何东西。

当以root身份运行Nmap ping扫描时,默认情况是使用ICMP和ACK方法。非根用户将使用connect()方法,该方法尝试连接到机器,等待响应,并在建立连接后立即拆除连接(类似于根用户的SYN / ACK方法,但是这个建立一个完整的TCP连接!)

可以通过设置-P0来禁用ICMP扫描类型(即,零,而不是大写o)。

##6 UDP扫描[-sU]

使用-sU选项扫描打开的UDP端口。使用此扫描类型,Nmap向受害者的每个目标端口发送0字节的UDP数据包。接收ICMP端口无法访问的消息表示端口已关闭,否则假定为打开。

这种技术的一个主要问题是,当防火墙阻止传出的ICMP端口不可达消息时,端口将显示为open。这些假阳性很难与真正的开放港口区分开来。

UDP扫描的另一个缺点是可以执行的速度。大多数操作系统限制了可以在特定时间段内生成的ICMP端口不可达消息的数量,从而降低了UDP扫描的速度。Nmap相应地调整其扫描速度,以避免用无用数据包淹没网络。这里要注意的一个有趣的一点是,Microsoft不会限制Port Unreachable错误生成频率,因此在很少的时间内很容易扫描Windows机器的65,535 UDP端口!

UDP扫描对于大多数类型的攻击通常不是有用的,但它可以显示关于依赖UDP的服务或木马的信息,例如SNMP,NFS,Back Orifice木马后门以及许多其他可利用的服务。

大多数现代服务使用TCP,因此UDP扫描通常不包括在攻击前信息收集练习中,除非TCP扫描或其他来源指示执行UDP扫描是值得的。

##7 IP协议扫描[-sO]

IP协议扫描尝试确定目标支持的IP协议。Nmap向目标机器上的每个协议发送一个原始IP数据包,而没有任何附加的协议头(有关IP数据包的信息,请参阅好的TCP / IP书)。接收ICMP协议无法访问的消息告诉我们该协议未被使用,否则假定是公开的。并非所有主机都发送ICMP协议无法访问的消息。这些可能包括防火墙,AIX,HP-UX和Digital UNIX)。这些机器将报告所有协议的开放。

这种扫描类型也成为UDP扫描部分中描述的ICMP限制速率的受害者,但是由于只有256个协议是可能的(IP头中的IP协议的8位字段)不应该花费太长时间。

我的Linux工作站上的-sO结果如下。

   1 [chaos]#nmap -sO 127.0.0.1
   2 
   3启动Nmap 4.01在2006-07-14 12:56 BST
   4有趣的混乱协议(127.0.0.1):
   5(扫描的251个协议,下面没有显示
   6状态:关闭)
   7协议国家服务
   8 1打开icmp                    
   9 2打开|过滤igmp                    
  10 6打开tcp                     
  11 17打开udp                     
  12 255打开|过滤未知                 
  13 
  14 Nmap完成:1个IP地址(1个主机)扫描
  15 1.259秒

##8空闲扫描[-sI]

空闲扫描是一种高级的,高度被窃取的技术,其中没有数据包被发送到目标,可以被识别为源自扫描机。必须为此扫描类型指定僵尸主机(和可选端口)。僵尸主机必须满足扫描工作所必需的某些标准。

该扫描类型通过利用僵尸主机上的“可预测的IP分段ID”序列生成来确定目标上的开放端口。
扫描检查僵尸上的IPID,然后欺骗到目标机器的连接请求,使其看起来来自僵尸。
如果目标端口打开,SYN / ACK会话确认将从目标机器发送回僵尸,由于它没有打开这样的连接的记录,所以将RST连接。
如果目标端口关闭,则RST将发送给僵尸,不会再发送进一步的数据包。
然后,攻击者再次检查僵尸上的IPID。
如果它增加了2个(或者按顺序改变了两个步骤),这对应于从目标接收到的数据包,加上来自僵尸的RST,这相当于目标上的一个打开的端口。

使用这种机制,可以扫描目标上的每个端口,同时使僵尸看起来像扫描一样。
当然,恶意的连接尝试可能会被记录下来,所以目标系统会有僵尸IP地址,僵尸系统的日志很可能包含攻击者的IP地址,所以在通过法律渠道获取日志之后仍然有可能,以确定攻击者,但是这种方法比直接从攻击者发送数据包要困难得多。
另外,一些IDS和防火墙软件试图根据从它们到达的网络来检测欺骗的数据包。
只要僵尸主机和攻击者都是“在互联网上”,或者在相同的网络上相对于目标,

这种扫描类型需要僵尸的某些东西。IPID序列生成必须是可预测的(例如,单步增量)。
主机也必须具有低流量,因此Nmap正在进行扫描时,其他数据包不可能击中僵尸(因为这些会人为地增加IPID号码!)。
廉价的路由器或MS Windows盒子成为好的僵尸主机。
大多数操作系统使用随机序列号(有关如何检查目标序列生成类型的详细信息,请参阅“操作系统指纹”部分)。

空闲扫描也可以用于确定主机之间基于IP信任的关系(例如,防火墙可能允许某个主机连接到端口x而不是其他主机)。
此扫描类型可以帮助确定哪些主机可以访问这样的系统。

有关此扫描类型的更多信息,请参阅http://www.insecure.org/nmap/idlescan.html

##9版本检测[-sV]

版本检测收集有关在开放端口上运行的特定服务的信息,包括产品名称和版本号。此信息对于确定攻击的入口点可能至关重要。-sV选项启用版本检测,-A选项可启用操作系统指纹和版本检测,以及将来版本中可能添加的任何其他高级功能。

版本检测是基于一系列复杂的探针,详见版本检测文档http://www.insecure.org/nmap/vscan/

##10 ACK扫描[-sA]

通常用于映射防火墙规则集并区分有状态和无状态防火墙,此扫描类型向主机发送ACK数据包。
如果RST返回,端口被分类为“未过滤”(即允许通过任何防火墙发送RST)。如果没有回来,该端口被称为“过滤”。
也就是说,防火墙阻止了RST从端口返回。
此扫描类型可以帮助确定防火墙是无状态的(仅阻止传入的SYN数据包)还是有状态(跟踪连接并阻塞未经请求的ACK数据包)。

请注意,ACK扫描将永远不会显示处于“打开”状态的端口,因此应与其他扫描类型结合使用,以获取有关您和受害者之间的防火墙或数据包过滤器的更多信息。

##11窗口扫描,RPC扫描,列表扫描[-sW,-sR,-sL]

TCP窗口扫描与ACK扫描类似,但有时可以检测打开的端口以及过滤/未过滤的端口。
这是由于某些操作系统的TCP窗口大小报告异常(有关列表的Nmap手册,或易感操作系统的完整列表的nmap-hackers邮件列表)。

RPC扫描可以与其他扫描类型一起使用,以尝试确定打开的TCP或UDP端口是否是RPC服务,如果是,则在其上运行哪个程序和版本号。RPC扫描不支持诱饵(请参阅下面的“定时和隐藏扫描”一节)。

列表扫描只需打印IP和名称列表(除非将-n选项传递给Nmap,否则将使用DNS解析),而不会实际ping或扫描主机。

##12时间和隐藏扫描

12.1时间

Nmap根据受害者的网络速度和响应时间自动调整其时间。
但是,您可能需要更多的时间控制,以创建更隐秘的扫描,或者更快地扫描并完成扫描。

主时钟选项通过-T参数设置。有六种预定义的定时策略可以通过名称或号码指定(从0开始,对应于偏执时间)。
时间偏执,鬼鬼祟祟,礼貌,正常,进取和疯狂。

A -T偏执(或-T0)扫描将等待(一般)在发送的每个包之间至少5分钟。
这使得防火墙几乎不可能检测正在进行的端口扫描(因为扫描需要很长时间,这很可能归因于随机网络流量)。
这样的扫描仍然会在日志中显示出来,但是它将会如此散布,大多数分析工具或人类将完全错过。

A -T Insane(或-T5)扫描将在很短的时间内映射主机,只要您处于非常快的网络中,或者不介意丢失一些信息。

还可以使用

host_timeout,-max_rtt_timeout,-min_rtt_timeout,-initial_rtt_timeout,-max_parallelism,-min_parallelism和-scan_delay

选项设置扫描的各个方面的时间。有关详细信息,请参阅Nmap手册。

12.2诱饵

-D选项允许您指定Decoys。该选项使它看起来像那些诱饵正在扫描目标网络。
它不会隐藏您自己的IP,但它使您的IP成为其他人的一个人,据称扫描受害者在同一时间。
这不仅使扫描看起来更可怕,而且减少了您从扫描中追踪的机会(难以判断哪个系统是“真实”源)。

12.3 FTP跳转

FTP协议(RFC 959)指定支持“代理”ftp,这允许连接到FTP服务器以将数据发送到互联网上的任何地方。
这往往不适用于现代的ftpds,通常在配置中禁用此选项。如果Nmap使用具有此功能的服务器,则可以尝试连接到受害者的端口,从而确定其状态。

这种扫描方法允许一定程度的匿名性,尽管FTP服务器可以记录发送给它的连接和命令。

12.4关闭Ping

-P0(这是零)选项允许您关闭ICMP ping。-PT选项打开TCP Ping,您可以在-PT选项之后指定端口作为TCP ping的端口。

禁用ping有两个优点:首先,如果您运行的是更为隐身的攻击,它会增加额外的隐身,其次允许Nmap扫描不回复ping的主机(通常,Nmap会将这些主机报告为“下来“,而不扫描它们)。

结合-PT,您可以使用-PS发送SYN数据包,而不是TCP Ping的ACK数据包。

-PU选项(可选端口列表)为您的“ping”发送UDP数据包。这可能最好发送到怀疑关闭的端口而不是打开的端口,因为打开的UDP端口往往不响应零长度的UDP数据包。

其他ping类型是-PE(标准ICMP回显请求),-PP(ICMP时间戳请求),-PM(网络掩码请求)和-PB(默认情况下,同时使用ICMP回显请求和TCP ping,与ACK数据包)

12.5碎片

-f选项在与-sS,-sF,-sX或-sN一起使用时将IP数据包拆分成微小的碎片。这使得防火墙或分组过滤器更难以确定分组类型。请注意,许多现代的数据包过滤器和防火墙(包括iptables)为这些分片包提供可选的碎片整理程序,因此在发送数据包之前将重新组合数据包以检查其类型。较不复杂的防火墙将无法应对这么小的分片数据包,最有可能让操作系统重新组合它们,并将它们发送到要达到的端口。使用此选项可能会崩溃一些不太稳定的软件和硬件,因为数据包大小相当小,这个选项!

12.6空闲扫描

有关空闲扫描的信息,请参阅-sI部分。

##13操作系统指纹

-O选项打开Nmap的操作系统指纹系统。与-v verbosity选项一起使用,您可以获取有关远程操作系统的信息以及有关其TCP Sequenmce Number生成的信息(可用于规划空闲扫描)。

有关操作系统检测的文章,请访问http://www.insecure.org/nmap/nmap-fingerprinting-article.html

##14输出日志

登录Nmap可以由-oN,-oX或-oG选项提供。每一个后跟日志文件的名称。-oN输出一个可读的日志,-oX输出一个XML日志,-oG输出一个可以打印的日志。-oA选项以3种格式输出,而-oS输出格式是我确信你们不会想要使用的(尝试一下,你会看到我的意思!)

-append-output选项将扫描结果附加到您指定的输出文件,而不是覆盖其内容。

##15其他Nmap选项

15.1 IPv6

-6选项在Nmap中启用IPv6(只要您的操作系统具有IPv6支持)。目前只有TCP连接,TCP连接ping扫描受支持。对于其他scantypes,请参阅http://nmap6.sourceforge.net

15.2详细模式

强烈推荐-v

使用-v两次更多的冗长。也可以使用选项-d(一次或两次)来生成更详细的输出。

15.3恢复

用Ctrl + C取消的扫描可以用该–resume 选项恢复。日志文件必须是Normal或Grepable日志文件(-oN或-oG)。

15.4从文件中读取目标

-iL 从inputfilename而不是从命令行读取目标。

该文件应包含主题列表或以空格,制表符或换行符分隔的网络表达式列表。使用连字符作为输入文件使Nmap从标准输入读取。

15.5快速扫描

-F选项仅扫描nmap_services文件中列出的那些端口(或扫描类型为-sO时的协议文件)。这比扫描所有65,535个端口要快得多!

15.6生存时间

该-ttl 选项将IPv4数据包设置为生存时间。这样做的有用性在于通过网络映射路径并确定防火墙上的ACL(将ttl设置为一个过滤包过滤器可以帮助确定有关过滤规则本身的信息)。重复的Nmap扫描到单个端口使用不同的ttl值将模拟一个traceroute样式的网络路径图(尝试它,它很好玩的一段时间,直到你感到无聊,并实现traceroute自动为您做这一切!)。

##16典型扫描会话

首先,我们将使用简单的Ping扫描扫描网络,以确定哪些主机在线。

   1 [chaos]#nmap -sP 10.0.0.0/24
   2 
   3启动Nmap 4.01(http://www.insecure.org/nmap/)at
   4 2006-07-14 14:19 BST
   5主机10.0.0.1似乎已启动。
   6 MAC地址:00:09:5B:29:FD:96(Netgear)
   7主机10.0.0.2似乎已经启动。
   8 MAC地址:00:0F:B5:96:38:5D(Netgear)
   9主机10.0.0.4似乎是up。
  10主机10.0.0.5似乎是up。
  11 MAC地址:00:14:2A:B1:1E:2E(精英电脑系统有限公司)
  12 Nmap完成:在5.399秒内扫描256个IP地址(4个主机)

现在我们来看一下10.0.0.1和10.0.0.2,它们都被列为Netgear在ping扫描中。
这些IP是路由器的良好标准(实际上我知道10.0.0.1是一个路由器,10.0.0.2是一个无线接入点,因为它是我的网络,但是让我们看看Nmap是怎么做的)

我们将使用SYN扫描[-sS]和-A扫描10.0.0.1,以启用操作系统指纹和版本检测。

   1 [chaos]#nmap -sS -A 10.0.0.1
   2 
   3启动Nmap 4.01(http://www.insecure.org/nmap/)at
   4 2006-07-14 14:23 BST
   5 TCP排序响应不足(0),
   OS检测可能不太准确
   7有趣的港口10.0.0.1:
   8(扫描1671个端口,但未显示如下:
   9关闭)
  10港口服务版本
  11 80 / tcp打开tcpwrapped
  12 MAC地址:00:09:5B:29:FD:96(Netgear)
  13设备类型:WAP
  14运行:Compaq嵌入式,Netgear嵌入式
  15操作系统详细信息:WAP:Compaq iPAQ连接点或
  16 Netgear MR814
  17 
  18 Nmap完成:扫描1个IP地址(1个主机)
  19 3.533秒

唯一的开放端口是80 / tcp - 在这种情况下,路由器的Web管理界面。操作系统指纹测试猜测是Netgear无线接入点 - 实际上这是一个Netgear(有线)ADSL路由器。尽管如此,TCP测序没有足够的反应来准确检测操作系统。

现在我们将为10.0.0.2做同样的事情…

   1 [chaos]#nmap -sS -A 10.0.0.2
   2 
   3启动Nmap 4.01(http://www.insecure.org/nmap/)
   4在2006-07-14 14:26 BST
   5有趣的端口10.0.0.2:
   6(1671端口扫描,但未显示如下所示状态:
   7关闭)
   8港口服务版本
   9 80 / tcp打开http Boa HTTPd 0.94.11
  10 MAC地址:00:0F:B5:96:38:5D(Netgear)
  11设备类型:通用
  12运行:Linux 2.4.X | 2.5.X
  操作系统详细信息:Linux 2.4.0  -  2.5.20
  14正常运行时间14.141天(自Fri 6月30日11:03:05 2006)
  15 
  16 Nmap完成:9.636中扫描的1个IP地址(1个主机)
  17秒

有趣的是,这里的操作系统检测列出了Linux,并且版本检测能够检测httpd的运行。
这个准确性是不确定的,这是一个Netgear家庭无线接入点,所以它可以运行一些嵌入式Linux!

现在我们将进入10.0.0.4和10.0.0.5,这些可能是在网络上正常运行的电脑…

   1 [混乱] #nmap -sS -P0 -A -v 10.0.0.4
   2 
   3启动Nmap 4.01(http://www.insecure.org/nmap/)at
   4 2006-07-14 14:31 BST
   1个IP的DNS解析度为0.10s。模式:
   6 Async [#:2,OK:0,NX:1,DR:0,SF:0,TR:1,CN:0]
   7于14:31启动对10.0.0.4 [1672端口]的SYN隐形扫描
   8发现在10.0.0.4上打开21 / tcp端口
   9发现在10.0.0.4上打开端口22 / tcp
  10发现在10.0.0.4上打开端口631 / tcp
  11发现在10.0.0.4上打开端口6000 / tcp
  12 SYN隐形扫描扫描扫描1672个端口。
  13于14:31对10.0.0.4的4项服务启动服务扫描
  14服务扫描花费了6.01秒来扫描1台主机上的4台服务。
  15对于假定端口21打开的OSScan,1关闭,也不是
  16防火墙
  17主机10.0.0.4似乎是up ...好。
  18有趣的港口10.0.0.4:
  19(1668端口扫描,但未显示如下:状态:关闭)
  20端口状态服务版本
  21 21 / tcp open ftp vsftpd 2.0.3
  22 22 / tcp open ssh OpenSSH 4.2(协议1.99)
  23 631 / tcp open ipp CUPS 1.1
  24 6000 / tcp打开X11(访问被拒绝)
  25设备类型:通用
  26运行:Linux 2.4.X | 2.5.X | 2.6.X
  27操作系统详细信息:Linux 2.4.0  -  2.5.20,Linux 2.5.25  -  2.6.8或
  28 Gentoo 1.2 Linux 2.4.19 rc1-rc7
  29 TCP序列预测:Class =随机正增量
  30难度= 4732564(祝你好运!)
  31 IPID序列生成:全零
  32服务信息:OS:Unix
  33 
  34 Nmap完成:8.333秒扫描1个IP地址(1个主机)
  35原始数据包发送:1687(74.7KB)| Rcvd:3382(143KB)

从此,我们可以推断10.0.0.4是一个Linux系统(实际上,我正在打这个教程!)运行一个2.4到2.6内核(实际上,2.6.19.9内核上的Slackware Linux 10.2),打开端口21 / tcp,22 / tcp,631 / tcp和6000 / tcp。
除了6000以外的所有版本信息列出。扫描发现IPID序列全为零,这使得空闲扫描无效,TCP序列预测为随机正整数。需要使用-v选项,让Nmap打印IPID信息!

现在,到10.0.0.5 …

   1 [chaos]#nmap -sS -P0 -A -v 10.0.0.5
   2 
   3启动Nmap 4.01(http://www.insecure.org/nmap/)
   4在2006-07-14 14:35 BST
   5在14:35对10.0.0.5 [1端口]启动ARP Ping扫描
   6 ARP Ping扫描需要0.01秒才能扫描1台主机。
   7个IP的DNS解析取0.02。模式:异步
   8 [#:2,OK:0,NX:1,DR:0,SF:0,TR:1,CN:0]
   9于14:35启动对10.0.0.5 [1672端口]的SYN隐形扫描
  10 SYN隐形扫描扫描了35.72秒扫描总共1672个端口。
  11警告:由于我们这样做,操作系统的检测将不那么可靠
  12找不到至少1个打开和1个关闭的TCP端口
  13主机10.0.0.5似乎是up ...好。
  14.0.0.0.0的所有1672个扫描端口均为:过滤
  15 MAC地址:00:14:2A:B1:1E:2E(Elitegroup Computer System Co.)
  16太多的指纹与此主机匹配,以提供具体的操作系统详细信息
  17 TCP / IP指纹:
  18 SInfo(V = 4.01%P = i686-pc-linux-gnu%D = 7/14%Tm = 44B79DC6%O = -1%C = -1%M = 00142A)
  19 T5(Resp = N)
  20 T6(Resp = N)
  21 T7(Resp = N)
  22 PU(Resp = N)
  23 
  24 Nmap完成:在43.855秒内扫描1个IP地址(1个主机)
  25原始数据包发送:3369(150KB)| Rcvd:1(42B)

没有打开端口,Nmap无法检测到操作系统。这表明它是一个防火墙或其他受保护的系统,没有服务运行(但是它响应了ping扫描)。

我们现在有更多的关于这个网络的信息,而不是我们在开始时所做的,并且可以根据这些结果猜测其他几件事情。使用这些信息和更高级的Nmap扫描,我们可以获得进一步的扫描结果,这将有助于计划攻击或解决这个网络中的缺点。

(本文部分来源于Nmap官网: https://nmap.org/)

4 个赞

###几个常用的脚本

绕开鉴权检测部分应用弱口令

nmap --script=auth x.x.x.x

对数据库,smb,snmp等进行简单密码的暴力猜解

nmap --script=brute x.x.x.x

检查是否存在常见漏洞

nmap --script=vuln x.x.x.x
3 个赞

nmap 漏洞扫描

cd /usr/share/nmap/scripts/
git clone https://github.com/scipag/vulscan.git
nmap --script vulscan --script-args vulscandb = database_name -sV nmap --script vulscan --script-args vulscandb = scipvuldb.csv -sV nmap --script vulscan --script-args vulscandb = exploitdb.csv -sV nmap --script vulscan --script-args vulscandb = securitytracker.csv -sV

服务器资源由ZeptoVM赞助

Partners Wiki Discord