htrgouvea/fuzzpm
GitHub: htrgouvea/fuzzpm
FuzzPM 是一个面向 Perl 模块的差分模糊测试工具,通过对比多个模块在同一输入下的输出来发现逻辑 bug 和潜在漏洞。
Stars: 26 | Forks: 5
FuzzPM
Differential Fuzzing for Perl Modules
### 摘要 FuzzPM 展示了如何使用 differential fuzzing 对现代 Perl 组件执行自动化的大规模安全分析。通过比较多个模块在相同输入下的输出,它有助于发现不一致性和潜在的漏洞。欲了解更多详情,请阅读完整的发布文章:[https://heitorgouvea.me/2021/12/08/Differential-Fuzzing-Perl-Libs](https://heitorgouvea.me/2021/12/08/Differential-Fuzzing-Perl-Libs)。 ### 下载与安装 ``` # 下载 $ git clone https://github.com/htrgouvea/fuzzpm && cd fuzzpm # 安装 libs 和 dependencies $ cpanm --installdeps . ``` ### 工作原理 Differential fuzzing 是一种将我们的种子发送到两个或多个输入的方法,在这些输入中种子被消耗并应产生相同的输出。在测试结束时,会对这些输出进行比较,如果出现差异,fuzzer 将发出可能发生故障的信号 [[1]]。(https://en.wikipedia.org/wiki/Differential_testing)  共有三个关键组件: - Targets:需要测试的 Perl 模块。 - Input Seeds:包含输入数据的文件。 - Test Cases:用于定义使用哪些种子和目标的 YAML 文件。 以下是关于如何创建你自己的 targets、seeds 和 test cases 的介绍。 要创建完整的 fuzzing 用例,你首先需要将你的目标库创建为一个 package,例如: ``` package Mojo_URI { use strict; use warnings; use Try::Tiny; use Mojo::URL; sub new { my ($self, $payload) = @_; try { my $url = Mojo::URL -> new($payload); return $url -> host(); } catch { return 0; } } } 1; ``` 存放路径为:./targets/标签:Perl, 请求拦截