601 lines
31 KiB
Markdown
601 lines
31 KiB
Markdown
# Problems
|
||
|
||
## Multiple Options
|
||
|
||
Metasploit currently provides multiple options for configuring target details:
|
||
|
||
- RHOSTS
|
||
- RPORT
|
||
- VHOST
|
||
- TARGETURI
|
||
- SSL
|
||
- USER
|
||
- PASS
|
||
|
||
Configuring this amount of options is cumbersome and time consuming on a per module basis.
|
||
|
||
Although it is is possible to globally setting common values with the `setg` command - and to individually override the ports on a per module basis, it is still an arduous task:
|
||
|
||
```ruby
|
||
setg RHOSTS x.x.x.x
|
||
use module/foo
|
||
set RPORT yyy
|
||
run
|
||
```
|
||
|
||
### Running module against unique targets
|
||
|
||
It is currently verbose when running modules against multiple targets, with independent ports and target paths. This must be done manually:
|
||
|
||
```ruby
|
||
use module/foo
|
||
set RHOST target1
|
||
set TARGETURI /jenkins
|
||
run
|
||
|
||
set RHOST target2
|
||
set TARGETURI /admin/jenkins
|
||
run
|
||
```
|
||
|
||
# Approaches
|
||
|
||
So far there’s three main potential approaches to add URL support to msfconsole:
|
||
|
||
1. **Consolidating Options** - Combining multiple options such as `RHOST`/`RPORT`/`SSL`/etc into one new option: `TARGETS`
|
||
2. **Enriching RHOSTS with URL support** - The RHOST’s option is modified to support URLs, and attempts to keep all options such as RHOST/PORT/SSL etc in sync.
|
||
3. **Support setting a single RHOST_URL** - Metasploit console will now support setting a single `RHOST_URL` value. Note that this wouldn’t show as an option to the user, but would be used as a ‘macro’ to populate the existing datastore values
|
||
|
||
## 1. Consolidating Options
|
||
|
||
Combining the module target options into one would help reduce the amount of steps required to configure a module:
|
||
|
||
```ruby
|
||
set TARGETS https://user:password@target_app:4343
|
||
```
|
||
|
||
When the user views the options for a given module, it will be consolidated. The user will no longer see options such as `RPORT`, `SSL`
|
||
|
||
### Before
|
||
|
||
Multiple options are available for configuring the module options:
|
||
|
||
```ruby
|
||
msf5 exploit(multi/http/tomcat_mgr_upload) > options
|
||
|
||
Module options (exploit/multi/http/tomcat_mgr_upload):
|
||
|
||
Name Current Setting Required Description
|
||
---- --------------- -------- -----------
|
||
HttpPassword no The password for the specified username
|
||
HttpUsername no The username to authenticate as
|
||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||
RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||
RPORT 80 yes The target port (TCP)
|
||
SSL false no Negotiate SSL/TLS for outgoing connections
|
||
TARGETURI /manager yes The URI path of the manager app (/html/upload and /undeploy will be used)
|
||
VHOST no HTTP server virtual host
|
||
|
||
Exploit target:
|
||
|
||
Id Name
|
||
-- ----
|
||
0 Java Universal
|
||
```
|
||
|
||
### After
|
||
|
||
Multiple options are consolidated into a single TARGETS field:
|
||
|
||
```ruby
|
||
msf5 exploit(multi/http/tomcat_mgr_upload) > options
|
||
|
||
Module options (exploit/multi/http/tomcat_mgr_upload):
|
||
|
||
Name Current Setting Required Description
|
||
---- --------------- -------- -----------
|
||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||
RHOST_URLS yes The target host URL(s), or file with syntax 'file:<path>'
|
||
|
||
Exploit target:
|
||
|
||
Id Name
|
||
-- ----
|
||
0 Java Universal
|
||
```
|
||
|
||
**Examples**
|
||
|
||
It is now possible to run an individual module against different hosts, paths, and ports:
|
||
|
||
```ruby
|
||
use exploit/multi/http/jenkins_script_console
|
||
set TARGETS http://target1:9000/jenkins, http://target2:8080/admin/jenkins
|
||
check
|
||
```
|
||
|
||
It is now possible to run an individual module against different hosts, paths, and ports:
|
||
|
||
```ruby
|
||
use auxiliary/scanner/http/title
|
||
set TARGETS https://google.com http://example.com
|
||
run
|
||
```
|
||
|
||
It would still be possible to use IPv4/IPv6/CIDR syntax directly:
|
||
|
||
```ruby
|
||
set TARGETS 192.168.1.5:139
|
||
```
|
||
|
||
However - it is no longer clear how to use CIDR notation and set path information, other than making up a new syntax:
|
||
|
||
```ruby
|
||
set TARGETS https://10.0.0.0/24:8080/some/app
|
||
```
|
||
|
||
**Advantages**
|
||
|
||
- As a user it's now easy to configure one option
|
||
- A single option is less overwhelming to the user when available module options
|
||
- The user can directly copy/paste a URL from their browser into msfconsole to run a check module against
|
||
- A module can now be run against multiple arbitrary targets with independent paths / ports
|
||
- Helps to catch improperly set ports. For instance, setting the `SSL` option to true - but forgetting to update `RPORT` to 443
|
||
- Simple to implement with a known effort
|
||
|
||
**Disadvantages**
|
||
|
||
- The option consolidation breaks the majority of existing module documentation
|
||
- It's no longer clear to use use CIDR notation *and* setting path information, other than making up a new syntax?
|
||
- Breaks the user's existing muscle memory for configuring modules
|
||
- Hard to make a change to a single value, i.e. setting targets then wishing to modify the target URI or port uniformly
|
||
- Lose the ability to easily set a single global `RHOST` value, and set the ports individually on a per module basics
|
||
- We lose the ability to have sane defaults set for options, such as:
|
||
- `TARGETURI = /manager`
|
||
- `RPORT = 139`
|
||
- The modules additionally lose the descriptive metadata for the significance of fields, such as `TARGETURI`:
|
||
|
||
```ruby
|
||
Module options (exploit/multi/http/jenkins_script_console):
|
||
|
||
Name Current Setting Required Description
|
||
---- --------------- -------- -----------
|
||
...
|
||
TARGETURI /jenkins/ yes The path to the Jenkins-CI application
|
||
...
|
||
```
|
||
|
||
## 2. Enriching RHOSTS with URL support
|
||
|
||
The `RHOSTS` field is updated to support a URL formats:
|
||
|
||
```ruby
|
||
set RHOSTS http://target1:9000/jenkins
|
||
```
|
||
|
||
### Before / After
|
||
|
||
The multiple options are still available to the user, there is no change to this behavior:
|
||
|
||
```ruby
|
||
set RHOSTS https://a.site.com/foo
|
||
|
||
Module options (exploit/multi/http/tomcat_mgr_upload):
|
||
|
||
Name Current Setting Required Description
|
||
---- --------------- -------- -----------
|
||
HttpPassword no The password for the specified username
|
||
HttpUsername no The username to authenticate as
|
||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||
RHOSTS https://a.site.com/foo yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||
RPORT 443 yes The target port (TCP)
|
||
SSL true no Negotiate SSL/TLS for outgoing connections
|
||
TARGETURI /foo yes The URI path of the manager app (/html/upload and /undeploy will be used)
|
||
VHOST a.site.com no HTTP server virtual host
|
||
```
|
||
|
||
### Examples
|
||
|
||
The use of RHOSTS continues to be a valid option name:
|
||
|
||
```ruby
|
||
set RHOSTS https://a.site.com/foo
|
||
```
|
||
|
||
The options are now individually updated with corresponding values:
|
||
|
||
```ruby
|
||
set RHOSTS https://a.site.com/foo
|
||
|
||
Module options (exploit/multi/http/tomcat_mgr_upload):
|
||
|
||
Name Current Setting Required Description
|
||
---- --------------- -------- -----------
|
||
HttpPassword no The password for the specified username
|
||
HttpUsername no The username to authenticate as
|
||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||
RHOSTS https://a.site.com/foo yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||
RPORT 443 yes The target port (TCP)
|
||
SSL true no Negotiate SSL/TLS for outgoing connections
|
||
TARGETURI /foo yes The URI path of the manager app (/html/upload and /undeploy will be used)
|
||
VHOST a.site.com no HTTP server virtual host
|
||
|
||
```
|
||
|
||
If the user wishes to update an individual option, the rhost's value will be recomputed:
|
||
|
||
```ruby
|
||
set RHOSTS https://a.site.com/foo
|
||
set TARGETURI /bar
|
||
|
||
Module options (exploit/multi/http/tomcat_mgr_upload):
|
||
|
||
Name Current Setting Required Description
|
||
---- --------------- -------- -----------
|
||
HttpPassword no The password for the specified username
|
||
HttpUsername no The username to authenticate as
|
||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||
RHOSTS https://a.site.com/bar yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||
RPORT 443 yes The target port (TCP)
|
||
SSL true no Negotiate SSL/TLS for outgoing connections
|
||
TARGETURI /bar yes The URI path of the manager app (/html/upload and /undeploy will be used)
|
||
VHOST a.site.com no HTTP server virtual host
|
||
```
|
||
|
||
The user can set multiple RHOSTS, with each option being comma delimited within the options table:
|
||
|
||
```ruby
|
||
set RHOSTS https://a.site.com/foo http://b.site.com/bar
|
||
|
||
Module options (exploit/multi/http/tomcat_mgr_upload):
|
||
|
||
Name Current Setting Required Description
|
||
---- --------------- -------- -----------
|
||
HttpPassword no The password for the specified username
|
||
HttpUsername no The username to authenticate as
|
||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||
RHOSTS https://a.site.com/bar, http://b.site.com/bar yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||
RPORT 443, 80 yes The target port (TCP)
|
||
SSL true, false no Negotiate SSL/TLS for outgoing connections
|
||
TARGETURI /foo, /bar yes The URI path of the manager app (/html/upload and /undeploy will be used)
|
||
VHOST a.site.com, b.site.com no HTTP server virtual host
|
||
```
|
||
|
||
The user can continue to set override individual options uniformly:
|
||
|
||
```ruby
|
||
set RHOSTS https://a.site.com/foo http://b.site.com/bar
|
||
set TARGETURI /new
|
||
|
||
Module options (exploit/multi/http/tomcat_mgr_upload):
|
||
|
||
Name Current Setting Required Description
|
||
---- --------------- -------- -----------
|
||
HttpPassword no The password for the specified username
|
||
HttpUsername no The username to authenticate as
|
||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||
RHOSTS https://a.site.com/new, http://b.site.com/new yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||
RPORT 443, 80 yes The target port (TCP)
|
||
SSL true, false no Negotiate SSL/TLS for outgoing connections
|
||
TARGETURI /new yes The URI path of the manager app (/html/upload and /undeploy will be used)
|
||
VHOST a.site.com, b.site.com no HTTP server virtual host
|
||
```
|
||
|
||
The user can set new path values individually:
|
||
|
||
```ruby
|
||
set RHOSTS https://a.site.com/foo http://b.site.com/bar
|
||
set TARGETURI /abc /xyz
|
||
|
||
Module options (exploit/multi/http/tomcat_mgr_upload):
|
||
|
||
Name Current Setting Required Description
|
||
---- --------------- -------- -----------
|
||
HttpPassword no The password for the specified username
|
||
HttpUsername no The username to authenticate as
|
||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||
RHOSTS https://a.site.com/abc http://b.site.com/xyz yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||
RPORT 443, 80 yes The target port (TCP)
|
||
SSL true, false no Negotiate SSL/TLS for outgoing connections
|
||
TARGETURI /abc, /xyz yes The URI path of the manager app (/html/upload and /undeploy will be used)
|
||
VHOST a.site.com, b.site.com no HTTP server virtual host
|
||
```
|
||
|
||
**Alternatively:** The above scenario is intuitive when used with multiple RHOSTS, however when a single RHOST is used the user may intend for setting TARGETURI to behave differently. In this scenario the user may expect two scans to be ran against the single target:
|
||
|
||
```ruby
|
||
set RHOSTS https://a.site.com/foo
|
||
set TARGETURI /abc /xyz
|
||
|
||
Module options (exploit/multi/http/tomcat_mgr_upload):
|
||
|
||
Name Current Setting Required Description
|
||
---- --------------- -------- -----------
|
||
HttpPassword no The password for the specified username
|
||
HttpUsername no The username to authenticate as
|
||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||
RHOSTS https://a.site.com/abc https://a.site.com/xyz yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||
RPORT 443, 80 yes The target port (TCP)
|
||
SSL true, false no Negotiate SSL/TLS for outgoing connections
|
||
TARGETURI /abc, /xyz yes The URI path of the manager app (/html/upload and /undeploy will be used)
|
||
VHOST a.site.com, a.site.com no HTTP server virtual host
|
||
```
|
||
|
||
It's still possible to use the CIDR range notation, but the support remains closer to the current Metasploit console workflow:
|
||
|
||
```ruby
|
||
set RHOSTS 192.168.100.0/22
|
||
set TARGETURI /tomcat
|
||
set SSL true
|
||
|
||
Module options (exploit/multi/http/tomcat_mgr_upload):
|
||
|
||
Name Current Setting Required Description
|
||
---- --------------- -------- -----------
|
||
HttpPassword no The password for the specified username
|
||
HttpUsername no The username to authenticate as
|
||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||
RHOSTS 192.168.100.0/22 yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||
RPORT 80 yes The target port (TCP)
|
||
SSL true, false no Negotiate SSL/TLS for outgoing connections
|
||
TARGETURI /tomcat yes The URI path of the manager app (/html/upload and /undeploy will be used)
|
||
VHOST no HTTP server virtual host
|
||
```
|
||
|
||
**Advantages**
|
||
|
||
- It's possible to configure the target with one `set` command
|
||
- Backwards compatible
|
||
- The user can directly copy/paste a URL from their browser into msfconsole to run a check module against
|
||
- A module can now be run against multiple arbitrary targets with independent paths / ports
|
||
- Helps to catch improperly set ports. For instance, setting the `SSL` option to true - but forgetting to update `RPORT` to 443
|
||
- The existing metadata/options remains intact for the user to view
|
||
- CIDR notation can continue to be used
|
||
|
||
**Disadvantages**
|
||
|
||
- This is a novel implementation effort. The current design of Metasploit framework's Options/Datastore doesn't support computed / dependent options.
|
||
- More complicated to implement than a single `TARGETS` option
|
||
- The intuition of computed options paired with last write winning might be confusing to users - but this would need to be tested
|
||
|
||
## 3. Support setting a single RHOST_URL
|
||
|
||
Metasploit console will now support setting a single `RHOST_URL` value. Note that this wouldn't show as an option to the user, but would be used as a 'macro' to populate the existing datastore values:
|
||
|
||
```ruby
|
||
set RHOST_URL https://a.site.com/foo
|
||
|
||
Module options (exploit/multi/http/tomcat_mgr_upload):
|
||
|
||
Name Current Setting Required Description
|
||
---- --------------- -------- -----------
|
||
HttpPassword no The password for the specified username
|
||
HttpUsername no The username to authenticate as
|
||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||
RHOSTS a.site.com yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||
RPORT 443 yes The target port (TCP)
|
||
SSL true no Negotiate SSL/TLS for outgoing connections
|
||
TARGETURI /foo yes The URI path of the manager app (/html/upload and /undeploy will be used)
|
||
VHOST a.site.com no HTTP server virtual host
|
||
```
|
||
|
||
After this convenience option has been set, it is now possible to use the normal workflow of msfconsole to set further options:
|
||
|
||
```ruby
|
||
set RURL https://a.site.com/foo
|
||
set TARGETURI /bar
|
||
set SSL FALSE
|
||
set RPORT 80
|
||
|
||
Module options (exploit/multi/http/tomcat_mgr_upload):
|
||
|
||
Name Current Setting Required Description
|
||
---- --------------- -------- -----------
|
||
HttpPassword no The password for the specified username
|
||
HttpUsername no The username to authenticate as
|
||
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
|
||
RHOSTS a.site.com yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
|
||
RPORT 80 yes The target port (TCP)
|
||
SSL true no Negotiate SSL/TLS for outgoing connections
|
||
TARGETURI /bar yes The URI path of the manager app (/html/upload and /undeploy will be used)
|
||
VHOST a.site.com no HTTP server virtual host
|
||
|
||
```
|
||
|
||
Similarly this functionality would set all options of the global store as expected:
|
||
|
||
```ruby
|
||
setg RHOST_URL https://a.site.com/foo
|
||
setg
|
||
|
||
Global
|
||
======
|
||
|
||
Name Value
|
||
---- -----
|
||
RHOST a.site.com
|
||
RPORT 443
|
||
SSL true
|
||
TARGETURI /foo
|
||
VHOST a.site.com
|
||
```
|
||
|
||
**Advantages**
|
||
|
||
- Simpler to reason about as an end user
|
||
- Less complex to implement, and can be built upon the current Options/Datastore implementation with relative ease
|
||
- As a user it's now easy to configure one option
|
||
- The user can directly copy/paste a URL from their browser into msfconsole to run a check module against
|
||
- Helps to catch improperly set ports. For instance, setting the `SSL` option to true - but forgetting to update `RPORT` to 443
|
||
- Backwards compatible
|
||
- The existing metadata/options remains intact for the user to view
|
||
|
||
**Disadvantages**
|
||
|
||
- It is not possible to set multiple multiple targets. However this can still be implemented with resource scripts.
|
||
- Harder to discover, we will have to add extra affordance for this - and make additional noise to help increase the awareness of this new functionality
|
||
- Users may raise issues asking for the next obvious step of multiple targets
|
||
- Future compatibility issues. If we decide implement support for multiple independent targets, there's some baggage introduced in needing to alias RURL to RURLS etc.
|
||
|
||
### Additional considerations
|
||
|
||
- How likely are individuals to actually scan against completely arbitrary endpoints with independent ports etc in the real world?
|
||
- There will be no changes to the `SSL_VERSION` option as part of this effort
|
||
- When setting multiple targets, is a comma delimited string `", "` to separate targets the best approach? It's technically possible that copied URLs from the browser *potentially* contain this substring. Additional affordance may need to be added to ensure commas without a trailing whitespace is notified as being a potential issue.
|
||
- The naming of `TARGETURI` is unintuitive, perhaps it could be renamed to `RPATH`
|
||
- The chosen implementation should ensure file support is not broken
|
||
- [https://github.com/rapid7/metasploit-framework/pull/11497](https://github.com/rapid7/metasploit-framework/pull/11497)
|
||
- Consistency across module types, and external modules, will have to be ensured:
|
||
- [https://github.com/rapid7/metasploit-framework/issues/13061](https://github.com/rapid7/metasploit-framework/issues/13061)
|
||
- Will database modules be impacted by this change? It is currently unclear.
|
||
- Postgres natively supports [connection strings](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING) and the notation is not novel `postgres://{user}:{password}@{hostname}:{port}/{database-name}`
|
||
- Will FTP modules be impacted by this change? It is currently unclear.
|
||
- FTP URL syntax is described in RFC 1738, taking the form: `ftp://[user[:password]@]host[:port]/url-path`
|
||
- Will SRVHOST by impacted by this change? This will remain the same, but could be changed.
|
||
- SRVHOST- The local host to listen on. This must be an address on the local machine or 0.0.0.0
|
||
- SRVPORT 8080 - The local port to listen on.
|
||
- Allowing multiple arbitrary targets with independent ports, protocols etc, is potentially a different development effort to allowing rhosts to support URL syntax.
|
||
|
||
# Similar Efforts
|
||
|
||
### RouterSploit
|
||
|
||
[Routersploit](https://github.com/threat9/routersploit) is a Python exploitation framework for embedded devices. The interactive console allows the user to specify a TARGET option. This value can only be configured with a valid IPv4/IPv6 address:
|
||
|
||
```ruby
|
||
rsf > use exploits/routers/2wire/
|
||
rsf (2Wire Gateway Auth Bypass) > show options
|
||
|
||
Target options:
|
||
|
||
Name Current settings Description
|
||
---- ---------------- -----------
|
||
ssl false SSL enabled: true/false
|
||
target Target IPv4, IPv6 address: 192.168.1.1
|
||
port 80 Target HTTP port
|
||
|
||
Module options:
|
||
|
||
Name Current settings Description
|
||
---- ---------------- -----------
|
||
verbosity true Verbosity enabled: true/false
|
||
```
|
||
|
||
With a module that supports a configurable path:
|
||
|
||
```ruby
|
||
rsf > use exploits/generic/shellshock
|
||
rsf (Shellshock) > show options
|
||
|
||
Target options:
|
||
|
||
Name Current settings Description
|
||
---- ---------------- -----------
|
||
ssl false SSL enabled: true/false
|
||
target Target IPv4 or IPv6 address
|
||
port 80 Target HTTP port
|
||
|
||
Module options:
|
||
|
||
Name Current settings Description
|
||
---- ---------------- -----------
|
||
verbosity true Verbosity enabled: true/false
|
||
path / Url path
|
||
method GET HTTP method
|
||
header User-Agent HTTP header injection point
|
||
```
|
||
|
||
### Empire
|
||
|
||
[Empire](https://github.com/EmpireProject/Empire) is a now retired post exploitation framework for windows. The interactive console provides both a Host configuration, as well as the ability to individually configure options:
|
||
|
||
```ruby
|
||
(Empire) > listeners
|
||
[!] No listeners currently active
|
||
(Empire: listeners) > uselistener http
|
||
(Empire: listeners/http) > info
|
||
|
||
Name Required Value Description
|
||
---- -------- ------- -----------
|
||
Name True http Name for the listener.
|
||
Host True http://192.168.246.234 Hostname/IP for staging.
|
||
BindIP True 0.0.0.0 The IP to bind to on the control server.
|
||
Port True Port for the listener.
|
||
Launcher True powershell -noP -sta -w 1 -enc Launcher string.
|
||
StagingKey True d6ca3fd0c3a3b462ff2b83436dda495e Staging key for initial agent negotiation.
|
||
DefaultDelay True 5 Agent delay/reach back interval (in seconds).
|
||
DefaultJitter True 0.0 Jitter in agent reachback interval (0.0-1.0).
|
||
DefaultLostLimit True 60 Number of missed checkins before exiting
|
||
DefaultProfile True /admin/get.php,/news.php,/login/ Default communication profile for the agent.
|
||
process.php|Mozilla/5.0 (Windows
|
||
NT 6.1; WOW64; Trident/7.0;
|
||
rv:11.0) like Gecko
|
||
CertPath False Certificate path for https listeners.
|
||
KillDate False Date for the listener to exit (MM/dd/yyyy).
|
||
WorkingHours False Hours for the agent to operate (09:00-17:00).
|
||
Headers True Server:Microsoft-IIS/7.5 Headers for the control server.
|
||
Cookie False sTAZwcPKtawpT Custom Cookie Name
|
||
StagerURI False URI for the stager. Must use /download/. Example: /download/stager.php
|
||
UserAgent False default User-agent string to use for the staging request (default, none, or other).
|
||
Proxy False default Proxy to use for request (default, none, or other).
|
||
ProxyCreds False default Proxy credentials ([domain\]username:password) to use for request (default, none, or other).
|
||
SlackToken False Your SlackBot API token to communicate with your Slack instance.
|
||
SlackChannel False #general The Slack channel or DM that notifications will be sent to.
|
||
```
|
||
|
||
Setting the Host option will configure both the Host option, as well as the Port:
|
||
|
||
```
|
||
Empire: listeners/http) > set Host http://10.10.14.31:443
|
||
(Empire: listeners/http) > info Name: HTTP[S]
|
||
Category: client_serverAuthors:
|
||
@harmj0yDescription:
|
||
Starts a http[s] listener (PowerShell or Python) that uses a
|
||
GET/POST approach.HTTP[S] Options: Name Required Value Description
|
||
---- -------- ------- -----------
|
||
Name True http Name for the listener.
|
||
Host True http://10.10.14.31:443 Hostname/IP for staging.
|
||
BindIP True 0.0.0.0 The IP to bind to on the control server.
|
||
Port True 443 Port for the listener.
|
||
Launcher True powershell -noP -sta -w 1 -enc Launcher string.
|
||
StagingKey True d6ca3fd0c3a3b462ff2b83436dda495e Staging key for initial agent negotiation.
|
||
DefaultDelay True 5 Agent delay/reach back interval (in seconds).
|
||
DefaultJitter True 0.0 Jitter in agent reachback interval (0.0-1.0).
|
||
DefaultLostLimit True 60 Number of missed checkins before exiting
|
||
DefaultProfile True /admin/get.php,/news.php,/login/ Default communication profile for the agent.
|
||
process.php|Mozilla/5.0 (Windows
|
||
NT 6.1; WOW64; Trident/7.0;
|
||
rv:11.0) like Gecko
|
||
CertPath False Certificate path for https listeners.
|
||
KillDate False Date for the listener to exit (MM/dd/yyyy).
|
||
WorkingHours False Hours for the agent to operate (09:00-17:00).
|
||
Headers True Server:Microsoft-IIS/7.5 Headers for the control server.
|
||
Cookie False sTAZwcPKtawpT Custom Cookie Name
|
||
StagerURI False URI for the stager. Must use /download/. Example: /download/stager.php
|
||
UserAgent False default User-agent string to use for the staging request (default, none, or other).
|
||
Proxy False default Proxy to use for request (default, none, or other).
|
||
ProxyCreds False default Proxy credentials ([domain\]username:password) to use for request (default, none, or other).
|
||
SlackToken False Your SlackBot API token to communicate with your Slack instance.
|
||
SlackChannel False #general The Slack channel or DM that notifications will be sent to.
|
||
```
|
||
|
||
Likewise, updating the individual port will be reflected in the Host option:
|
||
|
||
```ruby
|
||
(Empire: listeners/http) > set Port 1234
|
||
(Empire: listeners/http) > info
|
||
Name: HTTP[S]
|
||
Category: client_server
|
||
Authors:
|
||
@harmj0y
|
||
Description:
|
||
Starts a http[s] listener (PowerShell or Python) that uses a
|
||
GET/POST approach.
|
||
HTTP[S] Options:
|
||
Name Required Value Description
|
||
---- -------- ------- -----------
|
||
Name True http Name for the listener.
|
||
**Host True http://10.10.14.31:1234 Hostname/IP for staging.**
|
||
BindIP True 0.0.0.0 The IP to bind to on the control server.
|
||
**Port True 1234 Port for the listener.**
|
||
``` |