PyroCMS 3.9 中的 SSTI 到 RCE 漏洞分析:从模板注入到远程命令执行

4 阅读3分钟

CVE-2023-29689 / 从 SSTI 到 RCE:揭示 PyroCMS 中的漏洞

什么是 Pyro?

Pyro 是一个使用 PHP 编程语言构建的内容管理系统(CMS)。它旨在用户友好且易于使用,使用户能够轻松创建、管理和发布网站内容。Pyro 的主要优势之一是其模块化设计,使开发者能够通过插件和附加组件扩展其功能。此外,Pyro 的用户友好界面使非技术用户无需具备大量编码知识即可管理其网站。总的来说,PyroCMS 是一个多功能且强大的网站创建和管理解决方案。

该漏洞存在于 3.9 版本

在开始之前,我们先讨论一下 SSTI(服务端模板注入)漏洞。

SSTI 是一种发生在 Web 应用程序中的漏洞,当动态模板使用不受信任的用户输入来生成动态网页时,就会出现此问题。这可能导致在服务器上执行任意代码,进而可能造成数据窃取、篡改或对敏感信息的未授权访问。此漏洞的影响非常严重,因为它可能危及系统及其用户的安全和隐私。因此,彻底验证和清理用户输入以防止此类攻击至关重要。

POC(概念验证)

我使用了 {{7*7}} 技术在 Twig 模板引擎中进行测试,返回了结果 49。使用相同的方法,我通过命令 {{['id']|map('system')|join}} 执行了服务器端命令,成功返回了用户的 ID。这演示了如何利用 SSTI 漏洞在服务器上执行任意代码。应采取输入验证和清理等措施来防止 SSTI 攻击,确保 Web 应用程序的安全和隐私。

在继续调查中,我在系统的另一个字段中发现了相同的 SSTI 漏洞。这次,我在进入 “用户 > 角色” 部分时遇到了该问题。在编辑 Admin 角色时,我观察到 “描述” 字段也容易受到 SSTI 攻击。

通过向 “描述” 字段注入模板代码,我能够在服务器上执行任意命令并获取敏感信息。例如,使用以下 payload:

{{['cat /etc/passwd']|map('system')|join}}

我成功获取了 /etc/passwd 文件的内容。

执行命令的结果:

即使经过了身份验证并拥有提升的权限,SSTI 漏洞仍然构成重大风险。在认证上下文中,具有恶意意图的攻击者可以利用该漏洞提升权限、未经授权访问敏感信息,并可能在服务器上执行任意代码。

此外,如果发生安全漏洞导致密码泄露或账户被入侵,攻击者可以利用 SSTI 漏洞在系统内进行横向移动,从而更容易遍历不同组件并进一步提升其权限。

此外,熟练的红队操作员可以在渗透测试演练中利用 SSTI 漏洞作为入口点。通过利用这一弱点,他们可以模拟真实世界的攻击场景,并评估系统的整体安全态势。这可能导致发现系统中的其他漏洞和防御方面的改进空间。

非常感谢您阅读我的文章!希望您喜欢它,就像我喜欢写它一样。如果您学到了新东西或觉得它有帮助,那么我的工作就完成了。

无论如何,是时候结束了,说声再见了。下次再见,继续黑客之旅……我是说,继续学习!保重,注意安全。干杯!🖤 🧁 CSD0tFqvECLokhw9aBeRqlxWR2VvtouaDfwxIbiDFl0PgeDGyPr7wCGfI12hvokXEE0wfmR+5f1u4giZgOuI6JCb+SQFgMtReS2bC0LVVIM=