3

JenI's Blog

 2 years ago
source link: https://blog.jenisec.org/security/wpcentral-privilege-escalation.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

JenI's Blog

前言

wpCentral是WordPress的一个插件,用于简化WordPress站点管理。管理员通过将自己的多个WordPress站点添加到wpCentral,可以实现在单一面板内集中管理所有WordPress网站。近日,wpCentral 被发现存在管理员认证凭据泄露的问题,任何登录了 WordPress 的普通用户都可以借由泄露的认证凭据将自身权限提升为管理员。

漏洞分析

为了在目标站点和管理面板之间提供连接,wpCentral 会生成一个 128 位的随机授权密钥 wpcentral_auth_key,这个密钥用作对用户请求进行身份验证、授权。通常来说,这类密钥应该由管理员严加保管,但是 wpCentral 却将其作为插件使用方法中的一部分插入到了管理员页脚中:

wpCentral-Privilege Escalation-1

wpCentral 插件被启用之后,会通过 add_action 将指定函数连接到某个动作,用于实现插件的功能。其中,管理员页脚(admin_footer)在加载时调用了 wpc_modal_dialog 方法:

wpCentral-Privilege Escalation-2

wpc_modal_dialog 方法用于展示 wpCentral 仪表盘的使用步骤。该方法内部将 html 代码与 wpc_get_connection_key 方法获取的连接密钥拼接后,作为管理员页脚的一部分输出在页面上。也就是说,任何可以加载管理员页脚的页面都会展示出 wpCentral 插件的连接密钥。

在 wordpress 中,只要当前页面为管理页面,即使是普通用户的管理页面,管理员页脚也会被加载,它并不会验证登录用户是否为管理员。这意味着任何一个登录用户都有权查看管理员的页脚内容:

wpCentral-Privilege Escalation-3

wpCentral 还定义了自动登录的方法,如果攻击者拿到了 auth_key,可以直接以授权用户的身份登录管理页面:

wpCentral-Privilege Escalation-4

当用户处于未登录状态时,会进入 else 代码块。这里注册了 AJAX 操作,调用 my_wpc_signon 方法完成自动登录:

wpCentral-Privilege Escalation-5

my_wpc_signon 内部首先进行了认证,认证逻辑如下:

wpCentral-Privilege Escalation-6

这里判断了请求中 auth_key 是否为空、是否和 wpCentral 生成的随机授权密钥相同,如果不满足条件,则退出脚本,即认证失败。如果满足条件,则会以数据库中用户 "1" 的身份登录:

wpCentral-Privilege Escalation-7

用户 "1" 是网站搭建时创建的第一个用户,一般为网站的管理员用户。使用正确的授权密钥发起格式正确的请求后,就可以直接以管理员身份登录后台。

漏洞复现

注册一个用户,注册成功后登录后台管理页面:

wpCentral-Privilege Escalation-8

查看网页源代码,找到页脚部分,复制泄露的 wpCentral Connection Key:

wpCentral-Privilege Escalation-9

注销掉当前用户,接着访问 /wp-admin/admin-ajax.php?action=my_wpc_signon&auth_key= 页面,auth_key 值为刚刚复制的 wpCentral Connection Key:

wpCentral-Privilege Escalation-10

成功以管理员的身份登录了后台管理页面:

wpCentral-Privilege Escalation-11

登录后台之后就可以自由发挥了。WordPress 后台的防御并不严格,有多种方法可以 GetShell,这里提供几种

WordPress 后台 Getshell 几种方法

  • 编辑主题文件
wpCentral-Privilege Escalation-12

连接地址:

/wp-content/themes/主题名/修改的文件
  • 编辑插件文件
wpCentral-Privilege Escalation-13

连接地址:

/wp-content/plugins/插件名/修改的文件

如果知道修改的插件文件在哪里被加载,地址也可以换成加载插件的文件地址,以上图为例的话,连接地址为:

/wp-admin/index.php
  • 作为主题文件上传

将木马文件添加到任意一个主题压缩包内

wpCentral-Privilege Escalation-14

连接地址:

/wordpress/wp-content/themes/主题名/木马名
  • 作为插件文件上传

​将木马文件添加到任意一个插件压缩包内

wpCentral-Privilege Escalation-15

连接地址:

/wordpress/wp-content/plugins/插件名/木马名

参考

https://www.wordfence.com/blog/2020/02/vulnerability-in-wpcentral-plugin-leads-to-privilege-escalation/


作者:   JenI   转载请注明出处,谢谢


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK