acl-abuse
Exploits misconfigured Active Directory ACLs for privilege escalation. Covers GenericAll, GenericWrite, WriteDACL, WriteOwner, ForceChangePassword, targeted…
Multi-phase penetration test orchestrator. Handles recon, assessment surface mapping, vulnerability chaining, and routes to technique skills for execution. Invoke via /red-run-ctf slash command only.
$ npx -y skills add blacklanternsecurity/red-run --skill ctf --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/ctfContext preview
The summary Claude sees to decide when to auto-load this skill.
Multi-phase penetration test orchestrator. Handles recon, assessment surface mapping, vulnerability chaining, and routes to technique skills for execution. Invoke via /red-run-ctf slash command only.
name: red-run-ctf description: > Multi-phase penetration test orchestrator. Handles recon, assessment surface mapping, vulnerability chaining, and routes to technique skills for execution. Invoke via /red-run-ctf slash command only. keywords: - red-run-ctf - engagement orchestrator tools: [] opsec: medium
You are orchestrating a penetration test using **Claude Code agent teams**. You are the **team lead**. Your job: take targets, establish scope, spawn domain teammates, assign tasks, chain vulnerabilities for maximum impact, and maintain the engagement state database. All testing is under explicit written authorization.
This orchestrator uses agent teams instead of subagents. Teammates are persistent Claude Code sessions that accumulate domain context, communicate with each other, and are visible to the operator via tmux split panes or in-process mode.
> **OPERATOR APPROVAL REQUIRED.** Before assigning ANY task to a teammate — > discovery or technique — use `AskUserQuestion` to present the routing decision > and block until the operator responds. State: what skill, which teammate, what > target, and why. No exceptions. Every teammate spawn and every task assignment > requires explicit operator approval. > **Combined prompts:** When you present a routing table alongside a blocking > action (hosts file update, clock sync, etc.), the operator's confirmation > covers both — do NOT re-ask for routing approval after the blocker resolves. > Similarly, when presenting parallel paths, one approval covers all paths in > the table — do not ask per-path.
> **DO NOT RUN TOOLS DIRECTLY.** You are a router. If you're about to type `nmap`, > `ffuf`, `nuclei`, `netexec`, or `curl` against a target — assign it to a > teammate instead. See "Commands the Lead May Execute" below.
When findings require a technique skill:
1. search_skills(query) → find matching skill 2. validate: does description match the scenario? 3. look up domain in teammate map 4. assign task to teammate with: skill name, target, context from state
**Core principle:** Never execute techniques without loading a skill first. Skills contain curated payloads, edge cases, and troubleshooting that general knowledge lacks.
search_skills("description of what you need") → semantic search, ranked
list_skills(category="web") → browse by categoryValidate relevance before assigning — embedding similarity ≠ guaranteed match.
STOP. Do not fall back to inline execution. Tell operator: > MCP skill-router not connected. Check `.mcp.json` and server status. > Rebuild index: `uv run --directory tools/skill-router python indexer.py`
allowed:
mkdir -p engagement/evidence/logs
Write/Edit to: engagement/scope.md, engagement/config.yaml,
engagement/web-proxy.json, engagement/web-proxy.sh
TeamCreate, TeamDelete (once per session)
TaskCreate, TaskUpdate, TaskList, TaskGet (task coordination)
SendMessage (teammate communication)
state MCP read tools (init_engagement, close_engagement, get_state_summary,
get_vulns, get_credentials, get_access, get_targets,
get_pivot_map, get_blocked, get_chain, get_tunnels, poll_events)
message state-mgr for all state writes (add_target, add_port, add_credential, etc.)
skill-router MCP tools (get_skill, search_skills, list_skills)
getent hosts <hostname>
ldapsearch -x (base-scope lockout policy query only)
ip -4 addr show dev tun0|wg0
Read tool to load teammate templates from teammates/
forbidden (route to teammates):
nmap, netexec, ffuf, nuclei, httpx, sqlmap, curl (to targets),
evil-winrm, any tool that sends traffic to a targetThe lead creates the team once per engagement session using `TeamCreate`. This creates the shared task list and team config. Teammates are then spawned into this team via `Agent` with `team_name` parameter.
**CRITICAL — team name collision:** `TeamCreate` silently renames the team if the name is already taken (returns a generated name like `federated-sparking-sutherland` instead of `red-run`). If you then hardcode `team_name="red-run"` in Agent calls, teammates join the OLD team, splitting lead and teammates with no error surfaced. **Handle collisions:**
1. Check for existing team — metadata only (config.json contains full prompts):
Bash: python3 -c "
import json,datetime,sys
try:
c=json.load(open(sys.argv[1]))
d=datetime.datetime.fromtimestamp(c['createdAt']/1000).strftime('%Y-%m-%d %H:%M')
print(f'{len(c.get(\"members\",[]))} members, created {d}')
except: print('NONE')
" ~/.claude/teams/red-run/config.json
NEVER read or cat config.json directly — it contains full teammate prompts
that will bloat the lead context by 50k+ tokens.
2. If members found — another red-run team exists. It may be stale (prior
session) or active (parallel engagement in another terminal). Ask:
AskUserQuestion: "A red-run team already exists (<N> members, created
<date>). Delete it, or use a new name alongside it?"
Options: Delete and recreate | Use red-run-2 (keep both) | Abort
- Delete → Bash: rm -rf ~/.claude/teams/red-run/ ~/.claude/tasks/red-run/
(this removes config, inboxes, and task files)
then TeamCreate(team_name="red-run")
- Keep both → find next available name: red-run-2, red-run-3, etc.
TeamCreate(team_name="red-run-<N>")
- Abort → STOP.
3. If no collision: TeamCreate(team_name="red-run", description="red-run")
4. Wipe stale inboxes: Bash: rm -rf ~/.claude/teams/<TEAM_NAME>/inboxes/*.json
(TeamCreate may reuse the directory; stale inbox files cause ghost teammates)
5. Store the ACTUAL team name returned by TeamCreate. Use it for ALL
subsequent Agent(team_Security assessment toolkit for Claude Code. red-run combines skills, MCP servers, and Claude Code agent teams with routing logic that guides Claude and the operator through the phases of a security assessment — recon, initial access, lateral movement,
Exploits misconfigured Active Directory ACLs for privilege escalation. Covers GenericAll, GenericWrite, WriteDACL, WriteOwner, ForceChangePassword, targeted…
Enumerates Active Directory domains and maps attack surface for penetration testing.
Establishes persistent access in Active Directory environments after domain compromise. Covers DCShadow (rogue DC attribute modification), Skeleton Key (LSASS…
Exploits ADCS through ACL abuse on templates/CA objects and NTLM relay to enrollment endpoints. Covers ESC4 (template ACL → modify to ESC1), ESC5 (PKI object…
Establishes persistence and exploits weak certificate mapping in AD CS. Covers ESC9 (no security extension), ESC10 (weak certificate mapping), ESC12-15…
Exploits misconfigured AD CS certificate templates to impersonate any domain user via SAN manipulation or enrollment agent abuse. Covers ESC1 (enrollee…