本博客严重参考 Nmap使用指南1.0:

​https://github.com/scanfsec/penetration/blob/master/Nmap%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%971.0(%E4%B8%AA%E4%BA%BA%E7%B2%BE%E5%BF%83%E6%95%B4%E7%90%86).pdf​

自己之前零星学习的各类知识点,在这个暑假想要将其系统地串在一起,形成自己学习的体系,一起来看各类文档学习趴

关于Nmap安装方式网上多如牛毛,在此不再赘述,请往下看。

Nmap (Network Mapper 网络映射器)

端口扫描基础

虽然Nmap这些年的功能越来越多,它也是从一个高效的端口扫描器开始的,并且那仍然是它的核心功能。

nmap target 扫描目标主机上超过1660个TCP端口

Nmap把端口分为六个状态:

  • open 开放的
  • closed 关闭的
  • filtered 被过滤的
  • unfiltered 未被过滤的
  • open | filtered 开放或者被过滤的
  • closed | filtered 关闭或者被过滤的

这些状态描述Nmap怎么看待它们

每个开放的端口都是攻击的入口

Nmap指令语法

nmap [<扫描类型> ... ] [<选项>] { <扫描目标说明>}

端口扫描技术

作为一个修车新手,我可能折腾几个小时来摸索怎样把基本工具(锤子,胶带,扳子等) 用于手头的任务。当我惨痛地失败,把我的老爷车拖到一个真正的技师那儿的时候 ,他总是在他的工具箱里翻来翻去,直到拽出一个完美的工具然后似乎不费吹灰之力搞定它。 端口扫描的艺术和这个类似。专家理解成打的扫描技术,选择最适合的一种 (或者组合)来完成给定的 任务。 另一方面,没有经验的用户和刚入门者总是用默认的SYN扫描解决每个问题。 既然Nmap是免费的,掌握端口扫描的唯一障碍就是知识。这当然是汽车世界所不能比的, 在那里,可能需要高超的技巧才能确定您需要一个压杆弹簧压缩机,接着您还得为它付数千美金。

Nmap支持的扫描类型大概有十几种,一般一次只使用一种,不过UDP扫描(-sU)可以和任何一种TCP扫描类型结合使用

端口扫描类型的选项格式是-s<C>,<C>通常是扫描类型的首字母

操作系统非特权用户仅能执行connect()和ftp bounce()扫描

部分扫描选项
  • -sS (TCP SYN 扫描/半开扫描)

SYN扫描是默认的也是最受欢迎的扫描选项,优点:执行速度快,扫描痕迹浅,从来不打开一个完整的TCP连接,不依赖于任何的特定平台。

  • -sT (TCP connect()扫描)

当SYN扫描不能用时,TCP connect()扫描就是默认的TCP扫描

相对与SYN扫描的缺点:

connect()扫描效率较低,因为它需要建立完整的TCP连接

connect()扫描容易在目标机上留下记录,许多普通的UNIX系统上的服务会在syslog留下记录

  • -sU (UDP扫描)

互联网基于UDP的服务也不少,最常见的如:DNS,SNMP,DHCP,注册端口分别为53,161/162,67/68

UDP扫描一般比较慢,比TCP要困难

UDP扫描可以与各种TCP扫描结合使用而同时检查两种协议

注意:慎用UDP扫描,因为它的扫描速度受到操作系统的限制非常低,如果确实要使用可以采用优先扫描主要端口,并发扫描更多主机,从防火墙后面扫描,使用--host--timeout来跳过慢速主机等手段

  • -sN -sF -sX (TCP Null,Fin,Xmas扫描)

这三种扫描方法利用了TCP RFC钟发掘出的一个微妙的方法来区分Open和Closed端口

如果扫描目标系统遵循RFC793,则当端口关闭时,任何不包含SYN,RST,ACK位的报文都会导致一个RST返回,而当端口开放时,应当没有任何响应

优势:

能够躲过一些无状态防火墙和报文过滤路由器,甚至比SYN扫描还要隐蔽一些,但是现代的IDS产品可以发现他们

不足:

并非所有的系统都严格遵循RFC793,许多系统端口不管是开放还是关闭的都响应RST,结果导致所有的端口都标记为Closed

它们不能辨别Open端口和一些特定的Filtered端口,从而返回相关信息

  • -sA (TCP ACK扫描)

目的:

发现防火墙规则,确定它们是有状态的还是无状态的,哪些端口是被过滤的

不足:

无法确定Open或者Open|Filtered端口

  • -sW(TCP窗口扫描)

与ACK扫描的唯一区别在于它利用了特定系统的实现细节来区分端口是Open还是Closed,而不是全部打印成Unfiltered

不足:

不支持它的系统通常返回所有端口都是Closed

高级扫描方式
  • -sM (TCP Maimon扫描)

这个扫描技术除了探测报文采用FIN/ACK之外与Null,FIN,Xmas扫描完全一样

  • --scanflags (定制的TCP扫描)

