blue0x1/nimrm
GitHub: blue0x1/nimrm
基于 Nim 编写的原生 WinRM 远程 shell 客户端,支持 NTLM/Kerberos 认证、文件传输与内存执行,适用于 Windows 域环境下的安全测试与红队行动。
Stars: 0 | Forks: 0
nimrm
使用 Nim 编写的原生 WinRM shell 客户端
版本 1.0.0 · 作者 Chokri Hammedi (blue0x1) · 许可证 MIT
## 法律声明
`nimrm` 旨在用于合法管理、安全测试以及针对您拥有或已获得明确授权访问的系统的研究。作者不对因使用该工具不当或造成的损害承担责任。
## 目录
- [概述](#overview)
- [功能](#features)
- [要求](#requirements)
- [安装](#installation)
- [构建](#build)
- [性能](#performance)
- [使用方法](#usage)
- [选项](#options)
- [交互式命令](#interactive-commands)
- [示例](#examples)
- [备注](#notes)
- [许可证](#license)
## 概述
`nimrm` 提供了一个紧凑且快速的 WinRM shell,具备实用的身份验证、命令执行、传输和报告辅助功能。它作为原生 Nim 二进制文件构建,没有额外的 Nim 包依赖。
## 功能
| 领域 | 支持 |
| --- | --- |
| 身份验证 | NTLM 密码,NTLM 哈希,通过 `KRB5CCNAME` 的 Kerberos |
| WinRM 传输 | HTTP,HTTPS/TLS,自定义端口 |
| Shell | 交互式 PowerShell,CMD 前缀,单次命令模式 |
| 传输 | 文件上传/下载,递归目录传输 |
| 内存执行 | PowerShell 脚本导入,托管 .NET 程序集执行 |
| 报告 | AD/域上下文,日志记录和审核状态 |
| 可靠性 | Kerberos 消息封装,传输重置/重试处理 |
## 要求
| 组件 | 要求 |
| --- | --- |
| 构建 | Nim `>= 1.6.0` |
| Kerberos | Linux 上的 `libgssapi_krb5.so.2` 或 macOS 上的 `libgssapi_krb5.dylib` |
| TLS 构建 | OpenSSL 和 `-d:ssl` |
| 目标 | WinRM 可在选定端口上访问 |
## 安装
下载最新版本:
```
curl -L -o nimrm https://github.com/blue0x1/nimrm/releases/latest/download/nimrm
chmod +x nimrm
```
Windows 发布二进制文件:
```
Invoke-WebRequest -Uri https://github.com/blue0x1/nimrm/releases/latest/download/nimrm.exe -OutFile nimrm.exe
```
Debian 软件包:
```
curl -L -o nimrm_1.0.0_amd64.deb https://github.com/blue0x1/nimrm/releases/latest/download/nimrm_1.0.0_amd64.deb
sudo dpkg -i nimrm_1.0.0_amd64.deb
```
从源码构建:
```
git clone https://github.com/blue0x1/nimrm.git
cd nimrm
make linux
```
## 构建
```
make linux
```
```
make ssl
```
```
make windows
```
手动构建:
```
nim c -d:release --opt:speed -o:nimrm nimrm.nim
```
## 性能
`nimrm` 旨在通过使用原生 Nim 二进制文件、持久的 WinRM 运行空间、分块传输逻辑和紧凑的进度渲染来保持快速。
| 操作 | 实现 |
| --- | --- |
| 上传 | 分块 Base64 写入,在大型信封上具有自适应重试 |
| 下载 | 带进度跟踪的流式 Base64 块 |
| 目录传输 | 使用相同分块传输路径的递归文件枚举 |
| 命令执行 | 重用活动的 WinRM shell/运行空间,而不是按命令重新连接 |
## 使用方法
NTLM 密码:
```
./nimrm -T 192.168.1.10 -A 'CORP\administrator' -P 'Password123'
```
NTLM 哈希传递:
```
./nimrm -T 192.168.1.10 -A 'CORP\user' -N aad3b435b51404eeaad3b435b51404ee:0123456789abcdef0123456789abcdef
```
Kerberos:
```
KRB5CCNAME=FILE:/tmp/user.ccache ./nimrm -k -T dc01.corp.local -Z CORP.LOCAL
```
强制 NTLM 消息加密通过 HTTP:
```
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --seal
```
自定义端口:
```
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -p 5985
```
单次命令:
```
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -c 'whoami'
```
## 选项
| 选项 | 描述 |
| --- | --- |
| `-T`, `--target` | 目标 IP 或主机名 |
| `-A`, `--account` | 用户名:`user`,`user@domain`,或 `DOMAIN\user` |
| `-P`, `--secret` | NTLM 密码 |
| `-p`, `--port` | WinRM 端口 |
| `-N`, `--nt-proof` | NT 哈希或 `LM:NT` 哈希 |
| `-Z`, `--krb-zone` | Kerberos 领域覆盖 |
| `-K`, `--kerb-spn` | Kerberos SPN 覆盖 |
| `-k`, `--kerb` | 使用 Kerberos 身份验证 |
| `--message-encryption` | NTLM HTTP 消息加密:`auto`,`always`,或 `never` |
| `--seal` | `--message-encryption always` 的别名 |
| `-c`, `--command` | 执行一条命令后退出 |
| `--tls` | 使用 HTTPS/TLS |
| `-h`, `--help` | 显示帮助 |
## 交互式命令
| 命令 | 描述 |
| --- | --- |
| `/help` | 显示帮助 |
| `exit`, `quit` | 关闭 shell |
| `!标签:Active Directory, HTTP, IPv6, IP 地址批量处理, Kerberos认证, Nim语言, NTLM认证, OpenCanary, OPSEC, osquery, Plaso, PowerShell, Raspberry Pi, WinRM, 二进制发布, 内存执行, 多人体追踪, 安全测试, 安全测试工具, 开源工具, 攻击性安全, 文件传输, 横向移动, 编程规范, 网络信息收集, 运维安全, 远程命令执行, 远程管理