
Umfassendes Java-Sicherheitslabor mit verwundbarem und korrigiertem Code, Angriffsszenarien, Audit-Notizen zu Quellen und Senken sowie Anleitungen für sicheres Programmieren für Sicherheitsschulungen und Tool-Bewertung.
JavaSecLab - Ein umfassendes Java-SchwachstellenlaborJavaSecLab ist ein umfassendes Java-Schwachstellenlabor für das Lernen von Anwendungssicherheit, die Praxis von Code-Audits, Schulungen in sicherer Entwicklung und die Bewertung von Sicherheitstools. Es basiert auf Spring Boot und bietet verwundbaren Code, korrigierte Implementierungen, realistische Angriffsszenarien, audit-orientierte Hinweise zu Sources und Sinks, Anleitungen zur Behebung, Erklärungen zu sicherem Programmieren sowie Beispiele zur Verkehrsanalyse.
Das Ziel ist praktisch: Nutzern nicht nur zu vermitteln, wie eine Schwachstelle ausgenutzt wird, sondern auch, warum sie im Code existiert und wie sie behoben werden sollte.


JavaSecLab deckt ein breites Spektrum an Java-Web-Sicherheitsszenarien ab, darunter:
Demo-Seite: http://whgojp.top/
Standardkonto: admin/admin
JavaSecLab ist absichtlich verwundbar und enthält gefährliche Endpunkte, verwundbare Abhängigkeiten und unsichere Konfigurationen. Betreiben Sie Ihre eigene Bereitstellung nur in einer isolierten Umgebung. Setzen Sie es nicht direkt dem öffentlichen Internet aus.
Der Autor hat in Unternehmens-Sicherheitsrollen gearbeitet und den vollständigen Lebenszyklus von Schwachstellen erlebt. Nach Penetrationstests oder Sicherheitsbewertungen werden Schwachstellen häufig über Systeme wie TAPD oder Jira an Entwicklungsteams übergeben. In der Praxis tauchen zwei Fragen immer wieder auf:
JavaSecLab wurde geschaffen, um Schwachstellenverhalten, verwundbaren Code, Behebungsansätze und Audit-Denken miteinander zu verbinden. Im Vergleich zu einem reinen Textbericht oder einem PoC legt das Projekt den Schwerpunkt darauf, Schwachstellen aus der Code-Perspektive zu verstehen.
Beim Code-Auditing besteht ein üblicher Arbeitsablauf darin, zuerst eine Sink zu lokalisieren, etwa Befehlsausführung, SQL-Ausführung, Dateizugriff, Template-Rendering, Deserialisierung oder Antwortausgabe. Der Auditor verfolgt dann rückwärts, um die entsprechende Source zu identifizieren, etwa Request-Parameter, Header, Cookies, hochgeladene Dateien, serialisierte Daten oder Datenbankinhalte. Viele JavaSecLab-Szenarien sind um diesen Source-to-Sink-Pfad herum gestaltet, was sie sowohl für das Lernen als auch für die Tool-Verifikation nützlich macht.
Derselbe Schwachstellentyp tritt in realen Systemen oft über mehrere Auslösepfade auf. JavaSecLab bietet daher wo möglich mehrere Szenarien für zentrale Schwachstellenklassen, damit Nutzer vergleichen können, wie unterschiedliche Codemuster, Framework-Funktionen und Geschäftsabläufe das Risiko beeinflussen.
JavaSecLab enthält Beispiele zur Verkehrsanalyse von Schwachstellen, um Lernenden zu helfen, Request-/Response-Verhalten mit der Codeausführung zu verbinden. Beiträge mit klareren Paketen, besseren Reproduktionshinweisen oder zusätzlichen Analysebeispielen sind willkommen.

In einem zeitbasierten SQL-Injection-Szenario lässt sich das Verkehrsmuster beispielsweise anhand der Antwortlatenz beobachten: Der Server antwortet nach etwa fünf Sekunden.

Klonen Sie das Repository:
git clone https://github.com/whgojp/JavaSecLab.git
cd JavaSecLab

Voraussetzungen:
Erstellen Sie die Datenbank und importieren Sie sql/JavaSecLab.sql.
Setzen Sie das aktive Profil in src/main/resources/application.yml auf dev:
spring:
profiles:
active: dev
Aktualisieren Sie die Datenbankverbindung in src/main/resources/application-dev.yml:
username: root
password: QWE123qwe
url: jdbc:mysql://localhost:13306/JavaSecLab?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&allowMultiQueries=true
Starten Sie die Anwendung aus IDEA oder mit Maven.
Standardkonto: admin/admin

Voraussetzungen:
Option 1: Start mit dem veröffentlichten Image:
docker compose -f docker-compose.image.yml up -d
Option 2: Image lokal bauen und das Labor starten:
mvn clean package -DskipTests
docker compose -p javaseclab up -d
Wenn die Datenbank nach dem Start leer ist, importieren Sie sql/JavaSecLab.sql manuell.


Weitere Bereitstellungsoptionen und Hinweise zur Fehlerbehebung finden Sie im Deployment Guide.
JavaSecLab ist ein verwundbares Laborprojekt. Es behält absichtlich gefährliche Endpunkte, verwundbare Abhängigkeiten und unsichere Konfigurationen für Reproduktion und Lehre bei. Betreiben Sie es nur lokal oder in einem isolierten Netzwerk.
Empfohlene Vorsichtsmaßnahmen:
Die sicheren Codebeispiele in diesem Projekt dienen der Lehre und Demonstration. Reale Geschäftssysteme erfordern in der Regel Authentifizierung, Auditing, Rate Limiting, Datenvalidierung, Abhängigkeits-Governance, Monitoring, Alerting und Defense in Depth.
Issues und Pull Requests sind willkommen. Gute Beiträge umfassen:
Wenn wir von freier Software sprechen, meinen wir Freiheit, nicht den Preis.
JavaSecLab wird unter der Apache License 2.0 veröffentlicht. Details finden Sie in LICENSE.
Siehe Update Log für Versionshinweise und Projektverlauf.
Blog des Autors: 今天是几号
Wenn Sie sich für Anwendungssicherheit, sichere Entwicklung, SDL, DevSecOps oder Schwachstellenlabore interessieren, treten Sie gerne der Community-Gruppe bei.
Wenn JavaSecLab Ihnen hilft, ist eine Unterstützung willkommen. Die Unterstützung wird für die Wartung der Online-Umgebung und die kontinuierliche Verbesserung des Projekts verwendet.