Nmap原理02 - 版本探测介绍(上)

1.介绍

  本文将介绍如何通过修改或添加nmap-service-probes文件来实现对nmap中未知服务的探测,首先介绍服务和版本探测的相关信息,然后介绍服务和版本探测的原理以及nmap-service-probes的文件格式,最后通过一个例子演示修改nmap-service-probes文件识别自己的服务,本节介绍前半部分介绍+技术摘要。

  转载请注明出处:http://www.cnblogs.com/liun1994/

2. Service and Application Version Detection

  在对应的官方文档中https://nmap.org/book/vscan.html#vscan-intro属于这一节的内容,使用nmap-services文件可以识别知名的2200个服务,nmap-services文件主要基于端口识别。但是这种识别是不可靠的,即使是正确的这些信息也不可靠,了解运行在端口上的服务版本更重要,这有助于确定服务易受攻击的类型。这就需要服务和版本探测,来探测具体的信息,Nmap通过特定的探针来了解更多的数据,Nmap通过读取socket中的数据进行匹配。Nmap目前可以识别超过1000个服务。

  下面是服务和版本探测的输出:

# nmap -A -T4 localhost 

Starting Nmap ( http://nmap.org )
Nmap scan report for felix (127.0.0.1)
(The 1640 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE VERSION
21/tcp open ftp WU-FTPD wu-2.6.1-20
22/tcp open ssh OpenSSH 3.1p1 (protocol 1.99)
53/tcp open domain ISC BIND 9.2.1
79/tcp open finger Linux fingerd
111/tcp open rpcbind 2 (rpc #100000)
443/tcp open ssl/http Apache httpd 2.0.39 ((Unix) mod_perl/1.99_04-dev)
515/tcp open printer
631/tcp open ipp CUPS 1.1
953/tcp open rndc?
5000/tcp open ssl/ftp WU-FTPD wu-2.6.1-20
5001/tcp open ssl/ssh OpenSSH 3.1p1 (protocol 1.99)
5002/tcp open ssl/domain ISC BIND 9.2.1
5003/tcp open ssl/finger Linux fingerd
6000/tcp open X11 (access denied)
8000/tcp open http-proxy Junkbuster webproxy
8080/tcp open http Apache httpd 2.0.39 ((Unix) mod_perl/1.99_04-dev)
8081/tcp open http Apache httpd 2.0.39 ((Unix) mod_perl/1.99_04-dev)
Device type: general purpose
Running: Linux 2.4.X|2.5.X
OS details: Linux Kernel 2.4.0 - 2.5.20 Nmap finished: 1 IP address (1 host up) scanned in 42.494 seconds
解释:
  1. 端口515将服务作为打印机提供,但该版本字段为空。 Nmap通过探测确定服务名称,但无法确定其他任何内容。
  2. 端口953将服务提供为“rndc?”,问号告诉我们,Nmap甚至无法通过探测来确定服务名称。
    显示rndc,因为它已经在nmap-services中注册了端口953。不幸的是,Nmap的任何一个探测器都没有引起任何rndc的响应。
    如果他们有,Nmap将打印一个服务指纹和提交的URL,以便它可以在下一个版本被识别。
  3. 从上面的输出可以看出,服务和版本探测输出的不只是版本号,这取决于探针探测所返回的结果以及我们所写的匹配语句

3. 技术摘要

  Nmap首先根据选项执行端口扫描,然后将所有open 或者 open|filtered的TCP and/or UDP端口传递到服务扫描模块,然后这些端口被并行探测;根据什么来探测?贡献者贡献的Nmap探针来探测。

  1)Nmap检查上述端口列表有哪些是Exclude排除在外的,Exclude指令在nmap-service-probes文件中会介绍。如果排除在外,不进行探测。

  2)如果端口是TCP,Nmap尝试连接它,如果连接成功,那么端口状态会由open|filtered转换成open。这很少出现,因为端口检测既然没检测出来,试图与它连接应该连接不上。

  3)一旦TCP连接建立,Nmap会监听5秒钟(NULL Probes),通过欢迎信息确定他们的服务类型,如果数据收到,Nmap会将其与保存的3000多NULL探针指纹进行匹配,如果服务被完全确定,那么该端口的服务扫描完成。如果服务没有被探测出来,Nmap有“soft match”的机制,Nmap会继续选择探针进行探测,这些探针被限制到与该服务相匹配的探针上。

  4)每个探针都有被认为最有效的探测端口列表,例如GetRequest的探针识别Web服务器,其列出的端口80-85,88-80-80和8080-8085, Nmap顺序执行与正在扫描的端口号匹配的探针。每个探针包括一个探测字符串,它被发送到端口;将返回的响应与上面的NULL探针描述中讨论的的签名正则表达式进行比较。与NULL探测一样,这些测试可能导致完全匹配(结束探测)和软匹配(将未来探测限制到与某个服务相匹配的探测)或者根本不匹配。Nmap用于测试匹配的正则表达式的确切列表取决于探针后面配置。从X11Probe返回的数据不太可能匹配为GetRequest探针制作的任何正则表达式。另一方面,像RTSPRequest这样的探测器返回的结果很可能与为GetRequest制作的正则表达式匹配,因为正在测试的两个协议是密切相关的。因此,RTSPRequest探测器具有对GetRequest匹配的后备。

  如果从处于open|filtered状态的UDP端口接收到版本检测期间的任何响应,则该状态更改为打开。这使得版本检测成为UDP扫描的绝佳补充,当一些常见的防火墙规则生效时,它被强制将所有已扫描的UDP端口标记为已打开|过滤。将UDP扫描与版本检测相结合可以做到简单的UDP扫描只需要很多次,这是一个有效和有用的技术。

  5)由于需要管理连接,Nmap提高速度的技术:大多数探针具有通用性;如果服务匹配software指令,那么Nmap只需要尝试可能匹配该服务的探针;所有的探针都不是相等的,有些可以探测出更多的服务,Nmap通过使用稀有度,来避免尝试不太可能实现匹配的探针。

  6)如果至少有一个探针引起响应,但是Nmap无法识别该服务,则响应内容将以指纹的形式打印给用户。

  7)探针选择

    Nmap使用rarity变量来控制探针的选择,rarity的值越高,那么它被认为不常见,不太可能被尝试;可以通过选项指定rarity的值。

    (1)如果是TCP,NULL探针第一个被尝试;

    (2)将扫描端口列为可能端口的所有探针将会被尝试,按照探针顺序进行尝试。

    (3)所有其他具有小于或等于扫描的rarity值的探针也按照它们在nmap服务探针中出现的顺序进行尝试。

    一旦探针发现匹配,算法终止并报告输出。

    因为除了NULL探针以外,其他探针都附带了rarity变量值,因此很容易在版本探测中控制他们;Nmap默认的rarity强度是7。

