主机指纹识别及host name探测技术总结
1.1ICMP
Ping同一局域网内的不同主机,屏幕上回显的TTL值会因不同主机操作系统的不同而不同,甚至是由于系统版本、防火墙、补丁等细节不同,在不同的主机,即使相同的操作系统,回显的TTL值也会有所不同
Win xp:
Ubuntu:
1.2TCP/IP协议栈实现差异
这些差异通常表现在数据包头的标志字段中,如窗口大小(Window Size)、ACK序号等的不同取值。通过对这些差别进行归纳总结,可以比较准确地识别出远程系统的类型
1.2.1 NMAP
指纹库如下所示
会首先一次性发送6个tcp syn包
然后据此计算出指纹中的SEQ,OPS,WIN,T1行
(计算及分析过程见公众号之前的推文)
然后会发送其他包以此类推,得到受试者的指纹后与指纹库进行比对
1.2.2 Ettercap
在ettercap上有一个插件,如下图所示,用于指纹识别
使用插件识别win的结果
识别kali的结果
还是有很高的误报率(当然,结果自己也说明了,实际上没有判断出来,给出的结果是最接近判断的)
1.3DHCP
1.3.1Satori
主要是通过得到的指纹在指纹库中根据权重相加,这儿以一个权重为例
数据包如下
Option55展开,分别是1,15,3,6,44,46,47,31,33,121,249,43,252
命中指纹库中的
所以推测目标系统属于windows vista的权重+5
1.4http
通常是user-agent。使用Web浏览器访问某个站点时,它会向该站点发送一小块信息,称为“user agent”。 user agent有一些关于浏览器,平台和操作系统版本的次要信息。 使用此信息可以猜测使用的操作系统
比如我的ua:
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
比如这个网站(https://developers.whatismybrowser.com/useragents/explore/)据称收集超过百万不同的user-agent,可以精细识别操作系统等
通过user-agent可以分析出如下的详细信息
1.5查询开放端口及版本
比如探测到135是msrpc,则是windows;一些应用程序的banner会暴露关键信息
1.6 open port patterns
指开放端口的关联,比如发现某主机开放139,445,一般是window可能性较大
2.探测hostname
2.1 DHCP
Option 12,明确客户端的名字
2.1.1 Satori
在satori使用时抓到的包的dhcp inform中如下所示
2.2 NBNS
注:当计算机名长度少于等于15个字符时,NetBIOS名字与计算机名一样,当计算机名超过15个字符时,NetBIOS名字只取前15个字符。我这里默认netbios name 与hostname同。
或者使用下列命令查看远程计算机的netbios名称表
抓包如下
2.2.1 NetworkMiner
2.2.2nbtscan