热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Netzob逆向未知协议的技术指南

本文详细介绍如何使用Netzob工具逆向未知通信协议,涵盖从基本安装到高级模糊测试的全过程。通过实例演示,帮助读者掌握Netzob的核心功能。

本文将详细介绍如何使用Netzob工具逆向未知通信协议。Netzob是一款强大的开源工具,适用于逆向工程、生成流量和模糊测试通信协议。通过本文的学习,你将能够掌握Netzob的基本功能和高级用法。

0x00 前言

本文主要介绍如何使用Netzob来逆向未知协议。通过学习协议的消息格式及其状态机,并结合实际通信中的流量生成,最后说明如何进行基本的模糊测试。

0x01 Netzob简介

Netzob是一个用于逆向工程、生成流量和模糊测试通信协议的开源工具。它支持通过被动和主动的方式推断协议的消息格式和状态机。生成的模型可以用于模拟现实和可控流量,以及对目标实现进行模糊测试。

本文将介绍Netzob的主要功能,包括推断消息格式和简单协议的语法,并在最后介绍基本的模糊测试方法。具体功能包括:

  • 导入包含通信痕迹的文件
  • 推断消息格式
  • 区分特定分隔符的消息
  • 重组特定关键字字段的消息
  • 区分序列对齐的每个消息的子集
  • 查找每组消息的关联性
  • 修改消息格式,应用发现的关系
  • 推断语法
  • 生成主状态机
  • 生成序列状态机
  • 生成Prefix Tree Acceptor (PTA)
  • 生成流量和模糊测试服务器
  • 生成遵循推断的消息格式的消息
  • 通过不同消息格式对服务器进行模糊测试

0x02 安装Netzob和下载教程

首先,获取Netzob的源代码,安装依赖库并编译底层库。详细的安装步骤请参考README文件。然后,下载教程中使用的协议实现的源代码和一些消息序列的PCAP文件。

在深入Netzob功能之前,建议先阅读其文档,特别是API的描述。

0x03 消息格式接口

从PCAP文件中导入消息

逆向协议的第一步是收集重要的通信实例。本教程中,示例来自PCAP文件。通过PCAPImporter.readfile()函数可以从PCAP文件中读取数据包。该函数支持BPF过滤、导入层和捕获数据包等选项。

例如,以下代码从PCAP文件中导入消息,并创建一个基于这些消息的symbol。symbol代表了一组共享相同语法和语义的消息。

使用分隔符进行格式区分

通过快速查看消息,发现字符#出现在每个消息中间。因此,可以使用splitDelimiter()函数根据字符#分割每条消息。使用_str_debug()方法可以结构化输出分割后的字段。

根据关键字段进行分簇

现在我们已经将消息分解成不同的字段,接下来可以尝试重组一些消息。Netzob中的分簇方法可以帮助我们根据特定字段将消息分组。例如,根据第一个字段(包含几种命令行)进行分簇。

分簇算法生成了14个不同的symbol,每个symbol都有一个唯一的第一个字段。

在每个symbol中以序列对齐来区分格式

现在我们已经重组了消息,并且有每个消息的三个基本字段:命令字段、分割字段和不定长内容。具有动态大小的字段适合在Netzob中进行序列对齐。使用splitAligned()函数可以对齐静态和动态的子字段。

例如,对于symbol CMDencrypt,序列对齐后的最后一个字段显示为两个可变字段包裹一个静态字段x00x00x00。最后一个字段可能是我们要加密的缓冲区。

找到每个symbol的关系

接下来,尝试找出这些消息之间的关系。Netzob的API提供了RelationFinder.findOnSymbol()函数,可以帮助确定潜在的消息字段之间的关系。

例如,在未知协议中,我们找到了symbol CMDencrypt在内容字段(第三个字段)和其他字段之间的关系。

应用找到的symbol结构之间的关系

我们发现了一个与下一个字段大小相关的字段。为此,我们创建一个Size字段,其值取决于目标字段的内容。还指定了Size字段的大小应该是缓冲区字段的八分之一。

通过这些操作,我们得到了每个symbol的完整定义。

0x04 推断状态机

生成一个状态机链

在逆向协议的消息格式之后,接下来逆向状态机,即描述授权消息序列的语法。Netzob中的Session对象表示消息序列,而Abstract Session对象用于推测状态机。

我们将介绍三种方法来生成基于PCAP文件的自动机:

  • 生成一个基本的自动机,描述从PCAP文件中导出的命令和响应序列。
  • 生成一个唯一的状态机,接收任何发送消息触发的状态转变。
  • 生成一个基于PTA的自动机,合并相同路径的消息序列。

0x05 流量生成和模糊测试

根据推断的模型生成消息

现在我们已经理解了消息格式和目标协议的语法,可以测试这个模型,尝试与真实服务器通信。

首先,启动服务器。然后创建一个UDP客户端,使用Netzob生成的消息与服务器通信(127.0.0.1:4242)。Netzob中的抽象层确保发送的symbols和接收的消息抽象。

Fuzzing一个指定的symbol

最后,选择CMDencrypt的消息格式进行模糊测试。修改格式以扩展缓冲区字段的大小。

通过这些步骤,你可以使用Netzob逆向未知协议,并进行基本的模糊测试。建议阅读API文档,如果有任何问题,可以与Netzob开发团队交流。


推荐阅读
author-avatar
杨支榕_293
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有