• 主动扫描技术nmap详解


    主动扫描与被扫描目标有一个互动的过程,目标是可能知道自己在被扫描的;主动扫描一般都是针对目标发送特制的数据包,然后根据目标主机的反应来获得一些信息,帮助我们过滤无意义的主机,建立目标的网络拓扑,主要功能包括:

    1. 目标主机是否在线

    2. 目标主机的制定端口是否开放

    3. 目标主机的操作系统

    4. 目标主机上运行的服务等

    kali里最优秀的主动扫描工具一定是nmap,nmap最早开发出来就是用来扫描端口的,后来功能慢慢增加,现在也能够通过调用脚本扫描一些漏洞

    如果不加任何只打命令nmap的话,可以看到nmap的参数使用说明 。包括几大类:

    • 主机发现 HOST DISCOVERY
    • 扫描技术(方式)SCAN TECHNIQUES
    • 端口规格和扫描顺序 PORT SPECIFICATION AND SCAN ORDER
    • 服务/版本检测 SERVICE/VERSION DETECTION
    • 脚本扫描 SCRIPT SCAN
    • 操作系统检测 OS DETECTION
    • TIMING AND PERFORMANCE
    • FIREWALL/IDS EVASION AND SPOOFING
    • 输出 OUTPUT
    • 杂项 MISC
    • 示例 EXAMPLES

    最简单的命令:nmap [目标IP] :扫描目标IP,返回主机活动状态以及常见的1000个端口状态及对应的默认服务。多个扫描目标时,IP地址可以不连续形如192.168.100.1 192.168.100.2 192.168.100.5,IP之间以空格间隔,也可以是一段形如192.168.100.1-100,还可以使用CIDR形如192.168.100.0/24

    -sn  ping scan and disable port scan   此参数只执行ping操作,主要用于主机发现

    -P及由-P延伸出的其他组合参数主要是用来进行“【主机发现】”。

    进行主机发现时,nmap发送信息报,然后根据是否获得被测主机的响应报来识别,那么可以利用arp协议,ICMP协议以及TCP等支持回应的协议来进行探测。

    扫描同一网段的时候,默认都是使用ARP扫描(即与参数-PR等同,可以在kali里打开wireshark,然后ping 192.168.100.0/24 -sn 查看具体的数据包情况)

    网络层适合用于扫描的主要是ICMP协议,ICMP有查询和查错两种功能,NMAP利用了ICMP协议的查询功能(分为回送请求应答 -PE、时间戳应答 -PP、掩码地址请求应答 -PM)。需要注意的是,NMAP在执行扫描的时候能用arp的就会采用arp,也就是说如果使用nmap -PE命令时,后面的目标应该是不同网段的,这样抓包的时候才能抓到ICMP包。

    传输层的TCP/UDP都可以用于扫描。主要是利用SYN包和ACK包,常用参数如下

    -PS/PA/PU [portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports

    从上图可以看出,执行SYN扫描时,扫描主机向被侦测主机发送一个SYN数据包,然后被测主机回一个SYN/ACK包,然后扫描主机不会回ACK包,而是回一个RST包,中断连接

     从上图可以看出,执行ACK扫描时,扫描主机向被侦测主机发送一个ACK数据包,被测主机因为没找到对应的SYN包,就会回一个RST包。

     UDP扫描是通过发送UDP数据包到目标主机并等待响应,来判断目标端口是否开放。如果目标返回ICMP不可达的错误(类型3,代码3),则说明端口是关闭的;如果得到正确的或适当的响应,则说明端口是开放的。

    -PU:扫描只会对目标进行UDP Ping扫描。这种类型的扫描会发送UDP包来获得一个响应。注意:使用UDP Ping扫描方式,在NAT网络中会影响扫描结果。

    -sU表示这种扫描技术是用来寻址目标主机打开的UDP端口。它不需要发送任何的SYN包,因为这种技术是针对UDP端口的。UDP扫描发送UDP数据包到目标主机,并等待响应。如果返回ICMP不可达的错误消息,说明端口是关闭的;如果得到正确的或适当的回应,则说明端口是开放的。

    【端口扫描】端口扫描的参数是-s以及由-s延伸出的其他组合参数,如-sS -sT -sA -sF -sN -sU等等

    -sS是默认参数,即nmap不带任何参数时采用的就是-sS

    例如: nmap -sS -p 443 www.baidu.com

    -sS(SYN) -sA(ACK) -sF(FIN) 均是发送不完整的握手包

    -sS俗称半开扫描。由于三次握手就没有完成,无法建立正常的TCP连接,因此这次扫描不会被记录到系统日志中。SYN扫描是nmap所采用的默认扫描方式,扫描速度极快,可以在一秒钟扫描上千个端口,也不容易被网络中的安全设备发现。

    -sF FIN扫描方式是向目标端口发送一个FIN数据包,对于所有关闭的端口,目标系统应该返回RST标志,经常被用来探测防火墙。

    -sN NULL扫描方式是向目标端口发送一个不包含任何标志的数据包,对于所有关闭的端口,目标系统应该返回RST标志。

    nmap中对于端口给出了6种不同的状态:

    • open——在该端口有应用程序接收TCP连接或者UDP报文。
    • closed——closed并不意味着没有任何反应,状态为closed的端口是可访问的,这种端口可以接收nmap探测报文并做出响应。只是没有应用程序在open上监听。
    • filtered——存在目标网络数据包过滤,导致nmap无法确定该端口是否开放。
    • unfiltered——表明目标端口是可以访问的,但是nmap却无法判断它到底是open还是closed的。
    • open|filtered——无法确定端口是开放的还是被过滤了。
    • closed|filtered——无法确定端口是关闭的还是被过滤了。

    -sT 执行了完整的三次握手 nmap -sT -p 443 www.baidu.com

    -sU  udp端口扫描 ,UDP扫描的速度是相当慢的,也不可靠

    其他一些常用的扫描端口的命令:

    nmap -F [目标IP]            //扫描常见的100个端口

    nmap -p [端口号] [目标IP]   //指定某一个端口

    nmap -p "*"   //扫描所有端口

    nmap --top-ports [number] [目标]   //扫描常用端口

    nmap -p U:[UDP ports],T:[TCP ports] [目标]   //使用协议指定扫描端口

    【操作系统扫描】

      -O: Enable OS detection
      --osscan-limit: Limit OS detection to promising targets //将操作系统检测限制在有希望的目标上
      --osscan-guess: Guess OS more aggressively  //更积极地猜测操作系统

    后面这两个参数要有效,命令里必须有-O参数

    nmap安装目录下有一个nmap-os.db的文件(可用记事本打开),里面存放了已收集到的各种操作系统的指纹。

    nmap在执行操作系统扫描时会发送“探针”,然后根据回复的数据包与文件进行比对,从而猜测出目标主机的操作系统。同一个windows操作系统有很多版本,有很多不同的补丁,不同的语言,安装不同的软件,这些都会造成猜测无法很准确

    【服务扫描】 -sV

    使用nmap [目标IP]、nmap -sV [目标IP] 两种扫描出现的端口对应的服务版本有可能不一样。因为前者使用了nmap-services数据库(在namp安装目录下)中常用的端口-服务,可能并不是正在该端口监听的服务(服务的端口可能被改了);而使用-sV之后,才是真正的对目标服务进行了扫描。服务探针则存放于nmap-probes数据库里(在namp安装目录下)。

    进行服务发现的顺序:

    1.首先进行端口扫描:默认情况下使用SYN扫描。

    2.其次进行服务识别:发送探针报文,根据得到的返回确认值确认服务。

    3.最后进行版本识别:发送探针报文,根据得到的返回报文信息分析得出服务版本。

    可以使用以下选项打开和控制版本检测:

    • -sV——进行版本探测
    • --allports——不为版本探测排除任何端口。nmap在进行版本探测时不会对目标的全部端口进行扫描,而是会跳过一些端口,如果确实有必要的话,可以使用这个参数来扫描所有的端口
    • --version-intensity [数字]——设置版本扫描强度,数值越高,服务越有可能被正确设别。然而,高强度扫描花更多的时间。强度值必须在0~9之间,默认值为7
    • --version-light——打开轻量级模式,相当于--version-intensity 2
    • --version-all——尝试每个探测,相当于--version-intensity 9
    • --version-trace——跟踪版本扫描活动,打印出关于正在进行的扫描的详细调试信息
    • -sR——RPC扫描,判断端口是否为RPC端口,是则可以确定版本号

     【输出】: -oX  [存放路径和文件名]          //将结果输出到指定路径下的XML文件

    【脚本功能】 nmap通过NSE脚本,扩展了其漏洞扫描的能力。脚本存放于nmap目录下的scripts目录里。可以到官网下载更新的脚本

    •  nmap -p 80,443 --script http-methods [目标]            #通过使用脚本的名字来调用脚本
    • nmap --script safe,discovery [目标]                    #使用种类的名字来调用一个分类中的全部脚本
    • nmap --script /Nmap/scripts/banner.NSE [目标]          #使用指定路径的方式来执行NSE脚本
    • nmap --script /NSE/user-defined/ [目标]                #执行文件夹中的全部脚本
    • nmap -sV --script "not exploit" [目标]           #使用除了exploit分类意外的所有脚本对目标进行检测
    • nmap --script "snmp-*" [目标]                          #使用所有与SNMP相关的脚本

    例子: nmap --script ftp-vsftpd-backdoor 192.168.107.130 

      这里显示了该漏洞存在以及对应的CVE编号

     脚本扫描常用命令:

    nmap --script=auth [目标IP]       //弱口令扫描

    nmap --script=vuln [目标IP]   //扫描常见漏洞

    nmap --script=ftp-brute.nse [目标IP]  //扫描弱口令账号,但是所用字典很小

    nmap -p 80 --script=http-enum.nse ip  //扫描WEB敏感目录

    其他常用参数:

    -T4   //针对TCP端口禁止动态扫描延迟超过10ms

    -iL   //读取主机列表,例如,“nmap -iL d:\ip.txt”

    -A   //全面系统检测、启用脚本检测、扫描等

    -v   // 显示扫描过程,推荐使用

    -Pn //有些防火墙禁止ping命令。可以使用此选项进行扫描

  • 相关阅读:
    【FreeRTOS】14 Tickless低功耗模式
    java计算机毕业设计web家庭财务管理系统源码+mysql数据库+系统+lw文档+部署
    你真的佩戴好劳保防护用品了吗?这才是正确的打开方式
    JVM知识体系总结1——JVM结构,类加载
    Django 官网项目 四
    BurpSuit官方实验室之信息泄露
    水溶性Mn掺杂 量子点 PL 580 nm--600 nm(磷光量子点)
    激光雕刻机的雕刻操作
    逆向分析:还原 App protobuf 协议加密
    Git常用命令
  • 原文地址:https://blog.csdn.net/angleoldhen/article/details/125975884