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有四个组件:
-
BOF初始化程序:负责将HVNC代码注入到Beacon进程中的小程序。
-
HVNC shellcode:TinyNuke HVNC的PIC实现。
-
服务器和操作员UI:服务器监听来自HVNC shellcode的连接,以及允许操作员与远程桌面交互的UI。目前仅支持Windows。
-
应用程序启动器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
实现细节
- Aggressor脚本生成随机的管道和桌面名称。这些名称作为参数传递给BOF初始化程序。桌面名称在执行时存储在CS首选项中,并由应用程序启动器BOFs使用。使用
rportfwd将HVNC流量转发回team server。状态更新通过命名管道发送回Beacon。 - BOF初始化程序首先解析所需的模块和函数。解析来自Aggressor脚本的参数。将包含参数和函数地址的结构体指针传递给HVNC shellcode中的
InputHandler函数。它使用BeaconInjectProcess执行shellcode,这意味着行为可以在Malleable C2配置文件或进程注入BOFs中进行自定义。您可以修改Hidden Desktop以针对远程进程,但目前不支持此功能。这样做是为了使BOF退出,而HVNC shellcode可以继续运行。 InputHandler为Beacon创建一个新的命名管道进行连接。建立连接后,将打开(OpenDesktopA)或创建(CreateDesktopA)指定桌面。通过反向端口转发(rportfwd)建立一个新的套接字到HVNC服务器。输入处理程序为下面描述的DesktopHandler函数创建一个新的线程。该线程将从HVNC服务器接收鼠标和键盘输入,并将其转发到桌面。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
已知问题
- 开始菜单不可用。
致谢
- 主要基于TinyNuke
- 包含Meltedd/HVNC的改进/修复
- 使用SecIdiot/netntlm的Beacon作业接口和项目结构。
标签:工具分享, cobaltstrike系列