
네이티브 Nim WinRM 셸로, NTLM, Kerberos, 파일 전송, 인메모리 헬퍼 및 AD/OPSEC 보고를 지원합니다.
Nim으로 작성된 네이티브 WinRM 셸 클라이언트
버전 1.2.0 · 작성자 Chokri Hammedi (blue0x1) · 라이선스 MIT
nimrm은 본인이 소유하거나 명시적으로 접근 권한을 부여받은 시스템에 대한 합법적인 관리, 보안 테스트 및 연구를 목적으로 합니다. 작성자는 이 도구의 오용이나 이로 인한 손해에 대해 책임지지 않습니다.
nimrm은 실용적인 인증, 명령 실행, 전송 및 보고 도우미를 갖춘 간결하고 빠른 WinRM 셸을 제공합니다. Nim 패키지 의존성 없이 네이티브 Nim 바이너리로 빌드됩니다.
| 영역 | 지원 |
|---|---|
| 인증 | NTLM 비밀번호, NTLM 해시, KRB5CCNAME을 통한 Kerberos |
| WinRM 전송 | HTTP, HTTPS/TLS, 사용자 지정 포트 |
| 셸 | 대화형 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에 접근 가능해야 함 |
Nimble:
nimble install nimrm
최신 릴리스 다운로드:
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.2.0_amd64.deb https://github.com/blue0x1/nimrm/releases/latest/download/nimrm_1.2.0_amd64.deb
sudo dpkg -i nimrm_1.2.0_amd64.deb
BlackArch:
sudo pacman -S nimrm
BlackArch PKGBUILD는 최신 업스트림 git 커밋을 추적하므로, 새 릴리스는 다음 시스템 업데이트 시 BlackArch 사용자에게 전달됩니다. nimrm이 이미 설치되어 있다면 다음 명령으로 업그레이드하세요:
sudo pacman -Syu nimrm
소스에서 빌드:
git clone https://github.com/blue0x1/nimrm.git
cd nimrm
make linux
make linux
make ssl
make windows
Windows 대상은 dist/windows/nimrm.exe에 SSL을 지원하는 자체 포함 실행 파일 하나를 빌드합니다. 런처는 Nim으로 작성되었으며 생성된 WinRM 코어와 vendor/windows-runtime/의 필수 런타임 DLL을 내장하고, 실행 시 임시 런타임 디렉터리에 추출한 다음 동일한 인수로 코어를 실행합니다. 이는 --tls / --ssl을 전달하지 않는 한 일반 HTTP WinRM을 지원하며, TLS가 활성화되면 HTTPS WinRM을 지원합니다. 내장된 OpenSSL 런타임은 다음을 사용합니다:
libssl-3-x64.dll
libcrypto-3-x64.dll
Kerberos 모드(-k / --kerb)는 Windows에서 지연 로드되므로 Kerberos를 사용하지 않을 때도 실행 파일이 시작될 수 있습니다. Windows 빌드는 Kerberos 모드에서 사용하는 MIT Kerberos/GSSAPI 런타임을 내장합니다.
수동 빌드:
nim c -d:release --opt:speed -o:nimrm nimrm.nim
nimrm은 네이티브 Nim 바이너리, 지속적인 WinRM 런스페이스, 청크 전송 로직, 간결한 진행률 렌더링을 사용하여 빠른 속도를 유지하도록 설계되었습니다.
| 작업 | 구현 |
|---|---|
| 업로드 | 대용량 봉투에 대한 적응형 재시도를 사용하는 청크 단위 Base64 쓰기 |
| 다운로드 | 진행률 추적과 소형 파일용 고속 경로를 갖춘 스트리밍 Base64 청크 |
| 원격 세션 릴레이 | 파일을 로컬 디스크에 쓰지 않고 컨트롤러 메모리를 통해 한 WinRM 세션에서 읽어 다른 세션에 쓰기 |
| 디렉터리 전송 | 동일한 청크 전송 경로를 사용하는 재귀 파일 열거 |
| 명령 실행 | 명령마다 재연결하지 않고 활성 WinRM 셸/런스페이스 재사용 |
NTLM 비밀번호:
./nimrm -T 192.168.1.10 -A 'CORP\administrator' -P 'Password123'
NTLM pass-the-hash:
./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
HTTP를 통한 NTLM 메시지 암호화 강제:
./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'
TLS 인증서 검증 건너뛰기(자체 서명 인증서):
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --tls --insecure
| 옵션 | 설명 |
|---|---|
-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 인증 사용 |
-c, --command | 명령 하나를 실행하고 종료 |
--tls | HTTPS/TLS 사용 |
--insecure | TLS 인증서 검증 건너뛰기 |
-h, --help | 도움말 표시 |
| 명령어 | 설명 |
|---|---|
/help | 도움말 표시 |
exit, quit | 셸 종료 |
!<cmd> | cmd.exe를 통해 실행 |
upload <local> [remote] | 파일 하나 업로드 |
download <remote> [local] | 파일 하나 다운로드 |
rupload <remote> <session> [dest] | 활성 세션의 원격 파일을 메모리를 통해 다른 세션으로 복사 |
rdownload <session> <remote> [dest] | 다른 세션의 원격 파일을 메모리를 통해 활성 세션으로 복사 |
rupload-dir <remote> <session> [dest] | 활성 세션의 원격 디렉터리를 메모리를 통해 다른 세션으로 복사 |
rdownload-dir <session> <remote> [dest] | 다른 세션의 원격 디렉터리를 메모리를 통해 활성 세션으로 복사 |
upload-dir <local> [remote] | 디렉터리 업로드 |
download-dir <remote> [local] | 디렉터리 다운로드 |
invoke-script <ps1> [args] | 메모리에서 로컬 PowerShell 가져오기 |
execute-assembly <exe> [args] | 메모리에서 관리형 .NET 실행 |
ad-info | AD/도메인 컨텍스트 표시 |
opsec-check | 로깅 및 감사 상태 표시 |
sessions | 모든 활성 세션 나열 |
session <opts> | 새 세션 생성 |
use <name|id> | 세션으로 전환 |
kill <name|id> | 세션을 닫고 제거 |
nimrm은 여러 동시 WinRM 세션을 지원합니다. 셸을 벗어나지 않고 서로 다른 호스트와 사용자 사이를 피벗할 수 있습니다.
기존 세션 내부에서 새 세션 생성:
PS C:\Users\Administrator> session -T 10.0.0.5 -A 'CORP\user2' -P 'Pass123'
PS C:\Users\Administrator> session -T dc02.corp.local -A [email protected] -N aad3b435:0123456789abcdef -n dc02
PS C:\Users\Administrator> session -T dc03.corp.local -k -Z CORP.LOCAL -n dc03
활성 세션 나열:
PS C:\Users\Administrator> sessions
ID Name Target User Auth
-- ---- ------ ---- ----
* 1 session-1 dc01.corp.local:5985 administrator Kerberos
2 session-2 10.0.0.5:5985 user2 NTLM
3 dc02 dc02.corp.local:5985 user NTLM
세션 간 전환:
[session-2] PS C:\Users\user2> use 1
[*] Switched to session: session-1 (dc01.corp.local:5985)
[session-1] PS C:\Users\Administrator> use dc02
[*] Switched to session: dc02 (dc02.corp.local:5985)
세션 닫기:
[dc02] PS C:\Users\user> kill 2
[*] Killed session: session-2
활성 세션 간 파일 복사: