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. Android getDimension,getDimensionPixelOffset,getDimensionPixelSize

    1.例如在onMeasure(int , int)方法中可能要获取自定义属性的值.如: TypedArray a = context.obtainStyledAttributes(attrs, R.s ...

  2. arcconf工具相关命令V1.0

    arcconf工具相关命令V1.0 清除当前所有raid配置 Arcconf  delete  1  array  all       #删除所有逻辑盘 Arcconf  uninit  1  all ...

  3. 标准库函数begin和end------c++primer

    尽管能计算得到尾后指针,但这种用法极易出错.为了让指针的使用更简单.更安全,c++新标准引入了两个名为begin和end的函数.这两个函数与容器中的两个同名成员功能类似,不过数组毕竟不是类类型,因此这 ...

  4. (获取qq群成员信息,并下载头像,每个群保存一个文件夹)

    # 1.获取到自己qq里面所有的群,并且保存每个群里面的群成员信息到mongodb里面# 下载每个群的群成员的头像# 1.抓包,抓到获取自己所有qq群的接口 requests模块 https://qu ...

  5. springMVC 学习笔记(一):springMVC 入门

    springMVC 学习笔记(一):spring 入门 什么是 springMVC springMVC 是 spring 框架的一个模块,springMVC 和 spring 无需通过中间整合层进行整 ...

  6. GN算法---《Community structure in social and biological networks》这篇论文讲了什么?

    用中文记下这篇论文的大致意思,以防止忘了.好记性不如烂笔头! 摘要:最近的一些研究在研究社交网络或WWW.研究者都集中于研究网络的“小世界性”,“幂率分布特性”,“网络传递性”(聚类性吧).本文提出网 ...

  7. Squid系统服务脚本

    #!/bin/bash # chkconfig: - 90 25 #其中-的意思是所有运行级别 # config: /etc/squid.conf # pidfile: /usr/local/squi ...

  8. SpringMVC的简单介绍及使用

    一.简介 1.SpringMVC和Spring的关系: >软件开发的三层架构: web层[表示层.表现层]---->Service层---->Dao[DataBase Access ...

  9. jeecms学习笔记

    jeecms学习笔记 内容管理系统 1.栏目列表标签 作用:获取栏目的列表 [@cms_channel_list] [#list tag_list as b] <a href="${b ...

  10. 老男孩Day14作业:堡垒机

    一.作业需求: 1.业务需求 兼顾业务安全目标与用户体验,堡垒机部署后,不应使用户访问业务系统的访问变的复杂,否则工作将很难推进,因为没人喜欢改变现状,尤其是改变后生活变得更艰难     保证堡垒机稳 ...