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

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

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

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

工具目录

分类

查看所有分类
Loading categories
cotonti-commentswidget-poc — 针对 Cotonti CommentsWidget PHP 对象注入漏洞(CAN-2026-2035973 / CVE-2026-71294)的安全本地概念验证。 | Kitploit
工具/GitHubGitHub/harshrajsinghania/cotonti-commentswidget-poc
漏洞分析漏洞利用Web应用程序漏洞利用学习与教育
GitHubharshrajsinghania/cotonti-commentswidget-poc

cotonti-commentswidget-poc

针对 Cotonti CommentsWidget PHP 对象注入漏洞(CAN-2026-2035973 / CVE-2026-71294)的安全本地概念验证。

查看仓库

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
14小时47分前尚未审核
分享

Cotonti CommentsWidget PHP 对象注入 PoC

针对 Cotonti 的 CommentsWidget 实现中发现的 PHP 对象注入问题的安全本地概念验证。

漏洞

  • 项目: Cotonti
  • 受影响组件: plugins/comments/inc/CommentsWidget.php
  • CWE: CWE-502 — 不可信数据的反序列化
  • CVE/候选编号: CAN-2026-2035973 / CVE-2026-71294
  • 研究员: Harsh Raj Singhania

存在漏洞的代码路径接受 ci GET 参数,并将攻击者控制的数据通过 base64_decode() 传入 PHP 的 unserialize(),且未限制可实例化的类。

从概念上讲,存在漏洞的操作是:

root@kitploit:~
$ci = @unserialize(base64_decode($ci));

当提供序列化对象时,PHP 可能会实例化攻击者控制的类,并调用诸如 __wakeup() 之类的魔术方法。在更大的应用程序中,当存在合适的 gadget 类时,这可能变得危险。

提交的修复将反序列化改为:

root@kitploit:~
$ci = @unserialize(base64_decode($ci), ['allowed_classes' => false]);

并在使用结果值之前验证其是否具有预期的数组结构。

本 PoC 演示的内容

poc.php 执行三项本地测试:

  1. 存在漏洞的行为 — 不受限制的 unserialize() 实例化 DangerousGadget 并触发其 __wakeup() 方法。
  2. 修复后的行为 — allowed_classes => false 阻止 gadget 类被实例化,因此阻止了 __wakeup() 副作用。
  3. 结构验证 — 具有意外结构的序列化值会被修复所使用的验证逻辑拒绝。

该 PoC 仅使用 /tmp/pwned_by_cotonti_poc.txt 作为无害的哨兵文件,表明 __wakeup() 已执行。它不会执行操作系统命令。id && whoami 字符串仅作为 gadget 的 command 属性中的占位值存在。

要求

  • 支持 serialize() / unserialize() 的 PHP CLI
  • 本地测试环境

无需安装 Cotonti,因为存在漏洞和修复后的反序列化行为是直接复现的。

运行 PoC

在仓库目录中执行:

root@kitploit:~
php poc.php

预期输出类似于:

root@kitploit:~
[!] DangerousGadget::__wakeup() triggered
[TEST 1] VULNERABLE: __wakeup() executed during unrestricted unserialize().
[TEST 2] FIXED: object instantiation was blocked; no sentinel was created.
[TEST 3] FIXED: invalid serialized structure rejected by validation.

Summary:
- Vulnerable path allows a serialized attacker-controlled object to be instantiated and invokes __wakeup().
- Fixed path uses allowed_classes=false, preventing the gadget class from being instantiated.
- Structural validation rejects values that do not match the expected array shape.
- No real command execution is performed by this PoC; the command property is only a placeholder.

脚本在退出前会删除其哨兵文件。

修复建议

不要使用不受限制的 PHP unserialize() 反序列化攻击者控制的数据。

对于此代码路径,所演示的缓解措施是禁用类实例化:

root@kitploit:~
unserialize($data, ['allowed_classes' => false]);

在使用反序列化值的内容之前,还应按照应用程序期望的确切结构对其进行验证。

参考资料

  • 上游安全问题:https://github.com/Cotonti/Cotonti/issues/1888
  • 上游修复拉取请求:https://github.com/Cotonti/Cotonti/pull/1889
  • Cotonti 项目:https://github.com/Cotonti/Cotonti

负责任的使用

本仓库旨在用于安全研究、验证和防御性测试。仅在你拥有或明确获授权测试的环境中运行该 PoC。未经许可,请勿将其用于针对系统。

署名

Harsh Raj Singhania — 漏洞研究、概念验证和披露。

下载工具