Kitty:Python语言编写的Fuzzing框架

Kitty是一款用Python语言编写的开源的模块化、可扩展的模糊测试框架,灵感来源于OpenRCE’s Sulley 和 Michael Eddington的 (现在为Deja Vu Security的) Peach Fuzzer 。

目标

我们开始写Kitty的时候,目的是帮助我们fuzz特殊的目标。也就就是运行于非TCP/IP通道上的私有和内部协议。一个通用、抽象的框架应该包含所有我们能想到的模糊测试过程中用到的所有通用功能,并且能方便用户扩展,以便用来攻击特定目标。

特性

心中有了这样的目标,以下的特性就非常重要:

1、模块性:fuzzer的每一个部分都是独立的,这意味着你能够用相同的监视代码监控不同的程序,用相同的载荷生成工具(aka Data Model)生成的数据可以在不同的信道中传递;

2、扩展性:如过你想测试新的东西,不需要修改Kitty的核心代码。即便不是所有,大部分功能应该在用户代码中实现。这包括监视,控制以及和被fuzz的目标的通信;

3、丰富的数据模型:数据模型的核心要丰富,能够描述高级的数据结构,包括字符串,哈希,长度,条件及其它。而且和其它框架一样,还要设计好,将来需要的时候可以扩展;

4、状态性:支持多阶段的模糊测试。不仅要能描述单独消息的载荷应该是什么样,还要能描述消息的顺序,甚至按照顺序进行fuzzing;

5、客户端和服务端fuzzing:假设你有一个配对的程序栈,你可以对服务端和客户端进行fuzz。这听起来是一个很高的要求,但实际上不是:只需要你像通常一样能够和目标通信即可;

6、跨平台:可以在Linux,OS X和Windows上运行。

它不是XX

好吧,Kitty不是一个模糊测试器。它包含了还未实现的特定的协议或者通信通道。你可以用它写一个自己的模糊测试器,你同样可以用其它的基于Kitty的代码,但是它不是一个开箱即用的模糊测试器。获取Kitty模型实现的一个好去处是Katnip。

Katnip

Kitty,作为一个框架,实现了模糊测试器的主循环,并且提供了用于创建一个完整的fuzzing会话所需要的数据模型和基类的语法。然而,特定类的实现并不是Kitty框架的一部分。这意味着,Kitty定义了与目标进行数据传递的接口和基类,但是没有提供HTTP,TCP或者UART之上的数据传输实现。各种类的实现可以在附赠的软件仓库Katnip
Github中找到。

接下来是什么?

安装Kitty:

pip install git+https://github.com/cisco-sas/kitty.git#egg=kitty

阅读这里的文档。

构建自己的fuzzer。

如果需要帮助,可以询问我们的Google group

作者:felix

来源:51CTO

时间: 2024-08-01 18:21:07

Kitty:Python语言编写的Fuzzing框架的相关文章

选择使用c语言编写的phalcon框架

使用这个框架,我总结了如下几点考虑 1.这个框架速度快.纯c语言编写的框架,速度都比php框架快,省去了中间环节.当然,使用它不仅仅是性能考虑.因为如果为了解决php性能问题,完全可以有很多种方式,不仅仅是这种.比如做代码优化(加php代码加速器),像facebook加速php性能有开源的工具可以使用等等. 2.升级方便.市面上的tp.ci等框架,大家看着不爽,就自己把源码给修改了,造成升级版本困难.因为这些框架不是公司内部在维护.升级.是外面官方团队维护.所以一旦他们升级版本了,你修改过源码就

Python语言编写电脑时间自动同步小工具_python

