Skip to main content
Sliver is an open-source C2 framework from BishopFox. It supports multiple transport protocols, in-memory execution via BOFs and .NET assemblies, and built-in pivoting, making it a full replacement for commercial C2 frameworks in most engagement scenarios.

Core Concepts

C2 server vs implant: The Sliver server runs on your attacker machine and exposes listener ports. The implant runs on the target and calls back to those listeners. You interact with implants through the Sliver console. Beacon vs Session: A beacon checks in at a configurable interval, receives queued tasks, executes them, then goes back to sleep. A session holds a persistent interactive connection. Beacons are far stealthier and preferred for real engagements. Sessions are useful for quick interactive work or when running extensions with persistent global state. Implant naming: Sliver auto-assigns a random two-word name to each implant (e.g. WARM_LUMBERMAN). This is how you reference the implant in use, sessions, and beacons commands. Task-based execution: In beacon mode, commands are queued on the server and not executed until the beacon checks in. Use tasks to see pending and completed tasks; tasks fetch <id> to retrieve output.

Listeners

Stage Listener

Generating Implants

Beacons are the default. Session implants are available for interactive work. Output format determines EXE, DLL, raw shellcode, or service binary.

Session Management

Recon

File Operations

Loot Management

Files marked with --loot are stored server-side and visible to all operators in the team server.

Shell Access

Use execute for single commands rather than opening a full shell. A full shell is noisier and draws more EDR attention.

Process Operations

Windows Token Manipulation

Windows Registry

Registry commands default to HKCU. Use -H HKLM for HKEY_LOCAL_MACHINE. Add --hostname to target a remote host’s registry over the network.

Pivoting

In-Memory Execution

Sliver provides three commands for running code in-memory without dropping binaries to disk. All three support PPID spoofing to make the sacrificial process appear as a child of a legitimate parent.

execute-assembly

Runs a .NET assembly in a sacrificial process (or in-process) using Donut. Windows only.
Note: Argument length is capped at 256 characters in sacrificial process mode (Donut limitation). Use --in-process to bypass this.

sideload

Loads and executes a shared library (DLL, .so, .dylib) or Windows EXE in a sacrificial process using Donut. Always spawns a new process.

spawndll

Loads and executes a Reflective DLL in a sacrificial process. The DLL must implement a reflective loader (exports ReflectiveLoader by default). Does not use Donut. Windows only.

Armory

Armory is Sliver’s package manager. Packages are aliases that wrap execute-assembly, sideload, or spawndll calls with pre-configured arguments. Nothing touches disk.

Extensions

Extensions are reflective DLLs implementing the Sliver extension API. They run in-process within the implant without spawning a sacrificial process. Install client-side only (~/.sliver-client/extensions/). Use sessions for extensions with global state (e.g., keyloggers): beacons reload the DLL on each call, wiping global state. Sessions cache the loaded extension and maintain state across calls.

BOFs

BOF (Beacon Object File) is a compiled C object that runs inside the beacon process. No binary is dropped to disk, minimal footprint, compatible with Cobalt Strike BOFs.

Persistence

OPSEC Tips

  • Prefer beacons over sessions: persistent connections are trivial to flag in network monitoring
  • Set sleep + jitter to at least 60s base / 30s jitter: flat check-in intervals are easy to detect
  • Use mTLS or HTTPS: plain HTTP is never acceptable on a real engagement
  • Migrate out of your initial shell process immediately (cmd.exe and powershell.exe are heavily monitored by EDR)
  • Good migration targets: explorer.exe, svchost.exe, RuntimeBroker.exe, OneDrive.exe
  • Use --ppid spoofing on execute-assembly, sideload, and spawndll to make sacrificial processes appear user-spawned
  • Run post-ex tools via armory or extensions in-memory rather than uploading and executing from disk
  • For HTTPS listeners, configure a custom C2 profile that mimics real browser traffic (User-Agent, Host header, URI paths)
  • Kill all listeners and sessions at the end of an engagement