使用TCP/IP协议栈指纹进行远程操作系统辨识
2016-03-10 10:40
246 查看
使用TCP/IP协议栈指纹进行远程操作系统辨识
( ps:主要参照fyoder的《使用TCP/IP协议栈指纹进行远程操作系统辨识》一文)1、什么是协议栈指纹
协议栈指纹就是各个厂家,如微软和RedHat等在编写自己的TCP/IP协议栈时,却做出了不同的解释。这些解释因具有独一无二的特性,故被称为“指纹”。(来自百度知道)2、协议栈指纹有什么用
协议栈指纹识别是一项强大的技术,能够以很高的概率迅速确定操作系统的版本。因为由于各个厂家在编写自己的TCP/IP协议栈存在差别,而我们通过这些细微的差别,可以准确定位操作系统的版本。3、协议栈指纹识别技术
3.1经典技术
3.1.1 TELNET 服务
我简单做了测试,以win7系统开启telnet服务器,然后用kali 1.0和win10去连接,服务器ip为192.168.80.130。然后下面是kali和win10分别返回的截图
由此既可以判断出系统是windows系统,但是具体是什么版本的windows系统目前看来是无法判断的。
3.1.2 FTP 服务
同样,原理合上述差不多,此处就不做赘述。3.2 现有指纹技术
1、FIN 探测器这里我们发送一个 FIN 包(或任何其他不带 ACK 或 SYN 标记的数据包)给一个打开的端口并等待回应。按照 RFC,正确的行为是不响应 ,但例如 MS Windows、BSDI、CISCO、HP/UX、MVS 和 IRIX 等都会发回一个 RESET从而暴露OS版本特征。
2、BOGUS 标记探测器
发送一个含有未定义的TCP标记(64或者128)的TCP头的SYN包,那么一些操作系统的回应将包含这个未定义的标记,而其它一些系统收到SYN+BOGUS包将关闭连接,利用这些特性可以识别一些操作系统。
3、ISN采样探测
这个方法是找出当响应一个连接请求时由 TCP 实现所选择的初始化序列数的式样,这样可以区分一些操作系统。 例如传统的 64K 、随机增量或真“随机”。Windows(和一些其他系统)则使用一个“时间相关”模型,每过一段时间 ISN 就被加上一个小的固定数, 不用说, 这几乎和老的 64K 实现一样容易攻破。甚至还可以通过计算其随机
数的变化量、 最大公约数以及序列数的其他函数之间的差异之类的方法再进一步地进行分组。
4、ICMP 消息引用
RFC 规定 ICMP 错误消息可以引用一部分引起错误的源数据包。对于一个端口不可达消息,几乎所有实现都只送回 IP 头和其后的 8 个字节。所以可以在对方没有开放端口的情况下就能探测到对方的OS
5、TCP 选项
即TCP报文的选项域: 每个选项的开始是1字节的kind字段,说明选项的类型。
Kind=0:选项表结束(1字节)
Kind=1:无操作(1字节)
Kind=2:最大报文段长度(4字节)
Kind=3:窗口扩大因子(4字节)
Kind=8:时间戳(10字节)
TCP报文的选项通常是可选的 ,所以并非所有实现都支持;如果某个实现发送了设置选项的请求,目标将通过在回复中进行设置来表示响应;只需在一个数据包中进行设置,一次就能测试
所有选项。而不同的操作系统支持的选项集不同,故可以通过选项的取值来分辨出它们
相关文章推荐
- 2016年1月网络不良与垃圾信息:淫秽网站占比居首
- TCP/IP知识总结(TCP/IP协议族读书笔记三)
- HTTP和HTTPS协议
- NTRIP/ SUPL
- Referenced file contains errors (http://www.springframework.org/schema/beans/spring-beans-3.0.xsd).
- 2015-2016-2 《网络攻防实践》 学生博客
- TCP/IP解析
- Android-BaseLine框架初识之网络请求(一)
- http与https的区别
- TCP、UDP、IP 协议分析
- 2015-2016-2 《网络攻击与防范》 学生博客
- TCP/IP、UDP、HTTP、Socket到底是什么
- 《企业网络》评选的十大WLAN设备商
- 最简单的基于Flash的流媒体示例:网页播放器(HTTP,RTMP,HLS)
- HttpUploader2-queue版本
- 阿里独家揭秘:淘宝全站HTTPS 改造细节
- 在 swift中处理网络请求
- 爬虫训练营-开篇
- C++中公有继承、保护继承、私有继承的区别 http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html
- SQL Server 建立连接时出现与网络相关的或特定于实例的错误