zoukankan      html  css  js  c++  java
  • Nmap原理02

    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 3 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

  • 相关阅读:
    CodeForces gym Nasta Rabbara lct
    bzoj 4025 二分图 lct
    CodeForces 785E Anton and Permutation
    bzoj 3669 魔法森林
    模板汇总——快读 fread
    bzoj2049 Cave 洞穴勘测 lct
    bzoj 2002 弹飞绵羊 lct裸题
    HDU 6394 Tree 分块 || lct
    HDU 6364 Ringland
    nyoj221_Tree_subsequent_traversal
  • 原文地址:https://www.cnblogs.com/liun1994/p/6985796.html
Copyright © 2011-2022 走看看