网络资产扫描-masscan和nmap结合扫描

⽹络资产扫描-masscan和nmap结合扫描
⼀、引⾔:
  公司从2018年开始研发CMDB,项⽬的定位的⽅向是①作为公司产品的资产数据中⼼,提供统⼀的模型和对外接⼝,统⼀维护⼀份资产信息,避免各个产品(⽐如,全栈智能监控、⾃动化运维、带外、smartLog等)各⾃维护CI。②作为资源全⽣命周期管理平台,融合流程产品和CMDB⾃动发现能⼒,做⼀个闭环CI管理系统,提供最准确的设备资产信息及CI之间关系(部署、⽗⼦、包含、引⽤等)、机房机柜逻辑图等。作为其中⼀个亮点功能,指定⽹段或指定IP的CI扫描就必不可少。
⼆、⽹络资产扫描作⽤:
  通过原始IP报⽂来发现⽹络上存活的主机、主机提供的服务(应⽤程序名和版本)、服务运⾏的操作系统(包括版本信息),以及使⽤什么类型的报⽂过滤器/防⽕墙(对扫描的异常结果做分析)等。
卡因是什么制成的三、masscan和Nmap分析:
车载卫生间
1、masscan
 (1)优势----在6分钟内扫描完整个IPv4
  masscan使⽤的是⽆状态扫描的⽅法。TCP连接是有状态的,需要对SYN-ACK包进⾏seq number的校验这个等待连接的过程需要在缓冲区占⽤很⼤的资源,因此限制了扫描的速度。masscan⽆状态的扫描则是masscan与⽬标主机不建⽴完整的TCP连接,扫描者主机先向⽬标主机发送⼀个SYN请求连接数据包,⽬标主机会向扫描者主机回复⼀个SYN/ACK确认连接数据包,当扫描者主机收到⽬标主机发送回来的SYN/ACK确认连接数据包之后,扫描者主机向⽬标主机发送RST结束连接(选项–banners除外(因为要获取banner信息,必须要进⾏完整的三次握⼿))。即masscan不建⽴完整的TCP连接,收到SYN/ACK之后,发送RST结束连接(选项--banners除外)。masscan采⽤异步的⽅式批量的把数据包发出去,然后记录有回应的IP。因此,效率上得以⼤幅提⾼。
  (1.1) 补充:⽆状态扫描的原理
    TCP协议中三次握⼿的前两次
1. 客户端在向服务器第⼀次握⼿时,会组建⼀个数据包,设置syn标志位,同时⽣成⼀个数字填充seq序号字段。
2. 服务端收到数据包,检测到了标志位的syn标志,知道这是客户端发来的建⽴连接的请求包,服务端会回复⼀个数据包,同时设置syn和ack标志位,服务器随机⽣成⼀个数
字填充到seq字段。并将客户端发送的seq数据包+1填充到ack确认号上。
3. 在收到syn和ack后,我们返回⼀个rst来结束这个连接,如图所⽰
masscan⽆状态扫描原理,就是利⽤了这⼀步,因为seq是可以⾃定义的,所以在发送数据包时填充⼀个特定的数字,⽽在返回包中可以获得相应的响应状态,即是⽆状态扫描的思路了。
 (2)缺点
  masscan速度快,但只能扫描端⼝。异步传输意味着扫描仪在发送探测器之前不必等待回复。由于
⽆状态的发包⽅式,如果遇到丢包的情况,不像有连接时候会进⾏重复查询,⽽是直接没有回应,因此准确率上不如SYN扫描那么准确,但是可以⽤重复扫描来弥补准确性上⾯的缺陷。
2、Nmap(Network Mapper)
  nmap是⼀款开源免费的⽹络发现(Network Discovery)和安全审计(Security Auditing)⼯具。Nmap可以检测⽬标机是否在线、端⼝开放情况、侦测运⾏的服务类型及版本信息、侦测操作系统与设备类型等信息。官⽹地址 /
 2.1、Nmap包含四项基本功能:
