WordPress插件WooCommerce任意文件删除漏洞怎么解决

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任意文件删除漏洞怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

文章标题:WordPress插件WooCommerce任意文件删除漏洞怎么解决,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/21438

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云亿速云认证作者
上一篇 2022年8月30日 下午11:13
下一篇 2022年8月30日 下午11:14

相关推荐

  • 如何分析Haproxy端口复用

    本文作者:Spark(Ms08067内网安全小组成员) 一、概述 Haproxy是一个使用c语言开发的高性能负载均衡代理软件,提供tcp和http的应用程序代理,免费、快速且可靠。类似frp,使用一个配置文件+一个server就可以运行。优点: 大型业务领域应用广泛 支持四层代理(传输层)以及七层代…

    2022年9月10日
    39900
  • mysql如何对列求和

    在mysql中,可以使用SUM()函数来对列求和;SUM()是一个求总和的函数,可以返回指定列值的总和,语法“SELECT SUM(DISTINCT 列名) FROM 表名;”,“DISTINCT”运算符允许计算集合中的不同值;SUM()函数在计算时,会忽略列值为NULL的行。 本教程操作环境:wi…

    2022年9月22日
    92500
  • Python怎么使用sqlite3第三方库读写SQLite数据库

    1 数据概览 学生课程成绩:studentID、name、english、chinese、math,存在一定缺失值 2 任务定义 基于学生课程成绩文件,使用pandas和sqlite3将学生信息输入SQLite数据库,请在完成对应数据库操作后分析学生课程成绩信息,计算各科目平均分并给出总分排名。 3…

    2022年9月21日
    26800
  • cpu是不是显卡

    CPU不是显卡;CPU是中央处理单元,是计算机的运算核心和控制核心,主要是解释计算机指令以及处理计算机软件中的数据,而显卡的全称是显示接口卡,也被称为显示适配器,主要用于承担输出显示图形的任务。 php零基础到就业直播视频课:进入学习 本教程操作环境:windows10系统、DELL G3电脑。 c…

    2022年9月15日
    48700
  • Buhtrap黑客组织最新0day漏洞实例分析

    一直以来Buhtrap组织以其针对俄罗斯的金融机构和企业而闻名。在我们的跟踪过程中,发现并分析了该组织的主要后门以及其他工具。 自2015年底以来,该组织变为以经济利益位目的的网络犯罪组织,其恶意软件出现于东欧和中亚进行间谍活动中。 2019年6月我们名列前茅次发现Buhtrap使用0day攻击作。…

    2022年9月15日
    29400
  • 禁止SpringBoot在项目中使用Tomcat容器的原理是什么

    SpringBoot中的Tomcat容器 SpringBoot可以说是目前热门的Java Web框架了。它将开发者从繁重的xml解救了出来,让开发者在几分钟内就可以创建一个完整的Web服务,极大的提高了开发者的工作效率。Web容器技术是Web项目必不可少的组成部分,因为任Web项目都要借助容器技术来…

    2022年9月19日
    21100
  • 如何使用mediacreationtool重装系统

    根据目前的测试,使用这个方法可以解决的问题包括但不限于: 1.系统组件损坏,部分系统文件缺失; 2.升级到11月更新后Windows 10出现的开始菜单、任务栏图标无法使用的情况; 3.在Windows 10 10565之后的版本使用PowerShell重置命令导致自带应用和应用商店无法使用的情况(…

    2022年9月1日
    25300
  • coreldraw如何编辑文字

    coreldraw编辑文字的方法 1、首先找到你要修改的cdr文件。 2、打开软件,点击文件,打开。 3、在软件的左侧找到文字工具。 4、鼠标放到需要修改的文字上面,进行修改。 5、再次点击上方菜单栏的文件,保存即可。 感谢各位的阅读,以上就是“coreldraw如何编辑文字”的内容了,经过本文的学…

    2022年9月26日
    40300
  • mysql中delete in子查询不走索引问题怎么解决

    问题复现 MySQL版本是5.7,假设当前有两张表account和old_account,表结构如下: CREATE TABLE `old_account` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键Id’, `name` varchar(2…

    2022年9月10日
    44500
  • mysql的concat()函数如何用

    在mysql中,concat()函数用于将两个或多个字符串拼接成一个字符串并返回,语法为“CONCAT(string1,string2, … );”;该函数需要至少一个参数,否则会引起错误。concat()函数在拼接之前会将所有参数转换为字符串类型;如果任何参数为NULL,则CONCAT…

    2022年9月21日
    22600
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部