GoExec – Windows 远程执行多功能工具
GoExec 是一种针对在 Windows 设备上实现远程执行的新方法。它实现了许多尚未广泛应用的执行方式,并在整体上提供了显著的操作安全(OPSEC)改进。https://github.com/FalconOpsLLC/goexec
安装
使用 Go 构建和安装
要从源代码构建此项目,您需要 Go 版本 1.23 或更高版本,以及 64 位目标架构。有关管理 Go 安装的更多信息,请参阅 Go 官方文档。
bash复制编辑# 安装 goexec
go install -ldflags="-s -w" github.com/FalconOpsLLC/goexec@latest
手动安装
对于预发布功能,请获取最新提交并手动构建。
bash复制编辑# (Linux)从源代码手动安装 GoExec
# 获取源代码
git clone https://github.com/FalconOpsLLC/goexec
cd goexec
# 构建 goexec(Go >= 1.23)
CGO_ENABLED=0 go build -ldflags="-s -w"
# (可选)将 goexec 安装到 /usr/local/bin/goexec
sudo install ./goexec /usr/local/bin
使用 Docker 安装
我们提供了一个 Dockerfile,用于在 Docker 容器中构建和运行 GoExec。
bash复制编辑# (Linux)安装 GoExec Docker 镜像
# 获取源代码
git clone https://github.com/FalconOpsLLC/goexec
cd goexec
# 构建 goexec 镜像
docker build . --tag goexec --network host
# 通过 Docker 容器运行 goexec
alias goexec='docker run -it --rm --name goexec goexec'
goexec -h # 显示帮助菜单
从发布版本安装
您也可以下载适用于 64 位 Windows、macOS 或 Linux 的最新发布版本。
使用方法
GoExec 由用于每个远程服务的模块组成(例如 wmi
、scmr
等),以及每个模块中的特定方法(例如 wmi proc
、scmr change
等)。
bash复制编辑用法:
goexec [命令] [选项]
执行命令:
dcom 使用分布式组件对象模型(MS-DCOM)执行
wmi 使用 Windows 管理规范(MS-WMI)执行
scmr 使用服务控制管理器远程(MS-SCMR)执行
tsch 使用 Windows 任务计划程序(MS-TSCH)执行
附加命令:
help 关于任何命令的帮助
completion 为指定的 shell 生成自动补全脚本
日志记录:
-D, --debug 启用调试日志记录
-O, --log-file 文件 将 JSON 日志输出写入文件
-j, --json 以 JSON 行格式写入日志输出
-q, --quiet 禁用信息日志记录
身份验证:
-u, --user 用户@域 用户名('user@domain'、'domain\user'、'domain/user' 或 'user')
-p, --password 字符串 密码
-H, --nt-hash 哈希 NT 哈希('NT'、':NT' 或 'LM:NT')
--aes-key 十六进制键 Kerberos AES 十六进制密钥
--pfx 文件 客户端证书和私钥作为 PFX 文件
--pfx-password 字符串 PFX 文件的密码
--ccache 文件 Kerberos CCache 文件名(默认为 $KRB5CCNAME,目前未设置)
--dc 字符串 域控制器
-k, --kerberos 使用 Kerberos 身份验证
使用 "goexec [命令] --help" 获取有关某个命令的更多信息。
获取远程进程输出
尽管由于操作安全考虑,不建议在实时参与或受监控的环境中使用,但我们包含了通过 SMB 文件传输获取程序输出的可选功能,使用 -o
选项。使用此选项将使用 cmd.exe /c ... > \Windows\Temp\RANDOM
包装提供的命令,其中 RANDOM
是一个随机的 GUID,然后通过 SMB 文件传输获取输出文件。
WMI 模块(wmi
)
wmi
模块使用远程 Windows 管理规范(WMI)来生成进程(wmi proc
),或手动调用方法(wmi call
)。
bash复制编辑用法:
goexec wmi [命令] [选项]
可用命令:
proc 启动 Windows 进程
call 执行指定的 WMI 方法
网络:
-x, --proxy URI 代理 URI
-F, --epm-filter 字符串 用于过滤 RPC 端点映射器(EPM)返回的端点的字符串绑定
--endpoint 字符串 显式 RPC 端点定义
--no-epm 不使用 EPM 自动检测 RPC 端点
--no-sign 禁用 DCERPC 消息签名
--no-seal 禁用 DCERPC 消息的加密
进程创建方法(wmi proc
)
proc
方法创建 Win32_Process
WMI 类的实例,然后调用 Create
方法以使用提供的参数生成进程。
bash复制编辑用法:
goexec wmi proc [目标] [选项]
执行:
-e, --exec 字符串 要调用的远程 Windows 可执行文件
-a, --args 字符串 进程命令行参数
-c, --command 字符串 Windows 进程命令行(可执行文件和参数)
-o, --out 字符串 将执行输出获取到文件或 "-" 表示标准输出
-m, --out-method 字符串 获取执行输出的方法(默认 "smb")
--no-delete-out 保留远程文件系统上的输出文件
-d, --directory 字符串 工作目录(默认 "C:\")
示例
bash复制编辑# 运行一个不带参数的可执行文件
./goexec wmi proc "$target" \
-u "$auth_user" \
-p "$auth_pass" \
-e 'C:\Windows\Temp\Beacon.exe'
# 使用 NT 哈希进行身份验证,从 `cmd.exe /c whoami /all` 获取输出
./goexec wmi proc "$target" \
-u "$auth_user" \
-H "$auth_nt" \
-e 'cmd.exe' \
-a '/C whoami /all' \
-o- # 将输出获取到标准输出
(辅助)调用方法(wmi call
)
call
方法使操作员可以完全控制 WMI 方法调用。您可以使用 PowerShell 的 Get-CimClass 列出 Windows 上的可用类和方法。
bash复制编辑用法:
goexec wmi call [目标] [选项]
WMI:
-n, --namespace 字符串 WMI 命名空间(默认 "//./root/cimv2")
-C, --class 字符串 要实例化的 WMI 类(例如 "Win32_Process")
-m, --method 字符串 要调用的 WMI 方法(例如 "Create")
-A, --args 字符串 WMI 方法参数,以 JSON 字典格式表示(例如 {"Command":"calc.exe"})(默认 "{}")
示例
bash复制编辑# 调用 StdRegProv.EnumKey - 枚举 HKLM\SYSTEM 的注册表子项
./goexec wmi call "$target" \
-u "$auth_user" \
-p "$auth_pass" \
-C 'StdRegProv' \
-m 'EnumKey' \
-A '{"sSubKeyName":"SYSTEM"}'
工具下载地址:
https://github.com/FalconOpsLLC/goexec
暂无评论内容