话不多说,小工具需求如下: 功能需求 -- 电脑开机后自动执行时间同步 非功能需求 -- 安装执行简单,无需安装额外环境 一.代码实现 基于以上需求,思路如下:访问网络获取北京时间,然后调用命令行来设置系统时间.程序写成Windows Service,并设置为开机自动运行.正好前段时间在学习Python,所以打算用Python来写这个工具.具体代码如下: 获取网络时间 复制代码 代码如下:  def getBeijinTime():     """  获取北京时间     &

《数据结构与算法:Python语言描述》一3.3链接表

3.3链接表 本节考虑线性表的另一种实现技术. 3.3.1线性表的基本需要和链接表 回忆一下线性表的定义,它就是一些元素的序列,维持着元素之间的一种线性关系.实现线性表的基本需要是: 能够找到表中的首元素(无论直接或者间接,这件事通常很容易做到). 从表里的任一元素出发,可以找到它之后的下一个元素. 把表元素保存在连续的存储区里(顺序表),自然能满足这两个需求,其中元素间的顺序关联是隐含的.但是,要满足这两种需求,并不一定需要连续存储元素.显然,对象之间的链接也可以看作一种顺序关联,基于它也可以

Linux集群和自动化维3.1 Python语言的应用领域

第3章 轻量级自动化运维工具Fabric详解 近期公司的业务系统代码发布频繁,笔者同时在几个项目组里面穿插工作,发现发布和运维的工作都相当机械,加上频率比较高,导致时间的浪费也比较多.很多测试工作,例如通过SSH登录到测试环境,推送代码,然后修改Bug进行测试,这些操作都是非常机械并且具有重复性的.更让人郁闷的是,每次的操作都是相同的,命令基本上都是一样的,并且是在多台机器上执行,很难在本机上以一个脚本来搞定,主要时间都浪费在使用SSH登录和输入命令上了.这个时候需要一个轻量级的自动化运维工具,

《数据结构与算法:Python语言描述》一1.3算法和算法分析

1.3算法和算法分析 本节集中讨论算法的问题,特别是算法的性质及其分析技术. 1.3.1问题.问题实例和算法 在考虑计算问题时,需要清晰地区分问题.问题实例和算法三个概念,并理解它们之间的关系,这就是本小节讨论的内容.三个基本概念考虑一个计算问题时,需要注意到三个重要概念:问题:一个问题W是需要解决(需要用计算求解)的一个具体需求.例如判断任一个正整数N是否为素数,求任一个方形矩阵的行列式的值等.虽然可以严格定义"问题"的概念,但在这里还是想依靠读者的直观认识.总而言之,现实世界中存在

强者联盟——Python语言结合Spark框架

引言:Spark由AMPLab实验室开发,其本质是基于内存的快速迭代框架,"迭代"是机器学习最大的特点,因此非常适合做机器学习.得益于在数据科学中强大的表现,Python语言的粉丝遍布天下,如今又遇上强大的分布式内存计算框架Spark,两个领域的强者走到一起,自然能碰出更加强大的火花(Spark可以翻译为火花),因此本文主要讲述了PySpark. 本文选自<全栈数据之门>. 全栈框架 Spark由AMPLab实验室开发,其本质是基于内存的快速迭代框架,"迭代&qu

Python中编写ORM框架的入门指引

  这篇文章主要介绍了Python中编写ORM框架的入门指引,示例代码基于Python2.x版本,需要的朋友可以参考下 有了db模块,操作数据库直接写SQL就很方便.但是,我们还缺少ORM.如果有了ORM,就可以用类似这样的语句获取User对象: ? 1 user = User.get('123') 而不是写SQL然后再转换成User对象: ? 1 2 u = db.select_one('select * from users where id=?', '123') user = User(*

使用C语言编写windows服务一般框架

原文:使用C语言编写windows服务一般框架    编写windows服务和编写windows应用程序一样,有一些回调函数必须填写且向windows 服务管理器(service manager)进行注册,否则会导致服务启动失败.因近期写个服务,其中遇到一些有问题,有部分内容想和大家分享一下,请大家指正.         windows服务一般框架代码如下: #include <Windows.h> #include <tchar.h> VOID WINAPI ServiceHan

《从问题到程序:用Python学编程和计算》——1.2 Python语言简介

1.2 Python语言简介 本节将首先简单介绍Python语言的一些基本情况,包括其发展和使用的情况.而后介绍Python语言系统的安装和使用方面的基本常识.1.2.1 Python语言的发展和应用 Python语言是CWI(荷兰国家数学和计算机研究中心)的程序员Guido van Rossum在1989年开始开发的一种高级编程语言,当时的主要设计目标是希望能用于方便地管理CWI的Amoeba操作系统.后来,由于其各方面的优点而逐渐流行起来. Python语言现在由Python软件基金会(Py