nmap -sV --version-intensity  scanme.nmap.org
--version-light 等价于指定2
--version-all 等价于指定9
如果指定0,那么只有空探针被尝试

  如果上面的论述不清楚,可以通过使用 --version-trace选项和-d选项;这将显示连接和数据读写的状态,对我们理解执行过程非常有用。

  例子可参考:https://nmap.org/book/vscan-technique-demo.html

4. 参考文献

  https://nmap.org/book/vscan.html

Nmap原理02 - 版本探测介绍(上)的更多相关文章

  1. Nmap原理02 - 编写自己的服务探测脚本

    编写自己的服务探测脚本 1. 添加自己的探测脚本 nmap-service-probes文件的格式将在第二节介绍,本节通过一个例子说明如何添加自己的服务探测脚本. AMQP协议,即Advanced M ...

  2. Nmap原理-01选项介绍

    Nmap原理-01选项介绍 1.Nmap原理图 Nmap包含四项基本功能:主机发现/端口扫描/版本探测/操作系统探测.这四项功能之间存在大致的依赖关系,比如图片中的先后关系,除此之外,Nmap还提供规 ...

  3. [转帖]LCD与LED的区别之背光原理与优缺点对比介绍

    LCD与LED的区别之背光原理与优缺点对比介绍 http://m.elecfans.com/article/620376.html 时下液晶面板与液晶电视技术已经达到炉火纯青的境界,并已经成为大屏幕平 ...

  4. 红黑树之 原理和算法详细介绍(阿里面试-treemap使用了红黑树) 红黑树的时间复杂度是O(lgn) 高度<=2log(n+1)1、X节点左旋-将X右边的子节点变成 父节点 2、X节点右旋-将X左边的子节点变成父节点

    红黑树插入删除 具体参考:红黑树原理以及插入.删除算法 附图例说明   (阿里的高德一直追着问) 或者插入的情况参考:红黑树原理以及插入.删除算法 附图例说明 红黑树与AVL树 红黑树 的时间复杂度 ...

  5. Git分布式版本控制系统(上)

    Git分布式版本控制系统(上) 链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg 提取码:fytm 复制这段内容后打开百度网盘手机App,操作更方便 ...

  6. 软件发布版本区别介绍-Alpha,Beta,RC,Release

    Alpha: Alpha是内部测试版,一般不向外部发布,会有很多Bug.除非你也是测试人员,否则不建议使用. 是希腊字母的第一位,表示最初级的版本 alpha就是α,beta就是β alpha版就是比 ...

  7. JSONP跨域的原理解析及其实现介绍

    JSONP跨域的原理解析及其实现介绍 作者: 字体:[增加 减小] 类型:转载 时间:2014-03-22 JSONP跨域GET请求是一个常用的解决方案,下面我们来看一下JSONP跨域是如何实现的,并 ...

  8. linux(debian) arm-linux-g++ v4.5.1交叉编译 embedded arm 版本的QtWebkit (browser) 使用qt 4.8.6 版本 以及x64上编译qt

    最近需要做一个项目 在arm 架构的linux下 没有桌面环境的情况下拉起 有界面的浏览器使用. 考虑用qt 的界面和 qtwebikt 的库去实现这一系列操作. 本文参考: Qt移植到ARM Lin ...

  9. [原创]K8Cscan插件之多种方式系统版本探测

    [原创]K8 Cscan 大型内网渗透自定义扫描器 https://www.cnblogs.com/k8gege/p/10519321.html Cscan简介:何为自定义扫描器?其实也是插件化,但C ...

