Cobalt Strike HVNC | TinyNuke替代方案 | 使用C++编写

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/WKL-Sec/HiddenDesktop

Hidden Desktop BOF

Hidden Desktop(通常称为HVNC)是一种工具,允许操作员在用户不知情的情况下与远程桌面会话交互。VNC协议没有涉及,但结果是类似的体验。这个Cobalt Strike BOF实现是作为TinyNuke/forks的替代方案而创建的,后者是用C++编写的。

Hidden Desktop有四个组件:

  1. BOF初始化程序:负责将HVNC代码注入到Beacon进程中的小程序。

  2. HVNC shellcode:TinyNuke HVNC的PIC实现。

  3. 服务器和操作员UI:服务器监听来自HVNC shellcode的连接,以及允许操作员与远程桌面交互的UI。目前仅支持Windows。

  4. 应用程序启动器BOFs:一组Beacon Object File,用于在新桌面中执行应用程序。

用法

下载最新版本或使用make进行自行编译。在可以从teamserver访问的Windows机器上启动HVNC服务器。然后可以使用以下命令执行客户端:

HiddenDesktop <server> <port>

您应该在服务器机器上看到一个新的空白窗口。默认情况下,BOF不执行任何应用程序。您可以使用应用程序启动器BOFs在新桌面上执行常见程序:

hd-launch-edge
hd-launch-explorer
hd-launch-run
hd-launch-cmd
hd-launch-chrome

您还可以使用鼠标和键盘通过文件浏览器启动程序。可以使用以下命令执行其他应用程序:

hd-launch <command> [args]

DEMO

 

 

实现细节

  1. Aggressor脚本生成随机的管道和桌面名称。这些名称作为参数传递给BOF初始化程序。桌面名称在执行时存储在CS首选项中,并由应用程序启动器BOFs使用。使用rportfwd将HVNC流量转发回team server。状态更新通过命名管道发送回Beacon。
  2. BOF初始化程序首先解析所需的模块和函数。解析来自Aggressor脚本的参数。将包含参数和函数地址的结构体指针传递给HVNC shellcode中的InputHandler函数。它使用BeaconInjectProcess执行shellcode,这意味着行为可以在Malleable C2配置文件或进程注入BOFs中进行自定义。您可以修改Hidden Desktop以针对远程进程,但目前不支持此功能。这样做是为了使BOF退出,而HVNC shellcode可以继续运行。
  3. InputHandler为Beacon创建一个新的命名管道进行连接。建立连接后,将打开(OpenDesktopA)或创建(CreateDesktopA)指定桌面。通过反向端口转发(rportfwd)建立一个新的套接字到HVNC服务器。输入处理程序为下面描述的DesktopHandler函数创建一个新的线程。该线程将从HVNC服务器接收鼠标和键盘输入,并将其转发到桌面。
  4. DesktopHandler通过反向端口转发建立另一个套接字连接到HVNC服务器。该线程将监视窗口的变化并将其转发到HVNC服务器。

兼容性

HiddenDesktop BOF在以下Windows版本/架构上使用example.profile进行测试:

  • Windows Server 2022 x64
  • Windows Server 2016 x64
  • Windows Server 2012 R2 x64
  • Windows Server 2008 x86
  • Windows 7 SP1 x64

已知问题

  • 开始菜单不可用。

致谢

 

标签:工具分享, cobaltstrike系列