Kelinci:Java程序Fuzzing工具
摘要: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流是闭环的。
安装
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已成功运行!
相关热词搜索:Kelinci Java程序 Fuzzing工具
上一篇:DNSExfiltrator:基于DNS的数据泄露测试工具
下一篇:Snake:一种新的勒索软件,针对全球企业网络
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )8872( 亮了
自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )6288( 亮了
Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
牛创网络: "在Grafana产品实例中,综合利用重定向和URL参数注入漏洞可以实现未经授权的服务器端请求伪造攻击(SSRF)。该漏洞影响Grafana 3 0 1至7 0 1版本。
2020-08-12 14:26:44 )4301( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )3858( 亮了
fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
牛创网络: "一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
2020-02-12 10:49:07 )3505( 亮了
整理几款2020年流行的漏洞扫描工具
牛创网络: "漏洞扫描器就是确保可以及时准确地检测信息平台基础架构的安全性,确保业务的平稳发展,业务的高效快速发展以及公司,企业和国家 地区的所有信息资产的维护安全。
2020-08-05 14:36:26 )2536( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )2261( 亮了
渗透测试:利用前端断点拦截和JS脚本替换对前端加密数据的修改
牛创网络: " 本文介绍的两种方法,虽然断点调试比JS脚本代码替换更容易,但是JS脚本代码替换方法可以实现更强大的功能,测试人员可以根据实际需要选择适当的测试方法
2020-01-07 09:34:42 )1995( 亮了
从工业界到学界盘点SAS与R优缺点比较
牛创网络: "虽然它在业界仍然由SAS主导,但R在学术界广泛使用,因为它的免费开源属性允许用户编写和共享他们自己的应用程序 然而,由于缺乏SAS经验,许多获得数据分析学位的学生很难找到工作。
2019-07-13 22:25:29 )1842( 亮了
41款APP侵犯用户隐私权:QQ,小米,搜狐,新浪,人人均被通报
牛创网络: "随着互联网的不断发展,我们进入了一个时代,每个人都离不开手机。 但是,APP越来越侵犯了用户隐私权。12月19日,工业和信息化部发布了《关于侵犯用户权益的APP(第一批)》的通知。
2019-12-20 11:28:14 )1775( 亮了