随机推荐

  1. MessageBox.Show() 多重用法

    MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBox.Show (IWin32Window, S ...

  2. EFCore扩展Update方法(实现 Update User SET Id=Id+1)

    EFCore扩展Update方法(实现 Update User SET Id = Id + 1) 源码地址(github) 前言 EFCore在操作更新的时候往往需要先查询一遍数据,再去更新相应的字段 ...

  3. SQL server 查询语句优先级-摘抄

    SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后 ...

  4. 浅谈Spring的两种配置容器

    浅谈Spring的两种配置容器 原文:https://www.jb51.net/article/126295.htm 更新时间:2017年10月20日 08:44:41   作者:黄小鱼ZZZ     ...

  5. App Store提交审核报错 ERROR ITMS-90087解决办法

    1.原因说明 app对Wifi进行配网, 使用了GizWifiSDK.framework提交App Store时候报错了 App Store Connect Operation Error ERROR ...

  6. jmeter在linux上运行

    若需在linux操作系统上运行jmeter,则需要以命令行的形式运行. 前提条件:linux环境下配置好jdk.jmeter的环境变量等. 1.首先在Windows的图形化界面做好脚本,设置好并发用户 ...

  7. 洛谷P4458 /loj#2512.[BJOI2018]链上二次求和(线段树)

    题面 传送门(loj) 传送门(洛谷) 题解 我果然是人傻常数大的典型啊-- 题解在这儿 //minamoto #include<bits/stdc++.h> #define R regi ...

  8. Java面向对象之关键字this 入门实例

    一.基础概念 1.关键字this是指:哪个对象调用this所在的函数.this就指向当前这个对象. 2.用法: (1).this关键字可以解决:构造函数私有化问题. 注意:构造函数只能被构造函数调用, ...

  9. Scala详细环境安装与配置

    https://blog.csdn.net/free356/article/details/72911898 系统为windows.安装配置Scala如下: 一,安装Scala 1,java6以上(建 ...

  10. 网页footer背景(stick footer布局)

    今天遇到了一个有意思的问题,想在网站的foot里面加入一张背景图片,并且在footer的底部写下一些内容于是乎在footer添加了background,并设置了footer的大小 先说一下开始的做法: ...