
Die Super Vulnerable Java Application (SVJA), wie sie in der Roniel-und-DaRon-Podcast-Show demonstriert wird, ist eine Apache-Struts-Anwendung, die eine Reihe sehr häufiger Schwachstellen enthalten soll. Im Gegensatz zu anderer „absichtlich verwundbarer" Software ist diese Software darauf ausgelegt, häufige Schwachstellen so nachzubilden, wie sie oft anzutreffen sind, statt auf eine allzu vereinfachte Weise oder in einer eher „Capture-the-Flag"-Manier. Diese Software wird halbregelmäßig aktualisiert und erweitert, wobei Demonstrationen einiger der Schwachstellen Teil des Podcasts sind.
Die RDPS Super Vulnerable Java Application ist genau das -- eine super verwundbare Java-Anwendung, die zum Wohle aller geschaffen wurde, um eine Vielzahl von häufigen, oft "komplexen" Schwachstellen zu zeigen. Diese Software wurde im Rahmen der Roniel- und DaRon-Podcast-Show (https://www.youtube.com/channel/UCbj1JFcSJeTuf3qf9GPRemA) erstellt, damit wir eine Reihe von Schwachstellen, auf die wir häufig gestoßen sind, auf realistischere Weise besprechen und zeigen konnten, als du es bei den vielen anderen Online-Tools sehen wirst. Um Beispiel-Exploits zu sehen, schau dir bitte unseren Podcast an.
Bitte denke daran, dass diese Anwendung absichtlich in hohem Maße gegen eine Reihe von Dingen verwundbar ist. Sei vorsichtig, wo du sie ausführst, und beschränke den Zugriff (der Tomcat-Server sollte nur auf localhost lauschen und nur auf deinem persönlichen Rechner). Wir übernehmen keine Verantwortung, wenn du dich nicht ordentlich um deine Dinge kümmerst, deine Kopie herumhängen lässt und jeder und alles deine Sachen stehlen oder deinen Rechner schwer kompromittieren kann. Wir empfehlen, dies in einer gesicherten virtuellen Maschine (VM) auszuführen, die nichts Sensibles enthält und keine Verbindung zum Internet hat. Wenn du das System, auf dem dies läuft, und die Instanz davon nicht ordnungsgemäß absicherst, wird das für dich wahrscheinlich ein schlechter Tag. Wie bei ungeschütztem Geschlechtsverkehr bringst du dich nur in eine Lage, die du eines Tages bereuen wirst. Du bist gewarnt, aber du bist ermutigt zu spielen ;-)
Die RDPS SVJA besteht aus einer Java-Struts-2-Anwendung, die React ausführt. Sie wird einfach durch Ausführen von mvn clean package erstellt.
Dies erzeugt eine WAR-Datei in target -- svja.war. Lege die WAR-Datei einfach in deinen Tomcat-webapps-Ordner. Bei einer Standard-Tomcat-Installation rufst du http://127.0.0.1:8080/svja auf, um auf die Anwendung zuzugreifen.
Wenn du Tomcat 10 oder höher verwendest, füge bitte <Loader jakartaConverter="TOMCAT" /> zu deiner Tomcat-Konfigurationsdatei context.xml hinzu.
Für diejenigen, die es nutzen möchten, um den Ball ins Rollen zu bringen: Die Root-URL (http://127.0.0.1:8080/svja) verfügt jetzt über Swagger UI und eine grundlegende OpenAPI-Spezifikation (http://127.0.0.1:8080/svja/specification.yaml), die du verwenden kannst. Beachte, dass die Spezifikation und damit auch Swagger UI nur an der Oberfläche kratzt (darum geht es doch bei unsicherer Deserialisierung usw., oder?).
Im Folgenden sind einige der wichtigsten Schwachstellen des Systems, nach Aktion, aufgeführt.
admin:admin (application administrator account)
bill:baker (privileged user account)
bob:barker (basic, read-only user account)
/api/authenticate?user.username=admin&user.password=admin
/api/authenticate?user.username=bill&user.password=baker
/api/authenticate?user.username=bob&user.password=barker
Nach der Authentifizierung kannst du über JSON oder Struts jede beliebige Aktion aufrufen.
GET /svja/api/authenticate?user.username=bill&user.password=baker HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Length: 0
DNT: 1
Connection: close
Cache-Control: max-age=0
GET /svja/api/authenticate HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 61
DNT: 1
Connection: close
Cache-Control: max-age=0
{
"user": {
"username": "bill",
"password": "baker"
}
}
GET /svja/api/authenticate/federated?user.username=bill%40rdps.local&usernameTranslationRegex=%2F%40rdps%5B.%5Dlocal%2F%2F HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Length: 0
DNT: 1
Connection: close
Cache-Control: max-age=0
GET /svja/api/authenticate/federated HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 61
DNT: 1
Connection: close
Cache-Control: max-age=0
{
"user": {
"username": "[email protected]"
},
"usernameTranslationRegex": "/@rdps[.]local//"
}
Denke daran, das svjatoken zu ändern.
GET /svja/api/projects?projectId=1 HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Cookie: svjatoken=RaMu5vhFBgL8goV6Ja1ffLnpmcixNuAL7fUP;
Cache-Control: max-age=0
Denke daran, das svjatoken zu ändern.
GET /svja/api/projects HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 19
DNT: 1
Connection: close
Cookie: svjatoken=RaMu5vhFBgL8goV6Ja1ffLnpmcixNuAL7fUP;
Cache-Control: max-age=0
{
projectId:1
}
Dies ist eine laufende Arbeit (Work-in-Progress) und wir haben viele weitere Schwachstellen und Dinge geplant (einschließlich eines super verwundbaren Frontends und anderer super verwundbarer Anwendungen) -- schau alle paar Monate wieder bei uns vorbei und sieh dir die Roniel- und DaRon-Podcast-Show an, um Updates, Beispiel-Exploits und andere Ideen zu erhalten. Wir ermutigen dich außerdem, herauszufinden, wie man die Schwachstellen entschärfen oder beheben kann... Dinge kaputtzumachen ist einfach... das Entschärfen, Beheben und Absichern ist schwer. Viel Glück und viel Spaß bei der Jagd!