前言
wpCentral是WordPress的一个插件,用于简化WordPress站点管理。管理员通过将自己的多个WordPress站点添加到wpCentral,可以实现在单一面板内集中管理所有WordPress网站。近日,wpCentral 被发现存在管理员认证凭据泄露的问题,任何登录了 WordPress 的普通用户都可以借由泄露的认证凭据将自身权限提升为管理员。
漏洞分析
为了在目标站点和管理面板之间提供连接,wpCentral 会生成一个 128 位的随机授权密钥 wpcentral_auth_key,这个密钥用作对用户请求进行身份验证、授权。通常来说,这类密钥应该由管理员严加保管,但是 wpCentral 却将其作为插件使用方法中的一部分插入到了管理员页脚中:
wpCentral 插件被启用之后,会通过 add_action 将指定函数连接到某个动作,用于实现插件的功能。其中,管理员页脚(admin_footer)在加载时调用了 wpc_modal_dialog 方法:
wpc_modal_dialog 方法用于展示 wpCentral 仪表盘的使用步骤。该方法内部将 html 代码与 wpc_get_connection_key 方法获取的连接密钥拼接后,作为管理员页脚的一部分输出在页面上。也就是说,任何可以加载管理员页脚的页面都会展示出 wpCentral 插件的连接密钥。
在 wordpress 中,只要当前页面为管理页面,即使是普通用户的管理页面,管理员页脚也会被加载,它并不会验证登录用户是否为管理员。这意味着任何一个登录用户都有权查看管理员的页脚内容:
wpCentral 还定义了自动登录的方法,如果攻击者拿到了 auth_key,可以直接以授权用户的身份登录管理页面:
当用户处于未登录状态时,会进入 else 代码块。这里注册了 AJAX 操作,调用 my_wpc_signon 方法完成自动登录:
my_wpc_signon 内部首先进行了认证,认证逻辑如下:
这里判断了请求中 auth_key 是否为空、是否和 wpCentral 生成的随机授权密钥相同,如果不满足条件,则退出脚本,即认证失败。如果满足条件,则会以数据库中用户 "1" 的身份登录:
用户 "1" 是网站搭建时创建的第一个用户,一般为网站的管理员用户。使用正确的授权密钥发起格式正确的请求后,就可以直接以管理员身份登录后台。
漏洞复现
注册一个用户,注册成功后登录后台管理页面:
查看网页源代码,找到页脚部分,复制泄露的 wpCentral Connection Key:
注销掉当前用户,接着访问 /wp-admin/admin-ajax.php?action=my_wpc_signon&auth_key= 页面,auth_key 值为刚刚复制的 wpCentral Connection Key:
成功以管理员的身份登录了后台管理页面:
登录后台之后就可以自由发挥了。WordPress 后台的防御并不严格,有多种方法可以 GetShell,这里提供几种
WordPress 后台 Getshell 几种方法
- 编辑主题文件
连接地址:
/wp-content/themes/主题名/修改的文件
- 编辑插件文件
连接地址:
/wp-content/plugins/插件名/修改的文件
如果知道修改的插件文件在哪里被加载,地址也可以换成加载插件的文件地址,以上图为例的话,连接地址为:
/wp-admin/index.php
- 作为主题文件上传
将木马文件添加到任意一个主题压缩包内
连接地址:
/wordpress/wp-content/themes/主题名/木马名
- 作为插件文件上传
将木马文件添加到任意一个插件压缩包内
连接地址:
/wordpress/wp-content/plugins/插件名/木马名
参考
作者: JenI 转载请注明出处,谢谢
Comments !