0x01启动ettercap测试
从启动信息可以看到,有1766个tcp os 指纹
嗅探结果
我这里开了两台机器,146是win,140是kali
查看146的详情,可以看到给出了指纹,但是没有识别出操作系统
查看140的也是同样
考虑到ettercap是根据tcp指纹被动识别,没识别出来可能是因为LAN里没有tcp流量
所以我在kali上开了apache2,让win去访问
此时在ettercap的win机器上可以看到
识别出了是windows
在kali的详情里看到
根据80端口的服务识别出了Linux debian
在win上面再开一个apache
此时根据tcp 80处的指纹也是能判断出是windows,此时在kali上访问win的80端口
但是ettercap还是没有进一步地识别
又在kali上开了MySQL,让win去远程登录
不过可以看到,没有进一步识别
所以猜测:开放的基于tcp的服务越多,且存在交互产生流量,则ettercap能得到更多指纹,更好识别主机操作系统;另外,如果服务端的软件是某种操作系统特有的,能有助于识别(比如IIS之于win),想mysql这种跨平台的,对识别的帮助不大
0x02使用插件
在ettercap上还有一个插件,如下图所示,应该就是用于指纹识别的
使用插件识别win的结果
识别kali的结果
还是有很高的误报率(当然,结果自己也说明了,实际上没有判断出来,给出的结果是最接近判断的)
0x03源码分析
查看插件对应的源码文件
发送syn到指定端口并收集返回的指纹
收集从目标返回的syn ack,并提取出指纹
收集到指纹后移除hook
然后将收集到的指纹与指纹库对比,打印结果
0x04指纹库分析
指纹库共有两个,一个是tcp协议栈指纹
从前面的注释可以看出还是基于tcp协议栈的实现不同来进行识别的
下图是部分指纹
以匹配到win的146机器的指纹为例
可以看到嗅探得出的指纹起始并不能与指纹库很好匹配,指纹库中也没有NT 6.1,不清楚这个结果是怎么得出来的
一个是mac指纹,用于是被设备制造商
如140被识别为vmware