C
The C agent (Cpire) is an experimental native agent for Empire, modeled after the Go agent (Gopire). It compiles into a standalone binary and supports Windows and Linux targets via cross-compilation. Currently, the C agent supports the HTTP listener only.
The C agent is only available in the Sponsors version of Empire.
Prerequisites
To compile the C agent, the following are required:
A C compiler (GCC or MinGW for cross-compilation)
OpenSSL development libraries
For Windows targets:
x86_64-w64-mingw32-gcc(MinGW-w64 toolchain)
Compilation and Setup
The C agent is compiled server-side via the CCompiler class. When generating a stager through the multi/c_exe stager, the server handles compilation automatically using the configured compiler.
Stager Options
Listener
Listener to use (required)
-
CC
C compiler override
x86_64-w64-mingw32-gcc (Windows) or gcc (Linux)
CFLAGS
Extra compiler flags
-
TargetOS
Target OS: windows or linux
windows
Manual Compilation (Outside Empire)
Features
Cross-platform: Supports Windows and Linux targets.
Native binary: Compiles to a standalone executable with no runtime dependencies (statically linked on Windows).
Full staging: DH key exchange with Ed25519 certificate verification, AES-CBC encrypt-then-HMAC session keys, and ChaCha20-Poly1305 routing packets.
Encrypted comms: HTTP/HTTPS via WinHTTP (Windows) or libcurl (Linux).
Task execution: Shell commands, PowerShell, C#/.NET assembly loading, and BOF (Beacon Object File) execution.
File operations: File download (chunked), upload, and JSON directory listing.
Agent controls: Delay/jitter, kill date, working hours, and lost-limit enforcement.
OPSEC: No debug output in production builds. Debug logging available via
-DCPIRE_DEBUGcompile flag.HTTP listener support: Only supports the HTTP listener for communication.
Supported Tasks
1
SYSINFO
Collect system information
2
EXIT
Terminate the agent
10/12
SET/GET_DELAY
Set or query delay and jitter
30/31
SET/GET_KILLDATE
Set or query kill date
32/33
SET/GET_WORKING_HOURS
Set or query working hours
40
SHELL
Execute a shell command
41
DOWNLOAD
Download a file from target (chunked)
42
UPLOAD
Upload a file to target
43
DIR_LIST
List directory contents (JSON)
100
POWERSHELL
Execute PowerShell script (wait for output)
101
POWERSHELL_CMD_WAIT
Execute PowerShell with save-file prefix
102
POWERSHELL_CMD_JOB
Execute PowerShell (background)
120
CSHARP_CMD_WAIT
Load and execute .NET assembly
121
CSHARP_CMD_WAIT (save)
Load .NET assembly with save-file prefix
122
CSHARP_CMD_JOB
Load .NET assembly (background)
123
CSHARP_CMD_JOB (save)
Load .NET assembly background with save-file
130
BOF_CMD_WAIT
Execute Beacon Object File
Security
The CCompiler class validates compiler flags and compiler binaries against an allowlist to prevent command injection during server-side compilation. The agent zeros all cryptographic key material using OPENSSL_cleanse before freeing memory to prevent forensic recovery.
Last updated
Was this helpful?