Skip to content

vermarjun/CipherC2-Frontend

Repository files navigation

CipherC2 — Frontend

Browser-based operator console for the CipherC2 platform. Gives a team of operators a shared, persistent view into a live Sliver C2 engagement — sessions, beacons, victims, post-exploitation primitives, implant generation, initial access tooling — without touching the Sliver CLI.

The frontend is one interface into the CipherC2 API. An MCP server is another. Both operate against the same REST layer and the same MongoDB-backed operational state.


Dashboard


Sessions & Beacons

Live session enumeration reconciled against the MongoDB session store, so full history — including dead implants — is always visible regardless of whether the Sliver server has restarted. Each session row shows transport, OS, remote address, first contact, and last check-in. Active and dead sessions are separated by liveness state derived from the backend reconciliation diff.

ActiveSessions

DeadSessions

Clicking into a session opens the full detail view — OS, architecture, PID, UID, GID, file path, reconnect interval, burned flag, and a live ifconfig from the interactive session handle — with direct access to every post-exploitation primitive from the same view.

SystemControl


Victims

The victims view groups all sessions by SHA-256 device fingerprint (hostname + username + UID), giving operators a per-device history across multiple implant sessions on the same host — rather than a flat list of disconnected session IDs.

VictimDevices

VictimDevice


Operations

Implant Generation

GeneratePanel constructs the full ImplantConfig payload — OS, architecture, output format (EXE, shellcode, DLL, service), C2 URLs, transport, beacon interval and jitter, reconnect interval, evasion flags — and POSTs it to the backend, which calls client.generate_implant() over gRPC and streams the compiled binary back for immediate download. Implant metadata is catalogued in MongoDB and accessible from the implant detail view.

GenerateImplant

Listeners & Jobs

ListenersPanel starts and terminates HTTP, HTTPS, DNS, TCP, mTLS, and WireGuard listeners. JobsList shows all active Sliver jobs with status.

Operations


Post-Exploitation

All post-exploitation primitives are dispatched through an interactive_session handle, opened by calling client.interact_session(session_id) on the backend. Each is a standalone component in the session detail view.

Screenshot capture — raw PNG piped directly from the Sliver implant channel, no additional process spawned on the target.

ScreenShot

File system browser — remote directory traversal with file download. DeviceFileUploads handles staging files back to the compromised host, with per-device SQLite-backed sync state tracking transitions from pending → uploaded → synced.

VictimFileSystem

Network connections — active TCP/UDP connections enumerated with PID attribution (IPv4 and IPv6).

Network_configuration

Command execution — dispatches to cmd.exe /c <command> or directly executes a binary path on the target, with stdout/stderr returned.

Execute_a_command_on_victim_machine

Additional primitives in the session view: ProcessList (full process enumeration with PID/PPID/owner), Rev2Self (drop impersonation tokens), PingSession (liveness check), PivotListeners (pivot configuration), Windows registry enumeration and query.


Initial Access

Payload generation for the pre-exploitation phase. HTA stager generation (VBScript embedded in an HTML Application file) and steganographic ZIP delivery using a custom magic byte sequence.

HTA_Zip_Smuggling


Armoury

Tool catalog with download support. Planned expansion: tool staging through the file sync pipeline so operators can push tools directly to compromised hosts, with LLM-assisted selection based on session context (privilege level, process list, OS).

Armoury


AI Integration — MCP Layer

The frontend is one way to operate CipherC2. The other, explored in parallel, was wiring an LLM directly into the same REST API through a custom MCP server. With the MCP layer active, an agent can query live and historical sessions, pull process and network data from a specific host, generate implants, and read operator audit logs — all through the same endpoints the UI calls.

The planned expansion includes a CVE database with vector embeddings: opening a session would automatically trigger a semantic search against OS version, running processes, and open ports to surface relevant vulnerabilities inline in the session detail view — without leaving the console.

Full AI roadmap: C2-Control-Panel — AI Integration


Architecture

State management

Three React Context providers handle orthogonal concerns:

DashboardContext — owns all operational data: sessions, beacons, operators, jobs, Sliver connection state. Uses a ref-based client-side cache (5-minute TTL) to avoid redundant API calls across tab switches. Runs four independent polling intervals on mount: sessions, jobs, and beacons every 30s; operators every 60s; Sliver connection health check every 30s. forceRefresh() invalidates specific cache keys on demand.

AuthContext — JWT lifecycle: login, logout, token persistence in localStorage, user state.

UserActivityContext — writes operator-side telemetry (page visits, active time) to the backend on navigation events, feeding the per-operator SIEM data stored in MongoDB.

API layer

Single Axios instance in api.js with two interceptors. Request interceptor injects Authorization: Bearer <token> from localStorage on every call. Response interceptor handles 401 by clearing the token and redirecting to /login, so token expiry is transparent to every component without per-route error handling.

Routing

React Router 7, route-per-view. Every dashboard tab, session detail, device view, file explorer, implant detail, and operator activity dashboard is a separate route. All protected routes gate on AuthContext user state via ProtectedRoute.


Stack

Framework React 19 + Vite 6
Styling Tailwind CSS 4
Routing React Router 7
HTTP Axios with request/response interceptors
Maps Leaflet + React-Leaflet (GeoIP visualization)
Animation Framer Motion
Icons Lucide React
UI Material UI (MUI Lab)
Date handling date-fns

Setup

Prerequisites

Install

git clone https://github.com/vermarjun/CipherC2-Frontend.git
cd CipherC2-Frontend
npm install
cp example.env .env
# Set VITE_API_URL to your backend address

Run

npm run dev        # development
npm run build      # production build → dist/

Docker

Two-stage build — Vite build in Node, served by Nginx. The included nginx.conf handles SPA routing (all paths fall back to index.html).

docker build -t cipherc2-frontend .
docker run -p 80:80 cipherc2-frontend

Project Structure

src/
├── pages/
│   ├── Login.jsx
│   └── dashboard/
│       ├── SessionsTab.jsx          # Live/dead session list
│       ├── BeaconsTab.jsx
│       ├── VictimsTab.jsx           # Device-correlated host history
│       ├── OperatorsTab.jsx
│       ├── OperationsTab.jsx        # Listeners, jobs, implant generation
│       ├── AccessTab.jsx            # Initial access payload generation
│       ├── ArmouryTab.jsx
│       └── UserActivityDashboard.jsx
├── components/
│   ├── SessionDetail.jsx            # Post-ex dispatch hub
│   ├── DeviceDetailView.jsx         # Per-device session history by fingerprint
│   ├── DeviceFileUploads.jsx        # File staging with SQLite sync state
│   ├── GeneratePanel.jsx            # ImplantConfig builder + binary download
│   ├── ListenersPanel.jsx
│   ├── ProcessList.jsx
│   ├── NetworkConnections.jsx
│   ├── Filesystem.jsx
│   ├── Screenshotcapture.jsx
│   ├── Rev2Self.jsx
│   ├── PingSession.jsx
│   ├── PivotListeners.jsx
│   ├── ImplantDetail.jsx
│   ├── UserActivityDashboard.jsx
│   ├── OperatorActivityDashboard/
│   ├── Access/
│   │   ├── InitialAccessVectors.jsx
│   │   ├── Loaders.jsx
│   │   └── Reference.jsx
│   └── Armoury/
│       ├── ToolList.jsx
│       └── ToolCard.jsx
├── context/
│   ├── AuthContext.jsx              # JWT state
│   ├── DashboardContext.jsx         # Operational data, 5-min cache, polling
│   └── UserActivityContext.jsx      # Operator telemetry writes
├── config.js                        # VITE_API_URL resolution
├── api.js                           # Axios instance + auth interceptors
└── App.jsx                          # Route tree + ProtectedRoute

Related

  • C2-Control-Panel — the FastAPI backend, MCP layer, and full technical design

Disclaimer

For authorized security testing only. Use exclusively on infrastructure you own or have explicit written permission to test.


Built by Arjun Verma

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages