网站建设、公众号开发、微网站、微商城、小程序就找牛创网络 !

7*24小时服务专线: 152-150-65-006 023-68263070 扫描二维码加我微信 在线QQ

网络安全工具团结互助,让我们共同进步!

当前位置:主页 > 技术资讯 > 工具 > 网络安全工具 >

我们的优势: 10年相关行业经验,专业设计师量身定制 设计师一对一服务模式,上百家客户案例! 企业保证,正规流程,正规合作 7*24小时在线服务,售后无忧

Kelinci:Java程序Fuzzing工具

文章来源:重庆网络安全 发布时间:2020-01-11 11:30:51 围观次数:
分享到:

摘要:AFL基于LLVM、GCC等编译器的辅助一直发挥的不错,可如果遇到java这类基于VM的语言开发的软件还能派上用场吗?今天的主角大杀器 —— kelinci

  Fuzzing一直是利用漏洞的非常有效的方法。 我最喜欢的工具仍然是持久的AFL。 您可以基于AFL构建各种fuzz工具。 当然,这是由于AFL中最神奇的遗传算法语料库突变所引起的。记住,“ hello”中的几个字符可以生成无数有效输入, 基于LLVM,GCC和其他编译器的AFL的帮助一直很好。 如果使用Java等基于VM的语言开发软件,今天的主角大杀器 —— kelinci 。

  我想谈谈实施kelinci的总体思路。 首先,对于AFL,它不知道它在模糊Java程序。 这是因为kelinci制作了Java程序的C版本。 该接口程序负责从AFL接收突变。然后,数据通过TCP传输到Java端。  Java方面的程序称为工具。 它负责将从接口传递的变异数据真正传输到java原始目标程序,然后将java的运行结果反馈到接口。 fuzz流是闭环的。blob.png

安装


  git clone https://github.com/isstac/kelincicd


  Kelinci有两个组件,一个是C程序接口,它是AFL的测试目标。 您可以在fuzzerside目录中找到它。 进入fuzzerside目录后,执行make进行编译并生成接口可执行程序。 第二个组件是Java方面的工具,它是目标程序在Java方面的工具的产品。 它负责与接口的TCP通信。 仪器运行后,它将启动TCP服务器以接收变异数据。 每次收到请求时,仪器都会设置一个单独的线程来在Java端运行目标程序,并将变异数据传递给它。 然后将请求结果发送回,例如成功,超时或队列已满。 请注意,任何可能跳出main的异常都将被视为崩溃。 您可以使用gradle构建工具,进入Instrumentor目录并执行gradle构建。 如果成功,将在./build/libs目录中编译一个kelinci.jar。


采用


  假设您的AFL和以上两个组件已编译,则可以按照以下步骤运行模糊测试。


  1.创建驱动程序:此步骤是可选的,主要是因为AFL / Kelinci的输入应该是本地文件,但是如果程序接受的参数不是文件,则需要通过以下方式将主体文件与程序链接: 你自己 接口已调整。 这有点抽象。 我给一个栗子 例如,如果要模糊目标程序以从数据库中读取数据并进行分析,则AFL无法直接对数据库中的某些字段数据进行突变。 这时,您需要自己编写驱动程序,从数据库中读取数据并将其组织到本地语料库文件中,然后AFL可以对该本地语料库文件进行突变。 变异完成后,您需要驱动程序来变异主体文件。 将从文件中读取数据并将其写回数据库,以供您的测试目标读取。 这些任务AFL无法自动执行,因为它无法提前知道您想要使程序模糊的哪种输入,因此您必须自己完成该驱动程序的工作。 当然,如果要模糊测试的程序是接受文件的输入,那么恭喜您可以保存此步骤。


  2,目标程序工具:我们假设您已经构建了目标程序和驱动程序,并输出到目录“ bin”。 接下来,我们需要检测目标程序。 只有使用工具后的目标程序才能使用AFL进行模糊测试。  Kelinci提供了一个工具类edu.cmu.sv.kelinci.instrumentor.Instrumentor来执行此操作。 它使用-i选项指定输入目录,在这种情况下为“ bin”,并使用-o选项指定输出目录,此处为“ bin-instrumented”。 我们需要确保kelinci.jar位于类路径中,然后假定目标程序所依赖的jar包位于/ path / to / libs /中,那么执行命令的示例如下:


  java -cp /path/to/kelinci/instrumentor/build/libs/kelinci.jar:/path/to/libs/* edu.cmu.sv.kelinci.instrumentor.Instrumentor -i bin -o bin-instrumented

请注意,如果目标程序与Kelinci Instrumentor依赖于相同的库,这时如果它们之间存在不同的版本,则会发生版本冲突。 当前,Kelinci使用以下版本:args4j版本2.32,ASM 5.2,Apache Commons IO 2.4。 在大多数情况下,如果发生这种问题,则不能使用打包的kelinci.jar,而是将Kelinci生成的classes目录放在类路径中,然后仅将它们依赖的一个jar包放在其中。版本可以 在/路径/到/ libs /。


  3.创建一个输入示例:要模糊工具化的目标程序,您需要创建一个输入文件目录“ in_dir”。


  mkdir in_dir

  AFL将从此in_dir获取输入样本以进行变异。 请注意,此处的文件是该突变的原始原始版本。 必须精心构造。 构建输入样本后,可以使用以下命令对其进行测试:

  

java -cp bin-instrumented:/path/to/libs/* in_dir/

  4.启动Kelinci服务器:现在我们可以启动Kelinci服务器。  Kelinci需要目标Java程序的主类作为第一个参数,然后使用@@代替先前创建的“ in_dir”中的输入文件。 在运行时,Kelinci将对每个特定的输入文件使用@具体。 可以使用以下形式编写要运行的命令:


  java -cp bin-instrumented:/path/to/libs/* edu.cmu.sv.kelinci.Kelinci @@

  您也可以自己指定端口号,默认为7007,例如


  java -cp bin-instrumented:/path/to/libs/* edu.cmu.sv.kelinci.Kelinci -port 6666 @@

  5.通讯测试:在开始正式测试之前,您可以运行接口程序以确认与Java端程序的连接。 命令如下:


  /path/to/kelinci/fuzzerside/interface in_dir/

  您还可以使用-s选项指定远程服务器(默认为连接到localhost),


  /path/to/kelinci/fuzzerside/interface -s yourdomain.com in_dir/

  甚至提供服务器列表server.txt


 /path/to/kelinci/fuzzerside/interface-s servers.txt in_dir/

  6.开始正式的模糊测试:如果以前没有做任何事情,现在可以启动AFL。 就像前面提到的界面一样,AFL测试目标也是如此。  @@用作接口的输入文件,该文件在运行时从“ in_dir”获取。 每个文件替换@@,然后指定一个模糊结果输出目录“ out_dir”,那么AFL运行命令可以组成如下:


  /path/to/afl/afl-fuzz -i in_dir -o out_dir /path/to/kelinci/fuzzerside/interface [-s servers.txt] @@

  毫不奇怪,AFL接口将在一段时间后启动。 恭喜,如果您在AFL显示窗口中找到新路径,则Kelinci已成功运行!

blob.png

本文由 重庆网络安全 整理发布,转载请保留出处,内容部分来自于互联网,如有侵权请联系我们删除。

相关热词搜索:Kelinci Java程序 Fuzzing工具

上一篇:DNSExfiltrator:基于DNS的数据泄露测试工具
下一篇:Snake:一种新的勒索软件,针对全球企业网络

热门资讯

鼠标向下滚动