主机发现(Host Discovery)
端⼝扫描(Port Scanning)
版本侦测(Version Detection)
操作系统侦测(Operating System Detection)
2.2、常⽤Nmap指令:
(1)完整全⾯的扫描
  如果希望对某台主机进⾏完整全⾯的扫描,那么可以使⽤nmap内置的-A选项。使⽤了改选项,nmap对⽬标主机进⾏主机发现、端⼝扫描、应⽤程序与版本侦测、操作系统侦测及调⽤默认NSE脚本扫描。
nmap –T4 –A –v targethost
  其中-A选项⽤于使⽤进攻性(Aggressive)⽅式扫描;-T4指定扫描过程使⽤的时序(Timing),总有6个级别(0-5),级别越⾼,扫描速度越快,但也容易被防⽕墙或IDS 检测并屏蔽掉,在⽹络通讯状况良好的情况推荐使⽤T4;-v表⽰显⽰冗余(verbosity)信息,在扫描过程中显⽰扫描的细节,从⽽让⽤户了解当前的扫描状态。
例如,扫描局域⽹内地址为192.168.1.100的电脑。显⽽易见,扫描出的信息⾮常丰富,在对192.168.1.100的扫描报告部分中(以红框圈出),可以看到主机发现的结果“Host is up”;端⼝扫描出的结果,有996个关闭端⼝,4个开放端⼝(在未指定扫描端⼝时,Nmap默认扫描1000个最有可能开放的端⼝);⽽版本侦测针对扫描到的开放状况进⼀步探测端⼝上运⾏的具体的应⽤程序和版本信息;OS侦测对该⽬标主机的设备类型与操作系统进⾏探测;⽽绿⾊框图是nmap调⽤NSE脚本进⾏进⼀步的信息挖掘的显⽰结果。(2)主机发现
  主机发现(Host Discovery),即⽤于发现⽬标主机是否在线(Alive,处于开启状态)。
(2.1)主机发现原理
  主机发现发现的原理与Ping命令类似,发送探测包到⽬标主机,如果收到回复,那么说明⽬标主机是开启的。Nmap⽀持⼗多种不同的主机探测⽅式,⽐如发送ICMP ECHO/TIMESTAMP/NETMASK报⽂、发送TCPSYN/ACK包、发送SCTP INIT/COOKIE-ECHO包,⽤户可以在不同的条件下灵活选⽤不同的⽅式来探测⽬标机。
  Nmap的⽤户位于源端,IP地址192.168.0.5,向⽬标主机192.168.0.3发送ICMP Echo Request。如果该请求报⽂没有被防⽕墙拦截掉,那么⽬标机会回复ICMP Echo Reply 包回来。以此来确定⽬标主机是否在线。
  默认情况下,Nmap会发送四种不同类型的数据包来探测⽬标主机是否在线。
1. ICMP echo request
2. a TCP SYN packet to port 443
3. a TCP ACK packet to port 80
4. an ICMP timestamp request
  依次发送四个报⽂探测⽬标机是否开启。只要收到其中⼀个包的回复,那就证明⽬标机开启。使⽤四种不同类型的数据包可以避免因防⽕墙或丢包造成的判断错误。
  (2.2)常⽤指令:
  ⽤法⽰例:
nmap –sn –PE –PS80,135 –ap.org
  探测局域⽹内活动主机:
nmap –sn 192.168.10.100-120
  参数选项:
-sL: List Scan 列表扫描,仅将指定的⽬标的IP列举出来,不进⾏主机发现。
-sn: Ping Scan 只进⾏主机发现,不进⾏端⼝扫描。
-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。
-PS/PA/PU/PY[portlist]: 使⽤TCPSYN/ACK或SCTP INIT/ECHO⽅式进⾏发现。
-PE/PP/PM: 使⽤ICMP echo, timestamp, and netmask 请求包发现主机。-PO[protocollist]: 使⽤IP协议包探测对⽅主机是否开启。
-n/-R: -n表⽰不进⾏DNS解析;-R表⽰总是进⾏DNS解析。
--dns-servers : 指定DNS服务器。
--system-dns: 指定使⽤系统的DNS服务器
--traceroute: 追踪每个路由节点
  扫描target主机所有的TCP端⼝
