CVE-2024-49113漏洞分析

2025-01-21 2 0

概述

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)崩溃。
CVE-2024-49113漏洞分析插图

攻击流程

  1. 下载poc:

git clone https://github.com/SafeBreach-Labs/CVE-2024-49113.git
  1. 安装依赖项:

确保安装了所有必需的 Python 包。您可以使用pip提供的requirements.txt文件安装它们:

pip install -r requirements.txt
  1. 配置
    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:站点名称参数(默认:空字符串)。

工作原理:

  1. 攻击者向受害者服务器发送DCE/RPC请求。

  2. 受害者服务器被触发发送关于SafeBreachLabs.pro的DNS SRV查询。

  3. 攻击者的DNS服务器返回攻击者主机名及其LDAP端口。

  4. 受害者服务器发送广播NBNS请求以查找攻击者主机名的IP地址。

  5. 攻击者通过NBNS响应返回其IP地址。

  6. 受害者作为LDAP客户端向攻击者的机器发送CLDAP请求。

  7. 攻击者发送一个带有特定值的CLDAP引用响应数据包,导致LSASS进程崩溃并迫使受害者服务器重启。

CVE-2024-49113漏洞分析插图1

这一攻击向量可能被利用以实现远程代码执行(RCE)。除最后一步的CLDAP数据包需修改外,其余流程基本相同。

深度解析

根据微软在MSRC页面的描述:

  • 如何利用此漏洞?

    • 成功利用此漏洞的远程未经身份验证的攻击者将能够在 LDAP 服务的上下文中执行任意代码。但是,成功的利用取决于针对的组件。。

    • 在利用 LDAP 服务器的域控制器的上下文中,要成功,攻击者必须向目标发送特制的 RPC 调用以触发对攻击者域的查找才能成功。

    • 在利用 LDAP 客户端应用程序的背景下,要想成功,攻击者必须说服或诱骗受害者执行攻击者域的域控制器查找或连接到恶意 LDAP 服务器。但是,未经身份验证的 RPC 调用不会成功。

基于这些信息,做出以下假设:

  1. 攻击者不需要身份验证。

  2. 该漏洞是一种整数溢出类型,源自可执行文件或实现 LDAP 客户端逻辑的动态链接库 (DLL)。

  3. 我们可以利用 RPC 调用来影响 DC 以查询攻击者控制的 LDAP 服务器。

  4. 在 DC 上下文中,漏洞可能位于 lsass.exe 或其加载的 DLL 之一中,因为 lsass.exe 在 DC 上实现 LDAP 服务

此外,Artur Marzano(@MacmodSec)在X平台上提出的意见表明,该漏洞补丁可能位于wldap32.dll

CVE-2024-49113漏洞分析插图2
这个见解与 MSRC 网站上的文档完全吻合,因为 wldap32.dll 实现了 LDAP 客户端的逻辑。

触发远程LDAP请求

我们首先证明针对 DC 的第一步利用 — 影响它以查询我们控制的 LDAP 服务器。我们需要找到源自 lsass.exe 本身或加载到 lsass.exe 中的 DLL 中的 RPC 调用,该调用从 wldap32.dll 导入函数。使用 RpcView,我们列出了加载到 lsass.exe 中的可用 RPC 接口:
CVE-2024-49113漏洞分析插图3

在这些 RPC 接口中,我们仅列出了依赖于 wldap32.dll 并使用其导出函数的 DLL 中的接口。我们正在寻找不需要身份验证的 RPC 接口,因为我们假设攻击者不需要进行身份验证。我们发现两个有趣的接口提供了几个有趣的 RPC 调用,这些调用似乎与 LDAP 查询有关,并且可能触发一个查询,它们位于 lsasrv.dll 和 netlogon.dll 中:
CVE-2024-49113漏洞分析插图4
CVE-2024-49113漏洞分析插图5

使用 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(#换成@)

相关文章

Hannibal:一款基于C的x64 Windows代理
SuperdEye:一款基于纯Go实现的间接系统调用执行工具
分享Fastjson反序列化漏洞原理+漏洞复现+实战案例+POC收集
Vanir:一款基于基于源代码的静态分析工具
NativeBypassCredGuard:一款基于NTAPI的Credential Guard安全测试工具
如何使用MaskerLogger防止敏感数据发生泄露

发布评论