概述
2024年12月10日,漏洞研究员古河发现了两个LDAP漏洞:一个是远程代码执行(RCE)漏洞,另一个是影响所有DC的拒绝服务(DoS)/信息泄露漏洞。这些漏洞被作为最新的“补丁星期二”(Patch Tuesday)更新的一部分,发布在微软安全响应中心(MSRC)的网站上。RCE漏洞被分配为CVE-2024-49112,CVSS严重性评分为9.8分(满分10分);DoS漏洞被分配为CVE-2024-49113。
CVE-2024-49113被命名为“Windows Lightweight Directory Access Protocol(LDAP)拒绝服务漏洞”。LDAP是Microsoft Active Directory中工作站和服务器用来访问和维护目录服务信息的协议。此漏洞名称表明问题可能与LDAP相关代码有关
POC验证
有团队开发了一个针对CVE-2024-49113的概念验证(PoC)漏洞利用工具,可以在无需任何先决条件的情况下,通过网络连接导致任何未打补丁的Windows服务器(不仅限于DC)崩溃。
攻击流程
-
下载poc:
git clone https://github.com/SafeBreach-Labs/CVE-2024-49113.git
-
安装依赖项:
确保安装了所有必需的 Python 包。您可以使用pip提供的requirements.txt文件安装它们:
pip install -r requirements.txt
-
配置
target_ip:目标机器的IP地址。
port:RPC 通信的 TCP 端口(默认值:49664)。
listen_port:漏洞服务器监听的 UDP 端口(默认值:389)。如果不更改,则需要以管理员或 root 权限运行该工具
domain_name:攻击者在互联网上拥有的域名。此域名下必须有两个 DNS SRV 记录。(SRV 记录将一个域名映射到一个端口和另一个域名):
_ldap._tcp.dc._msdcs。- domain_name>listen_port attacker's machine hostname
_ldap._tcp.默认第一个站点名称._sites.dc._msdcs。- domain_name>listen_port attacker's machine hostname
注意 -attacker's machine hostname假设受害服务器可以使用 NBNS 通过其主机名找到攻击者机器,则此方法可行。此值可以替换为互联网上的域名,而不是攻击者的主机名,该域名指向利用此漏洞的恶意 LDAP 服务器的 IP。
account:账户名参数(默认:Administrator)。
site_name:站点名称参数(默认:空字符串)。
工作原理:
-
攻击者向受害者服务器发送DCE/RPC请求。
-
受害者服务器被触发发送关于
SafeBreachLabs.pro
的DNS SRV查询。 -
攻击者的DNS服务器返回攻击者主机名及其LDAP端口。
-
受害者服务器发送广播NBNS请求以查找攻击者主机名的IP地址。
-
攻击者通过NBNS响应返回其IP地址。
-
受害者作为LDAP客户端向攻击者的机器发送CLDAP请求。
-
攻击者发送一个带有特定值的CLDAP引用响应数据包,导致LSASS进程崩溃并迫使受害者服务器重启。
这一攻击向量可能被利用以实现远程代码执行(RCE)。除最后一步的CLDAP数据包需修改外,其余流程基本相同。
深度解析
根据微软在MSRC页面的描述:
-
如何利用此漏洞?
-
成功利用此漏洞的远程未经身份验证的攻击者将能够在 LDAP 服务的上下文中执行任意代码。但是,成功的利用取决于针对的组件。。
-
在利用 LDAP 服务器的域控制器的上下文中,要成功,攻击者必须向目标发送特制的 RPC 调用以触发对攻击者域的查找才能成功。
-
在利用 LDAP 客户端应用程序的背景下,要想成功,攻击者必须说服或诱骗受害者执行攻击者域的域控制器查找或连接到恶意 LDAP 服务器。但是,未经身份验证的 RPC 调用不会成功。
-
基于这些信息,做出以下假设:
-
攻击者不需要身份验证。
-
该漏洞是一种整数溢出类型,源自可执行文件或实现 LDAP 客户端逻辑的动态链接库 (DLL)。
-
我们可以利用 RPC 调用来影响 DC 以查询攻击者控制的 LDAP 服务器。
-
在 DC 上下文中,漏洞可能位于 lsass.exe 或其加载的 DLL 之一中,因为 lsass.exe 在 DC 上实现 LDAP 服务
此外,Artur Marzano(@MacmodSec)在X平台上提出的意见表明,该漏洞补丁可能位于wldap32.dll
。
这个见解与 MSRC 网站上的文档完全吻合,因为 wldap32.dll 实现了 LDAP 客户端的逻辑。
触发远程LDAP请求
我们首先证明针对 DC 的第一步利用 — 影响它以查询我们控制的 LDAP 服务器。我们需要找到源自 lsass.exe 本身或加载到 lsass.exe 中的 DLL 中的 RPC 调用,该调用从 wldap32.dll 导入函数。使用 RpcView,我们列出了加载到 lsass.exe 中的可用 RPC 接口:
在这些 RPC 接口中,我们仅列出了依赖于 wldap32.dll 并使用其导出函数的 DLL 中的接口。我们正在寻找不需要身份验证的 RPC 接口,因为我们假设攻击者不需要进行身份验证。我们发现两个有趣的接口提供了几个有趣的 RPC 调用,这些调用似乎与 LDAP 查询有关,并且可能触发一个查询,它们位于 lsasrv.dll 和 netlogon.dll 中:
使用 IDA,我们从下往上搜索主动使用从 wldap32.dll 导入的函数之一的 RPC 调用。经过长时间的搜索,我们找到了 DsrGetDcNameEx2。
这个函数看起来非常有前途。除了验证特定帐户是否存在之外,它还会主动检索域控制器的主机名。域名和帐户均由调用者指定。这意味着,如果该函数使用 LDAP 来实现其目的,那么我们就得到了所需的东西。
接下来,我们需要了解 DsrGetDcNameEx2 的每个参数以及我们将为它们设置的值:
函数签名及作用
NET_API_STATUS DsrGetDcNameEx2(
[in, unique, string] LOGONSRV_HANDLE ComputerName,
[in, unique, string] wchar_t* AccountName,
[in] ULONG AllowableAccountControlBits,
[in, unique, string] wchar_t* DomainName,
[in, unique] GUID* DomainGuid,
[in, unique, string] wchar_t* SiteName,
[in] ULONG Flags,
[out] PDOMAIN_CONTROLLER_INFOW* DomainControllerInfo
);
功能
DsrGetDcNameEx2
用于查找特定域中的域控制器 (Domain Controller, DC)。域控制器是 Windows 域中用于用户身份验证和目录服务的服务器。
此函数会根据输入的域名、站点名等条件查找合适的域控制器信息,并返回相关信
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)