Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
wpgarlic — 一个概念验证的WordPress插件模糊测试工具 | Kitploit
工具/GitHubGitHub/kazet/wpgarlic
漏洞分析Web安全模糊测试
GitHubkazet/wpgarlic

wpgarlic

一个概念验证的WordPress插件模糊测试工具

查看仓库
200231年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

wpgarlic

一个概念验证的WordPress插件模糊测试工具,该工具发现了近3000万个站点上安装的WordPress插件中的300多个漏洞。

所用技术描述于 https://kazet.cc/2022/02/03/fuzzing-wordpress-plugins.html

如果你想继续研究,请从不太流行的插件开始——如果某个插件在2021年10月至2024年1月期间获得了至少1万次活跃安装,我大概率已经查看过模糊测试报告(并且重点关注那些至少有2万次活跃安装的插件)。由于模糊测试的工作方式存在大量随机性,这些插件中的某些漏洞可能仍然未被发现——但数量较少。

模糊测试报告包含大量误报——其中大多数并不代表漏洞。看到报告后,首先分析你所观察到的行为是否确实是漏洞还是误报。不要用原始模糊测试报告骚扰WPScan/供应商——请提供PoC漏洞利用代替。

示例

出于显而易见的原因,示例只会包含已经修复的漏洞。

任意文件读取

假设你正在模糊测试版本为6.4.0的 responsive-vector-maps:

root@kitploit:~
./bin/fuzz_object plugin responsive-vector-maps --version 6.4.0

(要模糊测试最新版本,只需省略 --version)。

模糊测试完成后(对于这个插件大约需要10-30分钟),你可以调用:

root@kitploit:~
./bin/print_findings data/object_fuzz_results/

你将看到,其中包括:

responsive-vector-maps 模糊测试输出示例.

这意味着模糊测试检测到在已知payload上执行了 fopen()。 大多数payload包含单词 GARLIC,以便在输出中自动检测。你可以在 docker_image/magic_payloads.php 中查看或配置它们。

然后,你可以浏览源代码,发现确实 wp_ajax_rvm_import_markers 端点使用文件内容来渲染输出,从而允许你读取服务器上的任意文件:CVE-2021-24947。

白色显示的是被认为有趣的崩溃(你可以在 crash_detectors.py 中修改它们或添加新的)。绿色是上下文。蓝色显示报告文件名(包含插件名称)、插件流行度和端点名称(此处是ajax动作名称)。

黄色数据是注入到哪些变量中的哪些payload。

反射型XSS

假设你正在模糊测试版本为1.4.9.4的 page-builder-add:

root@kitploit:~
./bin/fuzz_object plugin page-builder-add --version 1.4.9.4

打印结果后,你会看到已知payload被回显:

page-builder-add 模糊测试输出示例.

然后你可以手动测试这个位置(记住:蓝色部分有端点名称,这里是菜单页面名称)是否容易受到XSS攻击。 在这个例子中,是的:CVE-2021-25067。

选项更新导致存储型XSS

root@kitploit:~
./bin/fuzz_object plugin duplicate-page-or-post --version 1.4.6

打印结果后,你会看到 update_option 被调用:

duplicate-page-or-post 模糊测试输出示例.

分析端点的代码会告诉你,这确实导致了一个存储型XSS漏洞:CVE-2021-25075。

误报

不幸的是,对于大多数插件,模糊测试没有发现任何有趣的崩溃,而对于其余的插件,大多数报告都是误报。例如,如果你看到:

root@kitploit:~
Call: wp_mail arguments={'to': '[email protected]', 'subject': '[Plugin contact]  - http://GARLICGARLICGARLIC.example.com'}

这可能意味着 wp_mail 确实被调用,但你无法控制收件人和大部分主题。如果想确认,请查看插件源代码。

