服务和版本探测
把Nmap指向一个远程机器,它可能告诉您
端口25/tcp,80/tcp,和53/udp是开放的。使用包含大约2,200个著名的服务的
nmap-services
数据库,
Nmap可以报告那些端口可能分别对应于一个邮件服务器
(SMTP),web服务器(HTTP),和域名服务器(DNS)。
这种查询通常是正确的 -- 事实上,绝大多数在TCP端口25监听的守护进程是邮件
服务器。然而,您不应该把赌注押在这上面!
人们完全可以在一些奇怪的端口上运行服务。
即使Nmap是对的,假设运行服务的确实是 SMTP,HTTP和DNS,那也不是特别多的信息。 当为您的公司或者客户作安全评估(或者甚至简单的网络明细清单)时, 您确实想知道正在运行什么邮件和域名服务器以及它们的版本。 有一个精确的版本号对了解服务器有什么漏洞有巨大帮助。 版本探测可以帮您获得该信息。
在用某种其它类型的扫描方法发现TCP 和/或者UDP端口后,
版本探测会询问这些端口,确定到底什么服务正在运行。
nmap-service-probes
数据库包含查询不同服务的探测报文
和解析识别响应的匹配表达式。
Nmap试图确定服务协议
(如 ftp,ssh,telnet,http),应用程序名(如ISC
Bind,Apache httpd,Solaris telnetd),版本号,
主机名,设备类型(如 打印机,路由器),操作系统家族
(如Windows,Linux)以及其它的细节,如
如是否可以连接X server,SSH协议版本
,或者KaZaA用户名)。当然,并非所有服务都提供所有这些信息。
如果Nmap被编译成支持OpenSSL,
它将连接到SSL服务器,推测什么服务在加密层后面监听。
当发现RPC服务时,
Nmap RPC grinder (-sR
)会自动被用于确定RPC程序和它的版本号。
如果在扫描某个UDP端口后仍然无法确定该端口是开放的还是被过滤的,那么该端口状态就
被标记为open|filtered
。
版本探测将试图从这些端口引发一个响应(就像它对开放端口做的一样),
如果成功,就把状态改为开放。
open|filtered
TCP端口用同样的方法对待。
注意Nmap -A
选项在其它情况下打开版本探测。
有一篇关于版本探测的原理,使用和定制的文章在
https://nmap.org/vscan/
。
当Nmap从某个服务收到响应,但不能在数据库中找到匹配时, 它就打印一个特殊的fingerprint和一个URL给您提交,如果您确实知道什么服务运行在端口。 请花两分钟提交您的发现,让每个人受益。由于这些提交, Nmap有350种以上协议如smtp,ftp,http等的大约3,000条模式匹配。
用下列的选项打开和控制版本探测。
-
-sV
(版本探测) 打开版本探测。 您也可以用
-A
同时打开操作系统探测和版本探测。-
--allports
(不为版本探测排除任何端口) 默认情况下,Nmap版本探测会跳过9100 TCP端口,因为一些打印机简单地打印送到该端口的 任何数据,这回导致数十页HTTP get请求,二进制 SSL会话请求等等被打印出来。这一行为可以通过修改或删除
nmap-service-probes
中的Exclude
指示符改变, 您也可以不理会任何Exclude
指示符,指定--allports
扫描所有端口-
--version-intensity <intensity>
(设置 版本扫描强度) 当进行版本扫描(
-sV
)时,nmap发送一系列探测报文 ,每个报文都被赋予一个1到9之间的值。 被赋予较低值的探测报文对大范围的常见服务有效,而被赋予较高值的报文 一般没什么用。强度水平说明了应该使用哪些探测报文。数值越高, 服务越有可能被正确识别。 然而,高强度扫描花更多时间。强度值必须在0和9之间。 默认是7。当探测报文通过nmap-service-probes
ports
指示符 注册到目标端口时,无论什么强度水平,探测报文都会被尝试。这保证了DNS 探测将永远在任何开放的53端口尝试, SSL探测将在443端口尝试,等等。-
--version-light
(打开轻量级模式) 这是
--version-intensity 2
的方便的别名。轻量级模式使 版本扫描快许多,但它识别服务的可能性也略微小一点。-
--version-all
(尝试每个探测) --version-intensity 9
的别名, 保证对每个端口尝试每个探测报文。-
--version-trace
(跟踪版本扫描活动) 这导致Nmap打印出详细的关于正在进行的扫描的调试信息。 它是您用
--packet-trace
所得到的信息的子集。-
-sR
(RPC扫描) 这种方法和许多端口扫描方法联合使用。 它对所有被发现开放的TCP/UDP端口执行SunRPC程序NULL命令,来试图 确定它们是否RPC端口,如果是, 是什么程序和版本号。因此您可以有效地获得和rpcinfo -p一样的信息, 即使目标的端口映射在防火墙后面(或者被TCP包装器保护)。Decoys目前不能和RPC scan一起工作。 这作为版本扫描(
-sV
)的一部分自动打开。 由于版本探测包括它并且全面得多,-sR
很少被需要。