Educational CVE-2024-12877 exploit demo for PHP Object Injection in GiveWP WordPress plugin. Includes root cause analysis, regex bypass techniques, and safe exploitation practices. CVE-2024-12877 漏洞利用演示,针对 GiveWP WordPress 插件中的 PHP 对象注入。包含根本原因分析、正则表达式绕过技术以及安全利用实践。
第66周 | 作者:Ali Soltani (soltanali0))
欢迎来到 GO-TO CVE 系列第66周,我们在此剖析漏洞、分析根本原因,并在安全、教育化的环境中展示实用的利用技术。
CVE-2024-12877 是 GiveWP(最广泛使用的 WordPress 捐赠插件之一)中的一个 PHP 对象注入 漏洞。对用户可控输入不安全地使用 unserialize() 允许攻击者触发 PHP 魔术方法(如 __wakeup()),可能导致:
CVSS: 9.8 严重 | 向量:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
GiveWP 为数千个慈善网站、非政府组织和募捐平台提供动力。由于它处理敏感的财务和捐赠者数据,此处的漏洞影响巨大。攻击者利用对象注入可以从单个插件升级到危害整个 WordPress 安装以及底层服务器。
根本原因: 对不受信任的输入使用 unserialize()。
PHP 魔术方法: PHP 在对象生命周期中自动调用这些方法:
该漏洞源于对用户可控输入不安全地使用 PHP 函数 unserialize()。虽然 unserialize() 旨在重建 PHP 数据结构,但它有一个危险的副作用:当对象被重构时,PHP 自动调用魔术方法。
__wakeup() – 当对象被反序列化时触发
__destruct()、__toString()、__get/__set()、__call/__callStatic() – 可被利用进行恶意执行
正则验证: GiveWP 实现了正则检查来检测序列化输入。虽然新的正则覆盖了更多数据类型,但 正则无法可靠地阻止对象注入。
通过精心构造的序列化对象,攻击者设置对象属性,PHP 本身通过调用魔术方法执行攻击者的逻辑
GiveWP 实现了基于正则的验证来检查输入是否被序列化。 旧正则(不完整)
• 仅识别数组和对象。
• 其他序列化类型(字符串、整数、布尔、浮点、null)绕过了检测。
• 识别所有 PHP 序列化类型。
• 拦截一些简单的有效载荷。
• 但核心问题依然存在:如果在用户输入上使用 unserialize(),正则无法拯救你。
此代码片段旨在比较两种不同的正则实现:
• is_serialized_old() → 旧版本,仅检测数组和对象。
• is_serialized_new() → 改进版本,识别所有 PHP 序列化数据类型(数组、对象、字符串、整数、布尔、浮点和 null)。 我们创建一组测试值(数组、对象、字符串、整数、布尔、浮点、null),将其序列化,然后用两个正则函数分别检查每个值。 简单来说:
在 Docker 上运行此代码后,在浏览器上可以看到此结果
步骤 1
步骤 2:创建一个易受攻击的类
该类有一个 __wakeup() 方法,在反序列化时会自动执行。
步骤 3:构造有效载荷
步骤 4:输出 将文件保存到该文件后,你可以看到此漏洞利用
漏洞利用:
• 旧正则:FALSE → 未能检测到载荷。
• 新正则:TRUE → 检测为序列化输入。
• 执行中:Hello RCE! → 该载荷被反序列化,并且魔术方法 __wakeup() 执行了攻击者控制的代码。
预防措施 • 不要在不可信输入上使用 unserialize()。用 json_decode() 或其他更安全的替代品替换。
• 保持 GiveWP 和所有 WordPress 插件更新。
• 部署 Web 应用程序防火墙 (WAF) 以拦截恶意序列化载荷。
• 遵循最小权限原则:以最低所需权限运行 PHP 和数据库账户。
结果:
关键洞察:永远不要依赖正则来保护 unserialize()。最安全的方法是完全避免反序列化不可信输入。
unserialize();优先使用 json_decode() 或其他安全的替代方案。我运营两个专注于漏洞研究和利用的 Telegram 频道:
GO-TO CVE 每周剧集: 每周,我们深入挖掘一个新的 CVE,并分享详细分析、演示和见解。 🔗 在此加入
CVEdb – 漏洞利用档案: 该频道存档 CVE 的 1 天漏洞利用和自定义 PoC。是希望看到活跃利用技术的研究人员的绝佳资源。 🔗 加入 CVEdb
关注这些频道,及时了解最新的 CVE、利用技术和安全研究见解。
本仓库严格用于教育和研究目的。在未经许可的情况下利用漏洞是非法且不道德的。作者不对滥用行为负责。