前言
CVE-2022-26965 是一个影响 Pluck CMS 4.7.16 版本的远程代码执行(RCE)。该允许经过身份验证的用户通过 /admin.php?action=themeinstall 的主题上传功能执行任意代码。
细节
在 Pluck CMS 的管理界面中,管理员可以上传主题文件。然而,该功能存在一个安全缺陷,允许者上传恶意文件,如带有恶意代码的 PHP 文件。一旦上传并激活这些文件,就可以在服务器上执行任意代码。
利用
- 获取管理员权限:攻击者需要首先获取管理员账户的访问权限。
- 上传恶意主题:利用 /admin.php?action=themeinstall 页面上传包含恶意代码的主题文件。
- 执行代码:通过访问上传的恶意文件,可以在服务器上执行任意代码,可能会导致服务器被完全控制。
解决方案
为了解决这个问题,建议采取以下措施:
- 更新 Pluck CMS:确保使用最新版本的 Pluck CMS,该版本应该修复了此。
- 限制上传类型:配置服务器以限制允许上传的文件类型,避免上传可执行文件。
- 加强身份验证:确保管理员账户具有强密码,并启用双因素身份验证。
春秋云镜是一个专注于网络安全培训和实战演练的平台,旨在通过模拟真实的网络环境和场景,提升用户的网络安全防护能力和实战技能。这个平台主要提供以下功能和特点:
实战演练:
提供各种网络安全攻防演练场景,模拟真实的网络事件,帮助用户在实际操作中掌握网络安全技术。
场景涵盖Web安全、系统安全、网络安全、社工等多个领域。
复现:
用户可以通过平台对已知的安全进行复现,了解的产生原因、利用方法和修复措施。
通过实战操作,帮助用户掌握利用和防护的技能。
教学培训:
提供系统化的网络安全课程,从基础到高级,覆盖多个安全领域,适合不同水平的用户。
包含理论讲解和实战操作,帮助学员全面提升网络安全知识和实战能力。
竞赛与评测:
定期举办网络安全竞赛,如CTF(Capture The Flag)比赛,激发学员的学习兴趣和动力。提供个人和团队的安全能力评测,帮助学员了解自己的安全技能水平。
资源共享:
平台提供丰富的学习资源,包括教程、工具、案例分析等,方便用户随时查阅和学习。
用户可以在社区中分享经验和资源,互相交流和学习。
春秋云镜适合网络安全从业人员、学生以及对网络安全感兴趣的个人,通过在平台上进行不断的学习和实战演练,可以有效提升网络安全技能和防护能力。
介绍
Pluck CMS 是一个小型、易用的内容管理系统(CMS),主要用于管理小型网站。它基于PHP构建,不需要数据库支持,非常适合个人网站和小型企业使用。Pluck 4.7.16 是其版本之一,以下是关于 Pluck CMS 4.7.16 的详细介绍:
概述
- 名称: Pluck CMS
- 版本: 4.7.16
- 主要语言: PHP
- 数据库: 不需要数据库(使用文件系统存储数据)
主要功能
- 内容管理:
- 创建和管理页面内容。
- 支持富文本编辑器,便于内容格式化。
- 图片管理:
- 上传和管理图片。
- 插入图片到页面内容中。
- 博客功能:
- 发布博客文章。
- 管理和编辑博客内容。
- 模块扩展:
- 支持安装和管理插件,扩展系统功能。
- 主题支持:
- 更换和管理网站主题。
- 自定义网站外观和布局。
- 多语言支持:
- 支持多种语言,便于国际化使用。
安装步骤
- 下载 Pluck CMS:
- 从官方网站或 GitHub 仓库下载 Pluck 4.7.16 版本。
- 解压文件:
- 将下载的压缩包解压到服务器的web目录中。
- 设置权限:
- 确保 web 服务器对
data
目录具有写权限。
- 运行安装程序:
- 在浏览器中访问
http://yourdomain.com/install.php
,按照安装向导完成安装过程。
安全性
Pluck CMS 由于不依赖数据库,简化了安装和配置过程,但也带来一些安全挑战。以下是一些常见的安全措施:
- 权限设置:
- 确保只有 web 服务器能够写入
data
目录,其他用户没有写权限。
- 输入验证:
- 对用户输入进行严格的验证和过滤,防止代码注入和跨站脚本攻击(XSS)。
- 更新和补丁:
- 定期检查并安装 Pluck CMS 的更新和安全补丁。
- 备份:
- 定期备份网站文件和数据,以防止数据丢失。
复现
打开
来到首页,点击 admin 登录
默认密码是 admin
登录成功后页面如下
点击选择主题(图片试了下不行)
左边点击下载主题
可以看到这里要咱上传文件
下载一个轻量主题包
链接
https://github.com/billcreswell/miniport
先编码一下,再通过 PHP 生成一个一句话文件
file_put_contents
是一个用于将数据写入文件的 PHP 函数。它的基本用法是将一个字符串写入指定的文件中,如果文件不存在则创建它。这个函数具有以下语法:
file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] ) : int|false
$filename
是要写入数据的目标文件名。$data
是要写入的数据,可以是字符串、数组或者通过fopen
返回的文件指针。$flags
是一个可选参数,用来指定如何打开文件。默认为 0,意味着文件将以覆盖模式打开。
$context
是一个可选的资源句柄,通常由stream_context_create()
创建。
压缩为 ZIP 文件后上传
返回选择 Oldstyle 保存
保存成功
连接成功!!!
成功拿到 flag