admin管理员组

文章数量:1547451


文章目录

    • 目标说明
      • 给定一个ip直接扫描
      • **`-iL `** (从列表中输入)
      • **`-iR `** (随机选择目标)
    • 主机发现
      • **-sL (列表扫描)**
      • **-sP (Ping扫描)@**
      • -P0 (无ping)**
      • **-PS [portlist] (TCP SYN Ping)**
      • **-PA [portlist] (TCP ACK Ping)**
      • **-PU [portlist] (UDP Ping)**
      • -PR (ARP Ping)
      • **-n (不用域名解析)**
      • -R (为所有目标解析域名)
      • **--system-dns (使用系统域名解析器)**
    • 端口扫描基础
      • open(开放的)
      • **closed(关闭的)**
      • **filtered(被过滤的)**
      • **unfiltered(未被过滤的)**
    • 端口扫描技术
      • **-sS (TCP SYN扫描)**
      • **-sT (TCP connect()扫描)**
      • **-sA (TCP ACK扫描)**
      • 自定义端口扫描
      • -Pn 非ping扫描,不执行主机发现,可以跳过防火墙 ( `常用`)
      • -sV 探测打开端口对应服务的版本信息
      • -vv 对扫描结果详细输出(vv小写)
      • 操作系统检测 -O(O大写)
      • 路由追踪扫描
      • @万能开关扫描@
    • 识别和绕过防火墙和IDS
      • -f (数据分片)
      • **`-D

目标说明

除了选项,所有出现在Nmap命令行上的都被视为对目标主机的说明。 最简单的情况是指定一个目标IP地址或主机名。

有时候您希望扫描整个网络的相邻主机。为此,Nmap支持CIDR风格的地址。您可以附加 一个**在一个IP地址或主机名后面, Nmap将会扫描所有和该参考IP地址具有 **相同比特的所有IP地址或主机。 例如,192.168.10.0/24将会扫描192.168.10.0 (二进制格式: 11000000 10101000 00001010 00000000)和192.168.10.255 (二进制格式: 11000000 10101000 00001010 11111111)之间的256台主机。 192.168.10.40/24 将会做同样的事情。假设主机 scanme.nmap的IP地址是205.217.153.62, scanme.nmap/16 将扫描205.217.0.0和205.217.255.255之间的65,536 个IP地址。 所允许的最小值是/1, 这将会扫描半个互联网。最大值是/32,这将会扫描该主机或IP地址, 因为所有的比特都固定了。

CIDR标志位很简洁但有时候不够灵活。例如,您也许想要扫描 192.168.0.0/16,但略过任何以.0或者.255 结束的IP地址,因为它们通常是广播地址。 Nmap通过八位字节地址范围支持这样的扫描 您可以用逗号分开的数字或范围列表为IP地址的每个八位字节指定它的范围。 例如,192.168.0-255.1-254 将略过在该范围内以.0和.255结束的地址。 范围不必限于最后的8位:0-255.0-255.13.37 将在整个互联网范围内扫描所有以13.37结束的地址。 这种大范围的扫描对互联网调查研究也许有用。

Nmap命令行接受多个主机说明,它们不必是相同类型。命令nmap scanme.nmap 192.168.0.0/8 10.0.0,1,3-7.0-255 将和您预期的一样执行。

虽然目标通常在命令行指定,下列选项也可用来控制目标的选择:

给定一个ip直接扫描

这种扫描方式以及-sP 扫描,检测网络上哪些主机正在运行 ,通过向指定的IP地址发送ICMP echo请求数据包,收到一个RST包,就表示主机正在运行。

-iL <inputfilename> (从列表中输入)

​ 从<inputfilename>中读取目标说明。在命令行输入 一堆主机名显得很笨拙

-iR <hostnum> (随机选择目标)

​ 对于互联网范围内的调查和研究, 您也许想随机地选择目标。 <hostnum> 选项告诉 Nmap生成多少个IP。 选项 0 意味着永无休止的扫描。记住,一些网管对于未授权的扫描可能会很感冒并加以抱怨。 使用该选项的后果自负! 如果在某个雨天的下午,您觉得实在无聊, 试试这个命令 nmap -sS -PS80 -iR 0 -p 80随机地找一些网站浏览。

主机发现

​**任何网络探测任务的最初几个步骤之一就是把一组IP范围(有时该范围是巨大的)缩小为 一列活动的或者您感兴趣的主机。**扫描每个IP的每个端口很慢,通常也没必要。
主机发现有时候也叫做ping扫描,但它远远超越用世人皆知的ping工具 发送简单的ICMP回声请求报文。用户完全可以通过使用列表扫描(-sL)或者 通过关闭ping (-P0)跳过ping的步骤,也可以使用多个端口把TPC SYN/ACK,UDP和ICMP 任意组合起来玩一玩。这些探测的目的是获得响应以显示某个IP地址是否是活动的(正在被某 主机或者网络设备使用)。 在许多网络上,在给定的时间,往往只有小部分的IP地址是活动的。 这种情况在基于RFC1918的私有地址空间如10.0.0.0/8尤其普遍。 那个网络有16,000,000个IP,但我见过一些使用它的公司连1000台机器都没有。 主机发现能够找到零星分布于IP地址海洋上的那些机器。

下列选项控制主机发现。

-sL (列表扫描)

列表扫描是主机发现的退化形式,它仅仅列出指定网络上的每台主机, 不发送任何报文到目标主机,并不能确定那些主机是否正在运行。

-sP (Ping扫描)@

该选项告诉Nmap仅仅 进行ping扫描 (主机发现),然后打印出对扫描做出响应即正在运行的那些主机。 没有进一步的测试 (如端口扫描或者操作系统探测)。 这比列表扫描更积极,常常用于和列表扫描相同的目的。它可以得到些许目标网络的信息而不被特别注意到。 对于攻击者来说,了解多少主机 正在运行 比列表扫描提供的一列IP和主机名往往更有价值。

-P0 (无ping)**

该选项完全跳过Nmap发现阶段。 通常Nmap在进行高强度的扫描时用它确定正在运行的机器。 **默认情况下,Nmap只对正在运行的主机进行高强度的探测如 端口扫描,版本探测,或者操作系统探测。用-P0禁止 主机发现会使Nmap对每一个指定的目标IP地址 进行所要求的扫描。**所以如果在命令行指定一个B类目标地址空间(/16), 所有 65,536 个IP地址都会被扫描。 -P0的第二个字符是数字0而不是字母O。 和列表扫描一样,跳过正常的主机发现,但不是打印一个目标列表, 而是继续执行所要求的功能,就好像每个IP都是活动的。

-PS [portlist] (TCP SYN Ping)

基于SYN的主机发现
该选项发送一个设置了SYN标志位的空TCP报文。SYN标志位告诉对方您正试图建立一个连接。 通常目标端口是关闭的,一个RST (复位) 包会发回来。 如果碰巧端口是开放的,目标会进行TCP三步握手的第二步,回应 一个SYN/ACK TCP报文。然后运行Nmap的机器则会扼杀这个正在建立的连接, 发送一个RST而非ACK报文,否则,一个完全的连接将会建立。

Nmap并不关心端口开放还是关闭。 无论RST还是SYN/ACK响应,只要你回复了,都告诉Nmap该主机正在运行。

-PA [portlist] (TCP ACK Ping)

基于ACK的主机发现
TCP ACK ping和刚才讨论的SYN ping相当类似。 也许您已经猜到了,区别就是设置TCP的ACK标志位而不是SYN标志位。 ACK报文表示确认一个建立连接的尝试,但该连接尚未完全建立。 所以远程主机应该总是回应一个RST报文, 因为它们并没有发出过连接请求到运行Nmap的机器,如果它们正在运行的话。

-PA选项使用和SYN探测相同的默认端口(80),也可以用相同的格式指定目标端口列表。提供SYN和ACK两种ping探测的原因是使通过防火墙的机会尽可能大。

-PU [portlist] (UDP Ping)

基于UDP的主机发现
它发送一个空的(除非指定了–data-length)UDP报文到给定的端口。 端口列表的格式和前面讨论过的-PS和-PA选项还是一样。 如果不指定端口,默认是31338。默认使用这样一个奇怪的端口是因为对开放端口进行这种扫描一般都不受欢迎。

如果目标机器的该端口是关闭的,UDP探测应该马上得到一个ICMP 端口无法到达 的回应报文。 这对于Nmap意味着该机器正在运行。

该扫描类型的主要优势是它可以穿越只过滤TCP的防火墙和过滤器。 例如。我曾经有过一个Linksys BEFW11S4无线宽带路由器。默认情况下, 该设备对外的网卡过滤所有TCP端口,但UDP探测仍然会引发一个端口不可到达的消息,从而暴露了它自己。

-PR (ARP Ping)

最常见的Nmap使用场景之一是扫描一个以太局域网。 在大部分局域网上,在一个给定的时间绝大部分IP地址都是不使用的。当Nmap试图发送一个原始IP报文时, 操作系统必须确定对应于目标IP的硬件 地址(MAC),这样它才能把以太帧送往正确的地址。
这一般比较慢而且会有些问题,因为操作系统设计者认为一般不会在短时间内对没有运行的机器作几百万次的ARP请求。

当进行ARP扫描时,Nmap用它优化的算法管理ARP请求。 当它收到响应时, Nmap甚至不需要担心基于IP的ping报文,因为它已经知道该主机正在运行了。 这使得ARP扫描比基于IP的扫描更快更可靠。 所以默认情况下,如果Nmap发现目标主机就在它所在的局域网上,它会进行ARP扫描。 即使指定了不同的ping类型(如 -PI或者 -PS) ,Nmap也会对任何相同局域网上的目标机使用ARP。 如果您真的不想要ARP扫描,指定 --send-ip。

-n (不用域名解析)

告诉Nmap 永远不对它发现的活动IP地址进行反向域名解析。 因为DNS一般比较慢,这可以让事情更快些。

-R (为所有目标解析域名)

告诉Nmap 永远 对目标IP地址作反向域名解析。 一般只有当发现机器正在运行时才进行这项操作。

–system-dns (使用系统域名解析器)

**默认情况下,Nmap通过直接发送查询到您的主机上配置的 域名服务器 来解析域名。**为了提高性能,许多请求 (一般几十个 ) 并发执行。如果您希望使用系统自带的解析器,就指定该选项。 一般不使用该选项,因为它慢多了。系统解析器总是用于IPv6扫描。

端口扫描基础

许多传统的端口扫描器只列出所有端口是 开放 还是 关闭 的, Nmap的信息粒度比它们要细得多。 它把端口分成六个状态: open(开放的), closed(关闭的),filtered(被过滤的), unfiltered(未被过滤的), open|filtered(开放或者被过滤的),或者 closed|filtered(关闭或者被过滤的)。

Nmap所识别的6个端口状态。

open(开放的)

​ 应用程序正在该端口接收TCP 连接或者UDP报文。发现这一点常常是 端口扫描 的主要目标。安全意识强的人们知道每个开放的端口都是攻击的入口。攻击者或者入侵测试者想要发现开放的端口。 而管理员则试图关闭它们或者用防火墙保护它们以免妨碍了合法用户。 非安全扫描可能对开放的端口也感趣,因为它们显示了网络上哪些服务可供使用。

closed(关闭的)

关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其 上监听。 它们可以显示该IP地址上 (主机发现,或者ping扫描) 的主机正在运行up 也对部分操作系统探测有所帮助。 因为关闭的关口也是可访问的,也许过会儿值得再扫描一下,可能又开放了。系统管理员可能会考虑用防火墙封锁这样的端口。 那样他们就会被显示为 被过滤 的状态,下面讨论。

filtered(被过滤的)

由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由器规则或者主机上的软件防火墙。 这样的端口让攻击者感觉很挫折,因为它们几乎不提供 任何信息。有时候它们响应ICMP错误消息如类型3代码13 (无法到达目标: 通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧,不做任何响应。 这迫使Nmap重试若干次以访万一探测包是由于网络阻塞丢弃的呢。 这使得扫描速度明显变慢。

unfiltered(未被过滤的)

未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。 只有用于映射防火墙规 则集的ACK扫描才会把端口分类到这种状态。 用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定端口是否开放。

open|filtered(开放或者被过滤的)

当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。

closed|filtered(关闭或者被过滤的)

该状态用于Nmap不能确定端口是关闭的还是被过滤的。

端口扫描技术

这一节讨论Nmap支持的大约十几种扫描技术。 一般一次只用一种方法, 除了UDP扫描(-sU)可能和任何一种TCP扫描类型结合使用。 友情提示一下,端口扫描类型的选项格式是-s<C>

-sS (TCP SYN扫描)

SYN扫描作为默认的也是最受欢迎的扫描选项,是有充分理由的。 它执行得很快,在一个没有入侵防火墙的快速网络上,每秒钟可以扫描数千个端口。 SYN扫描相对来说不张扬,不易被注意到,因为它从来不完成完整的TCP连接。 它还可以明确可靠地区分open(开放的), closed(关闭的),和filtered(被过滤的) 状态

它常常被称为 半开放扫描 , 因为它不打开一个完全的TCP连接。它发送一个SYN报文, 就好像您真的要打开一个连接,然后等待响应。 回应SYN/ACK表示端口在监听 (开放),而回应 RST (复位)表示没有监听者。如果数次重发后仍没响应, 该端口就被标记为被过滤。

-sT (TCP connect()扫描)

当SYN扫描不能用时,CP Connect()扫描就是默认的TCP扫描。Nmap通过创建connect() 系统调用要求操作系统和目标机以及端口建立完全的连接,而不像其它扫描类型直接发送原始报文。

当SYN扫描可用时,它通常是更好的选择。因为Nmap对高层的 connect()调用比对原始报文控制更少, 所以效率较低。 **该系统调用完全连接到开放的目标端口而不是像SYN扫描进行 半开放的复位。这不仅花更长时间,需要更多报文得到同样信息,目标机也更可能 记录下连接。IDS(入侵检测系统)可以捕获两者,但大部分机器没有这样的警报系统。 ** 当Nmap连接,然后不发送数据又关闭连接, 许多普通UNIX系统上的服务会在syslog留下记录,有时候是一条加密的错误消息。如果管理员在日志里看到来自同一系统的 一堆连接尝试,她应该知道她的系统被扫描了。

-sA (TCP ACK扫描)

这种扫描与目前为止讨论的其它扫描的不同之处在于 它不能确定open(开放的)或者 open|filtered(开放或者过滤的))端口。 它用于发现防火墙规则,确定它们是有状态的还是无状态的,哪些端口是被过滤的。

ACK扫描探测报文只设置ACK标志位(除非您使用 --scanflags)。当扫描未被过滤的系统时, open(开放的)和closed(关闭的) 端口 都会返回RST报文。Nmap把它们标记为 unfiltered(未被过滤的),意思是 ACK报文不能到达,但至于它们是open(开放的)或者 closed(关闭的) 无法确定。 不响应的端口 或者发送特定的ICMP错误消息(类型3,代号1,2,3,9,10, 或者13)的端口,标记为 filtered(被过滤的)。

自定义端口扫描

nmap -P(扫描范围)< 要扫描的目标ip地址>

也可以对指定端口扫描
例:nmap -p80,135,139,666 192.168.1.190

-Pn 非ping扫描,不执行主机发现,可以跳过防火墙 ( 常用

nmap -Pn < 要扫描的目标ip地址> 常与其他命令联合使用

-sV 探测打开端口对应服务的版本信息

nmap -sV < 要扫描的目标ip地址>
例:

-vv 对扫描结果详细输出(vv小写)

**`nmap -vv < 要扫描的目标ip地址>`**

输出结果里包含了开放端口扫描方法端口对应服务协议

操作系统检测 -O(O大写)

**`nmap -O < 要扫描的目标ip地址>`**

路由追踪扫描

nmap -traceroute < 要扫描的目标ip地址>
例:

  • 路由器追踪功能,能够帮助网络管理员了解网络通行情况
  • 通过路由器追踪可以查找从我们电脑所在地到目的地之间所经常的网络节点, 并可以看到通过各个结点所花费的时间。(图中TRACEROUTE下面的内容)

@万能开关扫描@

包含了1-10000端口ping扫描,操作系统扫描,脚本扫描,路由跟踪,服务探测 (花费时间长)
nmap -A < 要扫描的目标ip地址>

识别和绕过防火墙和IDS

-f (数据分片)

即将一个正常数据分成几个包(分片大小必须是8的整数倍)。-f选项要求扫描时(包挺ping扫描)使用小的IP包分段。其思路是将TCP头分段在几个包中,使得包过滤器、 IDS以及其它工具的检测更加困难。必须小心使用这个选项,有些系统在处理这些小包时存在问题,例如旧的网络嗅探器Sniffit在接收 到第一个分段时会立刻出现分段错误。

-D <decoy1 [,decoy2][,ME],...> (使用诱饵隐蔽扫描)

使用这个命令可能会让目标主机管理员认为该扫描使用的是诱饵主机进行扫描的,而不是真实的扫描地址,因此会忽略这次扫描,从而,我们可以使用自己真实的ip地址进行扫描,以达到欺骗目标主机管理员的目的。

生成一堆欺骗性的地址的数据包。为使诱饵扫描起作用,需要使远程主机认为是诱饵在扫描目标网络。 IDS可能会报个某个IP的5-10个端口扫描,但并不知道哪个IP在扫描以及 哪些不是诱饵。使用逗号分隔每个诱饵主机,也可用自己的真实IP作为诱饵,这时可使用 ME选项说明。

注意,作为诱饵的主机须在工作状态,否则会导致目标主机的SYN洪水攻击。 如果在网络中只有一个主机在工作,那就很容易确定哪个主机在扫描。

使用过多的诱饵没有任何价值,反而导致扫描变慢并且结果不准确。 此外,一些ISP会过滤哄骗的报文,但很多对欺骗IP包没有任何限制。

使用Decoy(诱骗)方式来掩盖真实的扫描地址,例如-D ip1,ip2,ip3,ip4,ME,这样就会产生多个虚假的ip同时对目标机进行探测,其中ME代表本机的真实地址,这样对方的防火墙不容易识别出是扫描者的身份。

nmap -T4 -F -n -Pn -D 192.168.1.100,192.168.1.101,192.168.1.102,ME 192.168.1.1

实例: 使用诱饵扫描方法来扫描主机端口

sudo nmap -sS 192.168.0.10 -D 192.168.0.2

-S <IP_Address> (源地址哄骗)

​ 生成一个欺骗性的源地址的数据包

-S <IP_Address> 伪装成其他IP地址

这个标志的一个用处是哄骗性的扫描,使得目标认为是 另一个地址 在进行扫描。

-e <interface> (使用指定的接口)

​ 告诉Nmap使用哪个接口发送和接收报文。

本文标签: nmap