• [原创]利用Browser协议探测内网主机操作系统版本(无需端口无视防火墙)


    利用Browser协议可获取机器IP、MAC、机器名、操作系统、域,如图

    浏览

    在SMB协议中,计算机为了访问网络资源,就需要了解网络上存在的资源列表(例如在Windows下使用网络邻居查看可以访问的计算机),这个机制就被称为浏览(Browsing)。虽然SMB协议中经常使用广播的方式,但如果每次都使用广播的方式了解当前的网络资源(包括提供服务的计算机和各个计算机上的服务资源),就需要消耗大量的网络资源和浪费较长的查找时间,因此最好在网络中维护一个网络资源的列表,以方便查找网络资源。只有必要的时候,才重新查找资源,例如使用Windows下的查找计算机功能
    但没有必要每个计算机都维护整个资源列表,维护网络中当前资源列表的任务由网络上的几个特殊计算机完成的,这些计算机被称为Browser,这些Browser通过记录广播数据或查询名字服务器来记录网络上的各种资源。
    Browser并不是事先指定的计算机,而是在普通计算机之间通过自动进行的推举产生的。不同的计算机可以按照其提供服务的能力,设置在推举时具备的不同权重。为了保证一个Browser停机时网络浏览仍然正常,网络中常常存在多个Browser,一个为主Browser(Master Browser),其他的为备份Browser。

    工作组和域

    工作组和域这两个概念在进行浏览时具备同样的用处,都是用于区分并维护同一组浏览数据的多个计算机。事实上他们的不同在于认证方式上,工作组中每台计算机都基本上是独立的,独立对客户访问进行认证,而域中将存在一个(或几个)域控制器,保存对整个域中都有效的认证信息,包括用户的认证信息以及域内成员计算机的认证信息。浏览数据的时候,并不需要认证信息,Microsoft将工作组扩展为域,只是为了形成一种分级的目录结构,将原有的浏览和目录服务相结合,以扩大Mircrosoft网络服务范围的一种策略。  工作组和域都可以跨越多个子网,因此网络中就存在两种Browser,一种为Domain Master Browser ,用于维护整个工作组或域内的浏览数据,另一种为Local Master Browser,用于维护本子网内的浏览数据,它和Domain Master Browser通信以获得所有的可浏览数据。划分这两种Browser 主要是由于浏览数据依赖于本地网广播来获得资源列表,不同子网之间只能通过浏览器之间的交流能力,才能互相交换资源列表。
    但是,为了浏览多个子网的资源,必须使用NBNS名字服务器的解析方式,没有NBNS的帮助,计算机将不能获得子网外计算机的NetBIOS名字。Local Master Browser也需要查询NetBIOS名字服务器以获得Domain Master Browser的名字,以相互交换网络资源信息。
    由于域控制器在域内的特殊性,因此域控制器倾向于被用做Browser,主域控制器应该被用作Domain Master Browser,他们在推举时设置的权重较大。

    Browser发包时间

    去年无意发现browser协议中含有机器名、系统版本,发包时间随机,有些2分钟、5分钟、甚至12分钟等才发

    几分钟甚至于10几分钟才有一条,其它数据包每分钟几百条,可能很多人长时间抓包,也未能发现关键信息

    不单只是很长时间才发,而且也不一定每个包里面都含有机器名,或许这就是一直以来把Browser忽略的真相

    如图所示,出现13机器ID为6247数据包,出现15机器已达到2万多,出现10机器已7万多个包(这鬼才能发现)

    所以为了能够获取到内网机器信息,我们需要不停的监视Browser包,从中提取有效机器名与系统版本

     无视防火墙

    虽然属于SMB协议,但把文件和共享前的勾去掉依旧可获取,该报文是由目标机器向外发送,所以445关闭也不影响

    在目标开启防火墙的情况下也可获取,这与cping通过445端口或ICMP探测主机方式不一样。
    另外发现NBNS也含有机器名和域名,但无系统版本,如下图

    操作系统、域机器判断

    除了XP和WIN8.1特别一点以外,其它系统

    0x00000002 Request XP名称第3位开始  Win8.1也是 无法判断系统版本
    0x0000000c Domain  域内机器
    其它 of o1 local

    by K8哥哥 2018.11.26

     利用代码

    暂时没时间用其它语言编写,先用python的scapy框架来实现,如果要编译成可执行文件可能会很大,可能还要安装相关依赖

    # -*- coding: UTF-8 -*-
    #author: k8gege
    #https://github.com/k8gege/K8tools/blob/master/K8getPC.py
    #https://www.cnblogs.com/k8gege
    import sys
    import queue
    from scapy.all import *
    from pprint import pprint
    
    def search(data, key):
    	#print "data:  " + data
    	i=data.find(key)
    	if i > -1:
    		masterType = "617574686F723A206B3867656765"	
    		masterType = data[i+len(key):i+len(key)+2]
    		if masterType=="02":
    		   return data[i+len(key)+4:i+len(key)+34],masterType,data[i+len(key)+44:i+len(key)+48]
    		return data[i+len(key)+12:i+len(key)+42],masterType,data[i+len(key)+44:i+len(key)+48] 
    	return ""
    
    def getver(data):
    	if data=="0500":
    		return "Win2000"
    	elif data=="0501":
    		return "WinXP"
    	elif data=="0502":
    		return "Win2003"
    	elif data=="0600":
    		return "Vista"	
    	elif data=="0601":
    		return "Win7_2008"
    	elif data=="0602":
    		return "Win8_2012"	
    	elif data=="0603":
    		return "Win8.1"
    	elif data=="0a00":
    		return "Win10_2016"		
    	return data
    	
    def packet_callbacke(packet):
        #print(packet.show())
    	try:
    		data=packet.load.encode('hex')
    		osname,masterType,osver = search(data, "5c4d41494c534c4f545c42524f57534500")	
    		if (osname!=""):
    			if masterType=="0c":
    				print packet.getlayer(IP).src+"	"+packet.src+"	"+osname.decode('hex')+"	[Domain]"
    			else:
    				print packet.getlayer(IP).src+"	"+packet.src+"	"+osname.decode('hex')+"	["+getver(osver)+"]"
    	except:
    		pass
    
    print "IP		MAC			OSname		OSver"
    
    try:
    	sniff(iface = sys.argv[1],filter="", prn=packet_callbacke)
    except:
    	pass
    

    下载:

    https://github.com/k8gege/K8tools/blob/master/K8getPC.py

    https://github.com/k8gege/k8getPC

    相关文章:

    Cscan 获取内网主机开放Web、Banner、标题信息

    https://www.cnblogs.com/k8gege/p/10519321.html

    Cping 获取内网存活主机-MAC地址-主机名--操作系统--SMB漏洞

    https://www.cnblogs.com/k8gege/p/10367844.html

  • 相关阅读:
    bootstrap 按钮 文本 浮动 隐藏
    bootstrap 表单控件 控件状态 控件大小 help-block
    wps 操作
    SSH中的免password登录
    Qt音乐播放器制作(二)Easy Player
    云计算资源分享与下载
    uva11059(最大乘积)
    两小时搞定C#版超级战舰游戏
    数据库中的參照完整性(Foreign Key)
    动手解决困扰自己的事情——记屏蔽网页广告
  • 原文地址:https://www.cnblogs.com/k8gege/p/10561336.html
Copyright © 2020-2023  润新知