nmap -v targethost
(3)端⼝扫描
  端⼝扫描是Nmap最基本最核⼼的功能,⽤于确定⽬标主机的TCP/UDP端⼝的开放情况。默认情况下,Nmap会扫描1000个最有可能开放的TCP端⼝。
  Nmap通过探测将端⼝划分为6个状态:
led视频处理器open:端⼝是开放的。
closed:端⼝是关闭的。
filtered:端⼝被防⽕墙IDS/IPS屏蔽,⽆法确定其状态。
unfiltered:端⼝没有被屏蔽,但是否开放需要进⼀步确定。
open|filtered:端⼝是开放的或被屏蔽。
closed|filtered :端⼝是关闭的或被屏蔽。
 扫描⽅式选项:
-sS/sT/sA/sW/sM:指定使⽤ TCP SYN/Connect()/ACK/Window/Maimon scans的⽅式来对⽬标主机进⾏扫描。
-sU: 指定使⽤UDP扫描⽅式确定⽬标主机的UDP端⼝状况。
-sN/sF/sX: 指定使⽤TCP Null, FIN, and Xmas scans秘密扫描⽅式来协助探测对⽅的TCP端⼝状态。
--scanflags <flags>: 定制TCP包的flags。
-sI <zombiehost[:probeport]>: 指定使⽤idle scan⽅式来扫描⽬标主机(前提需要到合适的zombie host)
-sY/sZ: 使⽤SCTP INIT/COOKIE-ECHO来扫描SCTP协议端⼝的开放的情况。
-sO: 使⽤IP protocol 扫描确定⽬标机⽀持的协议类型。
-b <FTP relay host>: 使⽤FTP bounce scan扫描⽅式
  说明:
    -sA        ACK扫描检查端⼝是否开放,可⽤于探测防⽕墙
  -sP        Ping扫描快速发现⽹络
  -sR        PRC扫描定位PRC,对成功扫描的机器记录
  -sS        TCP SYN扫描快速和隐蔽的扫描,半开放扫描
  -sU        UDP扫描确定符合特定UDP端⼝是否开放
    -sX        XMAS扫描隐蔽扫描,扫描特定配置的防⽕墙
    -sL        列出扫描对象列出要扫描的IP,使⽤-n选项确保不向⽹络中发数据包
  -sO        IP协议扫描寻使⽤IP协议的主机
  -sM        FIN/ACK扫描隐蔽扫描,适⽤于unix系统
  -sI          闲置扫描僵⼫主机扫描,⾮常隐蔽
