This repository has no description
README.md

Simple reverse shell container image.

Server deployment #

Server deployment, using Docker-compose:

services:
  server:
    hostname: server
    image: docker.io/heywoodlh/reverse-shell:server
    restart: unless-stopped
    ports:
      - 1337:1337
    environment:
      - LISTEN_PORT=1337
    volumes:
      - ssl:/ssl/

volumes:
  ssl:

Client deployment #

docker run --network=host -it --rm -e SERVER_ADDRESS="localhost" -e SERVER_PORT="1337" docker.io/heywoodlh/reverse-shell:client

Kubernetes deployment #

See below for reference client and server deployment in Kubernetes:

``` --- apiVersion: apps/v1 kind: Deployment metadata: name: reverse-shell-client namespace: default spec: replicas: 1 selector: matchLabels: app: reverse-shell-client template: metadata: labels: app: reverse-shell-client spec: containers: - env: - name: SERVER_ADDRESS value: "reverse-shell-server.default.svc.cluster.local" - name: SERVER_PORT value: "1337" image: docker.io/heywoodlh/reverse-shell:client name: reverse-shell-client hostname: reverse-shell-client restartPolicy: Always --- apiVersion: apps/v1 kind: Deployment metadata: name: reverse-shell-server namespace: default spec: replicas: 1 selector: matchLabels: app: reverse-shell-server template: metadata: labels: app: reverse-shell-server spec: containers: - env: - name: LISTEN_PORT value: "1337" image: docker.io/heywoodlh/reverse-shell:server name: reverse-shell-server ports: - name: socat containerPort: 1337 protocol: TCP hostname: reverse-shell-server restartPolicy: Always --- apiVersion: v1 kind: Service metadata: name: reverse-shell-server namespace: default spec: selector: app: reverse-shell-server ports: - name: socat port: 1337 targetPort: 1337 protocol: TCP type: ClusterIP ```

Enable SSL #

Set the following environment variable to enable SSL on the server and client:

ENABLE_SSL=true

Like so for the server:

services:
  server:
    hostname: server
    image: docker.io/heywoodlh/reverse-shell:server
    restart: unless-stopped
    ports:
      - 1337:1337
    environment:
      - LISTEN_PORT=1337
      - SSL_CERT=/ssl/cert.pem
      - SSL_KEY=/ssl/key.pem
      - ENABLE_SSL=true

Then connect to the server like so:

docker run --network=host -it --rm -e ENABLE_SSL=true -e SERVER_ADDRESS="localhost" -e SERVER_PORT="1337" docker.io/heywoodlh/reverse-shell:client

Generate a custom SSL certificate #

Generate a certificate like so:

mkdir -p ssl
openssl req -newkey rsa:4096 -nodes -keyout ssl/key.pem -x509 -days 1000 -subj '/CN=reverse-shell/O=Reverse Shell, Inc./C=US' -out ssl/cert.pem

Then use the certificate directory as a volume mounted at /ssl.

Extra notes #

The client image runs as root with the following additional packages:

  • apk and nix available for installing additional packages.
  • kubectl for interfacing with a Kubernetes cluster if deployed
  • docker client for interfacing with Docker daemon

Testing #

docker compose build && docker compose up
docker compose exec -it server /attach.sh