Electron-Builder & Demo für TLS-MitM-Angriffe + mitmproxy auf lokale WebApp (Privilege Escalation)
1.7K
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:
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.
mitmproxy --mode regular --listen-port 8080 --ssl-insecure -s ./MitM_Html_Injection.py
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.
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.
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:
.exe, win-unpacked/.AppImage, .snap, linux-unpacked/macOS-Installationsdateien können nur nativ unter macOS erzeugt werden.
curl -LO https://nodejs.org/dist/latest-v20.x/node-v20.19.5.pkg
sudo installer -pkg node-v20.19.5.pkg -target /
cd 2_7/
npm install
npm run dist
macOS-Artefakte finden Sie anschließend in:
./dist/
Typische Dateien:
.dmg.pkg.zip.app{
"scripts": {
"dist": "electron-builder --win --linux"
}
}
npm run dist → Windows & Linux über Dockernpm run dist → macOS nativ| Zielplattform | Methode | Ergebnis |
|---|---|---|
| Windows | Docker-Image danbu/wbh_aske02_uebung_2_7 | .exe, win-unpacked/ |
| Linux | Docker-Image danbu/wbh_aske02_uebung_2_7 | .AppImage, .snap, linux-unpacked/ |
| macOS | Nativ unter macOS | .dmg, .pkg, .zip, .app |
runs-on: macos-latest)PokerMitmApp & Kursmaterial stehen unter der Lizenz CC‑BY‑NC‑4.0.
Bei Nutzung, Weitergabe oder Bearbeitung müssen folgende Angaben verpflichtend erfolgen:
Beispielhafte Zitierformate:
PokerMitmApp & Kursmaterial: CC-BY-NC-4.0 — Daniel Bunzendahl
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:
Der vollständige, nicht manipulierte WebApp-Server aus Übung 2.6 ist öffentlich verfügbar unter:
Dieses Repository enthält:
Daniel Bunzendahl
Studieneinheit ASKE02 „Privileg Eskalation“
LinkedIn: https://www.linkedin.com/in/daniel-bunzendahl/
Content type
Image
Digest
sha256:05a4cd04e…
Size
1.9 GB
Last updated
10 months ago
docker pull danbu/wbh_aske02_uebung_2_7