本博客严重参考 Nmap使用指南1.0:
自己之前零星学习的各类知识点,在这个暑假想要将其系统地串在一起,形成自己学习的体系,一起来看各类文档学习趴
关于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是相同的。