端⼝参数及扫描顺序
-p <port ranges>: 扫描指定的端⼝
-F: Fast mode – 快速模式,仅扫描TOP 100的端⼝
-r: 不进⾏端⼝随机打乱的操作(如⽆该参数,nmap会将要扫描的端⼝以随机顺序⽅式扫描,以让nmap的扫描不易被对⽅防⽕墙检测到)。
--top-ports <number>:扫描开放概率最⾼的number个端⼝(nmap的作者曾经做过⼤规模地互联⽹扫描,以此统计出⽹络上各种端⼝可能开放的概率。以此排列出最有可能开放端⼝的列表,具体可以参
见⽂件:nmap-services。默认情况下,nmap会扫--port-ratio <ratio>: 扫描指定频率以上的端⼝。与上述--top-ports类似,这⾥以概率作为参数,让概率⼤于--port-ratio的端⼝才被扫描。显然参数必须在在0到1之间,具体范围概率情况可以查看nmap-services⽂件。
  参数⽤法⽰例:
-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(其中T代表TCP协议、U代表UDP协议、S代表SCTP协议)
  常⽤指令:
nmap –sS –sU –T4 –top-ports port号 ip地址
  参数-sS表⽰使⽤TCP SYN⽅式扫描TCP端⼝;
  -sU表⽰扫描UDP端⼝;
红外对射模块  -T4表⽰时间级别配置4级;
  --top-ports 300表⽰扫描最有可能开放的300个端⼝(TCP和UDP分别有300个端⼝)。
确定端⼝状况:
  如果直接针对某台计算的IP地址或域名进⾏扫描,那么Nmap对该主机进⾏主机发现过程和端⼝扫描。该⽅式执⾏迅速,可以⽤于确定端⼝的开放状况。
nmap targethost
(4)版本侦测
  ⽤于确定⽬标主机开放端⼝上运⾏的具体的应⽤程序及版本信息。
 (4.1)原理
  简要的介绍版本的侦测原理。版本侦测主要分为以下⼏个步骤:
1. ⾸先检查open与open|filtered状态的端⼝是否在排除端⼝列表内。如果在排除列表,将该端⼝剔除。
2. 如果是TCP端⼝,尝试建⽴TCP连接。尝试等待⽚刻(通常6秒或更多,具体时间可以查询⽂件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms)。通常在
等待时间内,会接收到⽬标机发送的“WelcomeBanner”信息。nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进⾏对⽐。查对应应⽤程序的名字与版本信息。
3. 如果通过“Welcome Banner”⽆法确定应⽤程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到回复包与数据库
中的签名进⾏对⽐。如果反复探测都⽆法得出具体应⽤,那么打印出应⽤返回报⽂,让⽤户⾃⾏进⼀步判定。
4. 如果是UDP端⼝,那么直接使⽤nmap-services-probes中探测包进⾏探测匹配。根据结果对⽐分析出UDP应⽤服务类型。
5. 如果探测到应⽤程序是SSL,那么调⽤openSSL进⼀步的侦查运⾏在SSL之上的具体的应⽤类型。
6. 如果探测到应⽤程序是SunRPC,那么调⽤brute-force RPC grinder进⼀步探测具体服务。
 (4.2)Nmap提供的版本侦测具有如下的优点:
⾼速。并⾏地进⾏套接字操作,实现⼀组⾼效的探测匹配定义语法。
尽可能地确定应⽤名字与版本名字。
⽀持TCP/UDP协议,⽀持⽂本格式与⼆进制格式。
⽀持多种平台服务的侦测,包括Linux/Windows/Mac OS/FreeBSD等系统。深度水产
如果检测到SSL,会调⽤openSSL继续侦测运⾏在SSL上的具体协议(如HTTPS/POP3S/IMAPS)。
如果检测到SunRPC服务,那么会调⽤brute-force RPC grinder进⼀步确定RPC程序编号、名字、版本号。
⽀持完整的IPv6功能,包括TCP/UDP,基于TCP的SSL。
通⽤平台枚举功能(CPE)
⼴泛的应⽤程序数据库(nmap-services-probes)。⽬前Nmap可以识别⼏千种服务的签名,包含了180多种不同的协议。
  常⽤指令:
nmap –sV ip地址
  版本侦测的指令选项:
-sV: 指定让Nmap进⾏版本侦测
--version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越⾼,探测出的服务越准确,但是运⾏时间会⽐较长。
--version-light: 指定使⽤轻量侦测⽅式 (intensity 2)
--version-all: 尝试使⽤所有的probes进⾏侦测 (intensity 9)
--version-trace: 显⽰出详细的版本侦测过程信息。
(5)OS侦测
  操作系统侦测⽤于检测⽬标主机运⾏的操作系统类型及设备类型等信息。Nmap拥有丰富的系统数据库nmap-os-db,⽬前可以识别2600多种操作系统与设备类型。
 (5.1)OS侦测原理
  Nmap使⽤TCP/IP协议栈指纹来识别不同的操作系统和设备。在RFC规范中,有些地⽅对TCP/IP的实现并没有强制规定,由此不同的TCP/IP⽅案中可能都有⾃⼰的特定⽅式。Nmap主要是根据这些细节上的差异来判断操作系统的类型的。
  具体实现⽅式如下:
1. Nmap内部包含了2600多已知系统的指纹特征(在⽂件nmap-os-db⽂件中)。将此指纹数据库作为进⾏指纹对⽐的样本库。
2. 分别挑选⼀个open和closed的端⼝,向其发送经过精⼼设计的TCP/UDP/ICMP数据包,根据返回的数据包⽣成⼀份系统指纹。
3. 将探测⽣成的指纹与nmap-os-db中指纹进⾏对⽐,查匹配的系统。如果⽆法匹配,以概率形式列举出可能的系统。
  常⽤指令:
nmap –O targethost
  OS侦测指令选项:
-O: 指定Nmap进⾏OS侦测。
--osscan-limit: 限制Nmap只对确定的主机的进⾏OS探测(⾄少需确知该主机分别有⼀个open和closed的端⼝)。
--osscan-guess: ⼤胆猜测对⽅的主机的系统类型。由此准确性会下降不少,但会尽可能多为⽤户提供潜在的操作系统。
详细了解可参考
masscan在存活主机主机扫描⽅⾯速度要⾼于Nmap,故为提⾼扫描准确度,可以先使⽤masscan扫描开启的端⼝,再⽤nmap进⾏详细的扫描。
四、代码⽰例(使⽤python脚本)
masscan扫描存活主机
1# -*- coding: UTF-8 -*-
2import re
3import commands
4import sys
5 reload(sys)
6 sys.setdefaultencoding('utf8')
7
11# 执⾏命令
12 state, stdout = statusoutput("masscan 指定ip -p22 --rate 10000")
13# 获取命令结果
14 msgArr = []
15 discvArr = stdout.split("\n")
16for discv in discvArr:
17    msgArr.append("".de("ascii")).strip().strip("\n"))
18
19 set_addr = set()
20 set_ip = set()
21 addr = ""
22for msg in msgArr[3:]:
23if"Discovered"in msg:
24        discvArr = msg.split(" on ")
25        ip = discvArr[1]  # 截取ip地址
26        port = re.findall(".*port(.*)/tcp.*", info)  # 取出端⼝号
27        addr = ip.strip() + ":" + str(port).strip()
28        addr = place('[\' ', '').replace('\']', '').replace('[', '').replace(']', '')
29
30        set_addr.add(addr)  # 保存扫描出的ip地址端⼝号
31        set_ip.add(ip)  # 保存ip地址
32
33for ip in set_ip:
34print ip
Nmap精确扫描存活主机端⼝
1 # -*- coding: UTF-8 -*-
2 import commands
3 import re
4 import socket
29
31 # 执⾏操作系统扫描任务
34 state, stdout = statusoutput('nmap -O --osscan-guess -p ' + 指定端⼝+ '' + ip地址)
35 # 获取命令结果
36 discvArr = stdout.split("\n")
37
38 msgArr = []
39 os = ""
40 hostname = ip2hostname(ip)
41 if hostname is None:
42    hostname = "未知服务"
44 for discv in discvArr:
45    disv = discv.lower()
53    # 操作系统雨污分流器
54    if"aggressive os guesses: "in discv:
55        os = discv[22:discv.find(",")].strip()
56    if"os details:"in discv:
57        os = place("os details:", "").strip()
58    # 主机名称和操作系统,ip:port##ssh@host@os
59    if re.match('\d+/\w+.*open.*', discv):
62        port = discv[0:discv.index('/')]
63        resName = discv[discv.index('open') + 4:]
64        line = ip + ':' + port + '##' + resName.strip()
66        msgArr.append(line)68 for line in msgArr:
69    line = line + "@" + hostname + "@" + os
70    print line
五、资料共享
masscan git地址
Nmap git地址
感谢各位⼤佬的分享,收获不少,同时也感谢您的阅读,如需转载请注明出处

本文发布于:2024-09-23 05:24:23,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/201497.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:扫描   侦测   探测   数据包   开放
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议