WordPress The Plus Addons for Elementor插件身份验证绕过漏洞复现分析
0x01 漏洞描述
The Plus Addons for Elementor是Elementor Page Builder最大和最具创新性的Elementor插件,在WordPress应用上广泛使用。由于该插件配置不当,攻击者可以绕过身份验证注册为管理员用户或以已经存在的管理员用户身份进行登录。
影响范围: The Plus Addons for Elementor <= 4.1.6
0x02 环境搭建
找了一下插件,wordpress商店上的是免费版本,版本号对不上公告的,同时wordfence的公告中也证明免费版本不存在这个问题,搜了一下找到专业版 4.1.4的
先搭建wordpress,我这里用的是windows+phpstudy,直接下载wordpress安装 (https://wordpress.org/latest.zip)
上传 The Plus Addons for Elementor 插件离线安装,插件安装成功后会提示缺少Elementor,安装之后还会说缺少 The Plus Addons for Elementor Page Builder Lite,继续在线安装。(需要kexue上网)
安装完成后无任何提示,完整插件如下图:
无提示安装了,环境就算搭建成功了。
0x03 漏洞分析
解压插件压缩包,根据漏洞描述,攻击者可以注册管理员用户或者以已经存在的管理员用户身份登陆,想必是与注册登陆接口有关
全局搜索register 搜到theplus_google_ajax_register方法
看到1125行代码,这里用了get_user_by函数,虽然传入的是email,但方法的作用是根据登陆相关的来获取用户数据,字段field的值限定为了login,所以这里是根据登陆名来获取,不要因为传入了email参数而被误导了。(后续测试发现部分版本这里确实是邮箱)
代码往下走,如果获取到了用户数据,则设置用户cookie,所以只需要知道已存在的登陆名即可登陆任意用户
如果查不到,看到1137行,直接注册一个新的用户,跟入theplus_ajax_register_use函数
根据传入的数据,插入一个新的用户,账号名、密码等均可控,并且如果传入了tp_user_reg_role参数,则更新用户为指定的角色权限,并且返回新用户登陆后的cookie。
代码分析完,接下来构造请求,回到方法头部,看到方法挂载到wp_ajax_nopriv_theplus_google_ajax_register 钩子上。
这个钩子是wordpress 的ajax钩子,钩子命名形如“wp_ajax_nopriv_[action]”和“wp_ajax_[action]”,前端向“/wp-admin/admin-ajax.php” 发送请求,后端根据action来处理数据
0x04 漏洞复现
任意用户登陆,传入系统中存在的登录名,成功获取cookie
创建一个新的管理员用户,返回了新用户的cookie
使用新创建的用户登录,成功登录