WordPress插件WooCommerce任意文件删除漏洞怎么解决
技术细节
WordPress的权限处理机制主要是通过给不同角色提供不同的功能来实现的,当商铺管理员角色被定义之后,它便会给这个角色分配edit_users功能,这样他们就可以直接管理商铺的客户账号了。整个权限分配过程发生在插件插件饿的安装过程当中。woocommerce/includes/class-wc-install.php:
//Shop manager role.add_role( 'shop_manager', // Internal name of the new role 'Shop manager', // The label for displaying array( // Capabilities ⋮ 'read_private_posts' => true, 'edit_users' => true, 'edit_posts' => true, ⋮ ));
角色权限信息会以WordPress核心设置存储在数据库中,这也就意味着用户角色现在已经独立于插件了,即使插件不启用,也不会影响到相关的角色权限。
当一名通过身份验证的用户尝试修改其他用户信息时,便会调用current_user_can()函数,然后确保只有特权用户可以执行这种操作。current_user_can()函数调用样例:
$target_user_id= $_GET['target_user_id'];if(current_user_can('edit_user',$target_user_id)) { edit_user($target_user_id);}
调用的验证逻辑如下:这个用户想使用$target_user_id这个ID来修改特定的用户,他是否有权限执行?
默认配置下,edit_users功能允许有权限的用户(例如商铺管理员)来编辑其他用户,甚至是管理员用户,然后执行类似密码更新这样的操作。出于安全因素考虑,WooCommerce需要指定商铺管理员是否能够编辑用户,因此,插件需要增加meta权限功能。Meta功能可以被current_user_can()调用。默认行为下函数返回的值为true,但meta权限函数返回的值可以决定当前用户是否可以执行这样的操作。下面给出的是WooCommerce meta权限过滤器的抽象函数代码:
function disallow_editing_of_admins( $capability, $target_user_id ) { // If the user is an admin return false anddisallow the action if($capability == "edit_user"&& user_is_admin($target_user_id)) { return false; } else { return true; }}add_filter('map_meta_cap', 'disallow_editing_of_admins');
比如说,当current_user_can(‘edit_user’, 1)被调用时,过滤器将会判断ID为1 ($target_user_id)的用户是否是管理员,并根据结果来决定是否允许用户操作。
商铺管理员禁用插件
默认情况下,只有管理员可以禁用插件。但是这个漏洞允许商铺管理员删除服务器上的任意可写文件,所以我们我们额可以通过删除WooCommerce的主文件-woocommerce.php来禁止WordPress加载该插件。
这个文件删除漏洞存在于WooCommerce的日志记录功能中,日志会以.log文件的形式存储在wp-content目录中。当商铺管理员想要删除日志文件时,他需要以GET参数来提交文件名。下面显示的代码段就是存在漏洞的部分:
woocommerce/includes/admin/class-wc-admin-status.php
class WC_Admin_Status{ public static function remove_log() { ⋮ $log_handler = newWC_Log_Handler_File(); $log_handler->remove(wp_unslash($_REQUEST['handle']));}
woocommerce/includes/log-handlers/class-wc-log-handler-file.php
class WC_Log_Handler_File extends WC_Log_Handler{ public function remove($handle) { ⋮ $file = trailingslashit(WC_LOG_DIR) .$handle; ⋮unlink($file);
这里的问题就在于,文件名($handle)会被添加到日志目录(wp-content/wc-logs/)后,然后传递给unlink()函数。在设置“$handle../../plugins/woocommerce-3.4.5/woocommerce.php”时,文件wp-content/wc-logs/../../plugins/woocommerce-3.4.5/woocommerce.php将会被删除,并导致WooCommerce被禁用。
以上是WordPress插件WooCommerce任意文件删除漏洞怎么解决的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP和Flutter是移动端开发的流行技术。Flutter胜在跨平台能力、性能和用户界面,适合需要高性能、跨平台和自定义UI的应用程序。PHP则适用于性能较低、不跨平台的服务器端应用程序。

通过编辑 style.css 文件,您可以轻松修改 WordPress 页面宽度:编辑 style.css 文件,添加 .site-content { max-width: [您的首选宽度]; }。修改 [您的首选宽度] 以设置页面宽度。保存更改并清除缓存(可选)。

WordPress 文章存储在 /wp-content/uploads 文件夹中。该文件夹使用子文件夹对不同类型的上传进行分类,包括按年、月和文章 ID 组织的文章。文章文件以纯文本格式 (.txt) 存储,文件名通常包含其 ID 和标题。

在 WordPress 中创建产品页面:1. 创建产品(名称、描述、图片);2. 自定义页面模板(添加标题、描述、图片、按钮);3. 输入产品信息(库存、尺寸、重量);4. 创建变体(不同颜色、尺寸);5. 设置可见性(公开或隐藏);6. 启用/禁用评论;7. 预览并发布页面。

WordPress 模板文件位于 /wp-content/themes/[主题名称]/ 目录。它们用于决定网站的外观和功能,包括页眉(header.php)、页脚(footer.php)、主模板(index.php)、单个文章(single.php)、页面(page.php)、存档(archive.php)、类别(category.php)、标签(tag.php)、搜索(search.php)和 404 错误页面(404.php)。通过编辑和修改这些文件,可以自定义 WordPress 网站的外

在 WordPress 中搜索作者:1. 登录管理面板后,导航到“文章”或“页面”,使用搜索栏输入作者姓名,在“过滤器”中选择“作者”。2. 其他技巧:使用通配符扩大搜索范围,使用运算符组合条件,或输入作者 ID 以搜索文章。

最稳定的 WordPress 版本是最新版本,因为它包含最新的安全补丁、增强性能并引入新特性和改进。为了更新到最新版本,请登录 WordPress 仪表盘,转到“更新”页面并单击“立即更新”。

WordPress需要备案。根据我国《互联网安全管理办法》,在境内提供互联网信息服务的网站需向所在地省级互联网信息办公室备案,包括WordPress在内。备案流程包括选择服务商、准备信息、提交申请、审核公示、获取备案号等步骤。备案好处有合法合规、提升可信度、满足接入要求、确保正常访问等。备案信息需真实有效,备案后需定期更新。