阅读模糊测试报告的额外提示

  • 如果你看到消息:May as well be equal: ... and ... ——这意味着触发了一种机制,该机制将已知payload视为等于任何其他字符串(在 https://kazet.cc/2022/02/03/fuzzing-wordpress-plugins.html#patched-equality 中有描述)。
  • 如果你看到 __GARLIC_ACCESSED__ _FILES[files] __ENDGARLIC__ ——这意味着检测到了上传文件访问。目前没有进行进一步检查——要检查这是否是一个漏洞,请查看代码。
  • 有时模糊测试注入到GET、POST等参数的内容在现实世界中无法重现:例如,如果你想要显示某个特定菜单页面,你不能在 $_GET['page'] 中注入任何内容。

使用速查表

首次运行模糊测试或测试可能需要大约一小时,因为我们需要构建带有插桩PHP和WordPress的Docker镜像。

按名称模糊测试插件

root@kitploit:~
./bin/fuzz_object plugin PLUGIN_SLUG

按名称模糊测试主题

root@kitploit:~
./bin/fuzz_object theme THEME_SLUG

从文件模糊测试插件

你还可以从本地zip文件安装插件:

root@kitploit:~
./bin/fuzz_object plugin PLUGIN_FILE_NAME.zip

打印发现

要打印模糊测试的发现,使用:

root@kitploit:~
./bin/print_findings data/object_fuzz_results/

运行测试

要运行测试,使用:

root@kitploit:~
./bin/test

警告:测试耗时很长(超过一小时),并且因为它们检查模糊测试是否会发现漏洞,所以有一定概率会失败。

格式化代码并运行linters

wpgarlic 使用 pre-commit 来运行linters并格式化代码。 pre-commit 在CI上执行,以验证代码格式是否正确。

要在本地运行,使用:

root@kitploit:~
pre-commit run --all-files

要设置 pre-commit 使其在每次提交前运行,使用:

root@kitploit:~
pre-commit install

手动测试环境

你可以使用以下命令启动一个仅安装了一个插件的测试环境:

root@kitploit:~
./bin/manual_testing PLUGIN_SLUG|PLUGIN_PATH.zip [version]

你可以使用插件的slug或从本地zip文件安装插件。

它将在 http://127.0.0.1:8001/ 上监听。

数据库中将有两个测试用户:

  • 用户名: admin, 密码: admin, 权限: administrator
  • 用户名: subscriber, 密码: subscriber, 权限: subscriber

扩展和配置模糊测试器

这个工具是一个概念验证——本节包含可以改进以发现更多漏洞的地方。

你可能希望编辑 filtering.py ——它包含将特定崩溃视为重要或不重要的规则。如果更改它们,可能会有更多误报,但也可能发现更多漏洞。例如,我认为唯一有趣的头信息是Location头,用于检测开放重定向漏洞。这只是其中一个想法,你可能有其他想法。

另一个值得扩展的文件是 docker_image/patch_wordpress.sh。它描述了哪些函数的调用会被记录为有趣。

如果你想注入其他payload(或更改它们被注入的概率),编辑 docker_image/magic_payloads.php 和 docker_image/fuzz/config.py。

crash_detector.py 包含正则表达式,用于查找有趣的崩溃或暴露的有趣信息(例如电子邮件)。

以登录管理员身份模糊测试REST路由已被禁用,因为它会导致误报。取消注释 config.DEFAULT_ENABLED_FEATURES 中的 rest_routes_admin 可以更改此设置。

模糊测试器内部

黑名单

有些插件需要其他插件(例如woocommerce)作为依赖。在模糊测试一个有依赖的插件时,我们希望只模糊测试选中的插件,跳过其依赖的AJAX动作、REST路由和菜单页面。只有当我们选择模糊测试woocommerce时,才希望模糊测试woocommerce的动作/路由/页面。

依赖动作/路由/页面的列表称为黑名单,列在 docker_image/blocklists/ 中。名为 common 的文件包含WordPress核心动作/路由/页面——我们也不希望模糊测试这些。

要更新这些黑名单,使用 ./bin/update_blocklists。

常见问题

模糊测试发现了某些东西,这是漏洞吗?

也许。将插件安装到本地测试环境中(例如,你可以使用 手动测试环境 一节中描述的环境)并分析该bug。

模糊测试没有发现任何东西,这个插件安全吗?

不要这样假设。 模糊测试会发现某些类别的漏洞,但也有其局限性。

对于大多数插件,模糊测试没有发现任何东西——该工具的目的是大规模扫描大量WordPress插件,而不是对一个插件进行全面的测试。

模糊测试在一次运行中发现了某些东西,但下次运行却没有。发生了什么?

这是可能的。模糊测试随机选择payload,并在其他方面引入随机性(例如==运算符在 https://kazet.cc/2022/02/03/fuzzing-wordpress-plugins.html#patched-equality 描述的情况下应该如何表现)。

不起作用?有问题?

提交Github工单或发送电子邮件至:[email protected]。

下载工具