grisuno/lazyown/c2-session
Claude Code and agent skill by grisuno/lazyown
- community
Checking that the SKILL.md file is still in the repository.
Operate live malleable C2 sessions against lab targets: headless server lifecycle, agent deploy, command exec, file loot, and emulation. Knows credential rotation, AES key discipline, Python 2.5 agent constraints, and fd hygiene.
Install
npx vskill@latest install grisuno/lazyown/c2-sessionSKILL.md
/c2-session
Run live operations through a malleable C2 session on lab targets. Everything here is non-interactive and loop-routable except the final attach step, which is foreground-terminal only by design.
Lifecycle (in order)
c2_server start never rotates credentials (live agents stay valid). c2_reboot always rotates them and re-syncs every store.
Credentials (single source of truth)
- The RUNNING server's login lives in
.c2_credentials.txt— rewritten
on every managed boot. If login fails, compare it against c2_server status (live_user): different values mean the server was started outside the manager with other creds.
- Lab machine state (user, password, ports, AES snapshot) lives in
sessions/c2_lab.json, never in payload.json.
- The shell adopts the file creds at startup.
c2_exec/c2_lootread
lab auth directly, independent of shell auth state.
AES key discipline
The key is owned by the server (sessions/key.aes while running) and snapshotted to sessions/c2_lab.json on boot. Tooling NEVER generates keys: a rotated key bricks every deployed agent (garbage commands in, HTTP 500 out). After any C2 restart, redeploy agents. Never delete key files under a live server.
Agent constraints (vintage targets)
- The gym runs Python 2.5 with no
sslmodule: the agent speaks plain
HTTP (lab listener, e.g. :8080) and does AES via the openssl CLI.
- Forbidden in agent code:
timeout=kwargs,except...as,
import json, os.closerange (2.6+). Close fds 3..255 manually.
- Agents born in backdoor shells MUST drop inherited fds at startup
(close 3..255, stdin from /dev/null) or they inherit the backdoor LISTEN socket and wedge the target port permanently.
- Single-shot backdoors serve effectively one shell per trigger: one
trigger, one persistent multiplexed session, clean exit on close. Never stack connections; never abandon sessions.
Reading answers
Command outputs land in sessions/<client_id>.records.jsonl (one JSON per line: command, output, user, hostname). wait_record polls it. Loot lands in sessions/uploads/ then staged to sessions/loot/<name>_<client>.txt + manifest.jsonl.
Rate limits
Beacon poll/result routes are limiter-exempt (AES already authenticates); the global 200/hour limit would otherwise 429 agents. Poll at 25s+ regardless, with backoff on failures. The generic error handler no longer masks HTTP codes as 500s.
MCP equivalents
lazyown_apt_chain (full chain), lazyown_atomic_shell (verify-only, never interactive), lazyown_atomic_clean (soft default; hard needs confirm=true). The opencode bridge exposes them as apt_chain, atomic_shell, atomic_clean.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/c2-session/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/grisuno/lazyown/c2-session)