这是真正的Nmap高手使用的,不受这些现成的扫描类型束缚,可以定义任意TCP标志位来设计自己的扫描

  • -sl (ldel扫描)

这种高级扫描方法允许进行真正的TCP端口盲扫描,由于它不适用真实IP进行扫描,所以它是一种极端隐蔽的扫描方法

  • -sO(IP协议扫描)

从技术上讲,这不是端口扫描

用于确认目标机器支持哪些IP协议

  • -b (FTP弹跳扫描)

通过FTP服务器做代理对其他目标主机进行扫描的技术,这是绕过防火墙的好方法,其实这算是服务器的一个弱点,当前大部分的服务器都被修补了,本弱点利用就困难了,不过可以使用这个选项来判断服务器是否脆弱

端口说明和扫描顺序

默认情况下,Nmap用指定的协议对端口1-1024以及nmap-services文件中列出的更高的端口进行扫描

  • -p <port range>(只扫描指定的端口)

port range 使用单个端口和用连字符表示的端口范围都可以

可以通过再端口号上添加T: 或者U: 指定协议

例如: -p U:53,111,137,T:21-25,80,139,8080

  • -F (快速(有限的端口)扫描):

在Nmap的nmap-services文件中指定想要扫描的端口,这个列表中包含1200多TCP端口,比扫描所有的65535个端口要快得多

如果使用--datadir选项指定自己的小小的nmap-services文件,则差别会很惊人了。

  • -r(不要按随机顺序扫描端口):

默认情况下,Nmap按随机顺序扫描端口(除了处于效率的考虑部分端口前移),这种随机化通常是不错的,但是我们可以指定-r来进行顺序端口扫描

Nmap的扩展功能

服务版本探测

人们完全可以在一些奇怪的端口上运行服务

知道正在运行什么邮件和域名服务器以及它们的版本,有一个精确的版本号对了解服务器有什么漏洞有巨大帮助

nmap-service-probes数据库包含查询不同服务的探测报文和解析识别相应的匹配表达式。

  • -sV (版本探测)

打开版本探测,也可以使用-A同时打开操作系统探测和版本探测

  • --allports(不为版本探测排除任何端口)

指定--allports扫描所有端口

  • --version-intensity <intensity> (设置版本扫描强度)

当进行版本扫描时,nmap发送一系列探测报文,每个报文都被赋予一个1到9之间的值,被赋予较低值的探测报文对大范围的常见服务有效,而被赋予较高值的报文一般没什么用。

强度水平说明应该使用哪些探测报文,数值越高,服务越有可能被正确识别,当然,高强度扫描花更多的时间,强度值在0到9之间,默认是7

  • --version-light (打开轻量级模式)

这是--version-intensity 2 的一个别名,这使得版本扫描快很多,但他识别服务的可能性也相对较小一些

  • --version-all (尝试每个探测)

这是--version-intensity 9 的一个别名,保证对每个端口尝试每个测试报文

  • --version-trace (跟踪版本扫描活动)

是会让Nmap打印出详细的关于正在运行的扫描的调试信息,它是使用--packet-trace所得到的信息的子集

  • -sR (RPC扫描)

这种方法和许多端口扫描方法联合使用,对所有被发现开放的TCP/UDP端口执行SunRPC程序NULL命令,来试图确定它们是否为RPC端口,如果是,是什么程序和版本号。这作为版本扫描(-sV)的一部分自动打开。由于版本探测包括它并且全面的多,所以-sR很少被用到。

操作系统探测

Nmap最著名的功能之一就是用TCP/IP协议栈fingerprinting进行远程操作系统探测

Nmap发送一系列TCP和UDP报文到远程主机,检查响应中的每一个比特,再进行一打测试之后,Nmap把结果和数据库nmap-os-fingerprints中超过1500个已知的操作系统的fingerprints进行比较,如果有匹配,就打印出操作系统的详细信息。

  • -O (启用操作系统探测)

也可以使用-A来同时启用操作系统和版本探测

  • --osscan-limit(针对指定的目标进行操作系统检测)

采用这个选项,Nmap只对满足这个条件的主机进行操作系统检测,这样可以节约时间

  • --osscan-guess; --fuzzy(推测操作系统检测结果)

当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认进行这种匹配,使用上述任一个选项使得Nmap的推测更加有效

其他选项
  • -6 (启用IPv6扫描)

ping扫描(TCP-only),连接扫描以及版本检测都支持IPv6,除了增加-6选项之外,其他命令语法相同

  • -A(激烈模式扫描 )

这个选项启用额外的高级和高强度选项,目前这个选项启用了操作系统探测 -O 和版本扫描 -sV

该选项的目的是启用一个全面的扫描选项集合,不需要用户记忆大量的选项。

这个选项仅仅启用功能,不包含可能用到的所有需要的时间选项或者细节选项

  • -V;--version (打印版本信息)

打印Nmap版本号并退出

  • -h;--help (打印帮助摘要)

打印一个短的帮助屏幕,列出大部分常用的命令选项,这个功能和不带参数运行Nmap是相同的。