功能发布:PluginTrace 插件执行追踪
PluginTrace 功能介绍
在渗透测试和自动化工作流程中,YAK 插件是实现自定义安全逻辑、扩展 Yakit 功能的核心工具。然而,随着插件数量和复杂度的增加,如何有效监控其执行状态、诊断潜在问题,成为保障工作流高效顺畅的关键。
Yakit 新增的 PluginTrace 功能,就像一个专为 YAK 插件设计的“执行仪表盘”,它能为你提供实时、详细的插件执行洞察,让你轻松排查错误、优化性能。
启用插件追踪后,一个清晰的列表就会出现在你面前。它会向你展示指的关注的插件执行,让你对插件的运行状态一目了然。
PluginTrace 记录的 Trace 主要存在三种状态,每种状态都提供了特定的洞察:
- 执行中 (Running)
表示插件调用已经执行了一段时间但尚未完成。通常,快速执行完毕的插件调用不会出现在此列表中。这种状态就像一个性能预警,提醒你某个插件可能因为逻辑复杂或网络延迟而耗时过长,从而可能拖慢整体的扫描速度。
- 取消 (Canceled)
表示本次插件调用被中断。这可能是因为插件执行时间超过了默认的超时阈值,或是你观察到它耗时过长后,手动点击了取消按钮。
- 失败 (Failed)
表示插件调用过程中发生了错误。这通常是由于 Yak 代码执行出错、依赖的库调用失败等情况所致。这是排查插件逻辑错误的直接线索。
使用方法
核心功能一:排查插件执行错误
PluginTrace 最强大的用途之一就是帮助你快速定位和诊断插件中的错误。
1、启用插件和追踪:首先,勾选你想要测试的插件,比如 FastJson 综合检测和 SQL 注入-高危 Header 注入插件。接着,前往插件追踪页面,开启追踪功能。
2、触发执行:在免配置浏览器中访问我们在本地启动的 VULINBOX 靶场,让 MITM 处理流量转发并触发插件执行。
3、发现问题:你会发现,PluginTrace 列表里可能会出现状态为失败的记录。点击这条记录,你就能看到详细的错误信息,包括失败原因、调用的参数以及是哪个 HOOK 函数出了问题。
可以观察到 SQL 注入-高危 Header 注入插件执行失败了。这时我们可以查看执行失败的原因,以及具体的调用参数和调用的插件 HOOK 函数名称。
我们使用市面主流 AI 模型进行询问这个插件 Trace 的错误信息:
根据提示信息我们查看这个插件的 YAK 代码:
把这个调用的生成 SQL UnionPayload 和 SQL StackedPayload 的函数重命名。这时,我们再次加载插件,启用 trace。
这次可以看到插件成功扫描出了 VULINBOX 靶场中的 SQL Header 注入,生成了 Risk 信息。同时在左侧插件追踪页面没有看到错误提示。
核心功能二:实时监控插件性能
除了排错,PluginTrace 还是一个强大的性能监控工具。当插件的调用时间超过一定阈值,它会被自动推送到 PluginTrace 页面,状态显示为执行中。这种机制就像一个性能预警,提醒你某个插件可能拖慢了整体的扫描速度。由于 Yakit 的插件默认并发执行数是 20,如果少数插件长时间运行,会导致大量其他插件处于排队等待状态,严重影响效率。
这时,你可以采取以下行动:
- 手动取消
如果某个插件长时间处于“执行中”状态且不影响关键流程,你可以点击取消按钮,提前终止本次调用,释放执行资源。你的取消操作也会被记录,状态显示为取消**。
- 性能排查:
进一步排查插件执行缓慢的原因。这可能涉及优化代码中的循环、简化复杂的网络请求等。
这时,我们可以选择提前取消这次插件执行,或者进一步排查插件执行缓慢的原因。点击取消即可取消插件的本次调用。这时我们的取消操作也会被记录,表现的状态是取消。
总结
PluginTrace 插件追踪是一个专为调试和排错而设计的实用功能。它通过提供透明化的插件执行状态、详细的错误报告和性能预警,极大地简化了 YAK 插件的开发和维护工作。
【注意事项】
PluginTrace 会记录大量的插件执行细节,因此长时间开启此功能可能会导致前端数据过多而造成卡顿。建议仅在需要调试或排查问题时开启此功能,完成任务后及时关闭,以保持 Yakit 的流畅运行。
本文首发于 Yak Project 公众号,阅读原文。
