
Python3-Skript zum Scannen von anfälligen Maschinen für CVE-2021-44228 (Log4shell).

Dieses Python3-Skript versucht, nach Servern zu suchen, die anfällig für CVE-2021-44228, auch bekannt als Log4Shell, sind – eine sehr kritische Schwachstelle in der Java-Logging-Bibliothek Log4j2.
Es verlässt sich nicht auf externe DNS-Log-Server, um die verwundbaren Ziele zu überprüfen und zu validieren: Beim Start wird ein neuer Thread erstellt, der auf allen Schnittstellen und Port 55555 (kann über eine .env-Datei oder Umgebungsvariablen geändert werden) lauscht. Dieser Thread wartet auf Rückrufverbindungen von den verwundbaren Maschinen und benachrichtigt den Hauptthread über eine Python Queue. Beachte, dass du möglicherweise Firewall-Regeln (und/oder Portweiterleitungsregeln) hinzufügen musst, um eingehende Verbindungen zum lauschenden IP:Port-Paar zu erlauben.
Um die Chancen zu erhöhen, die Schwachstelle auszulösen, nimmt das Werkzeug eine URL als Argument (oder eine Liste von URLs) und sucht nach allen Formularen, die in der/den angegebenen URL(s) enthalten sind. Anschließend wird versucht, die Schwachstelle für jeden Parameter jedes gefundenen Formulars (GET- und POST-Anfragen) auszunutzen. Dies ist das Standardverhalten, kann aber mit der Option --skip-forms deaktiviert werden (in diesem Fall wird nur 1 Anfrage durchgeführt und die Nutzlast in wenige Header-Felder eingefügt).
Außerdem werden die folgenden vordefinierten Header verwendet, um zu testen, ob die Ziele verwundbar sind:
Benutzerdefinierte Header können über die Befehlszeilenoption hinzugefügt werden.
Eine vollständige Beschreibung der Verwendung findest du im folgenden Abschnitt.
python3 log4j_checker.py -h
usage: log4j_checker.py [-h] [--url URL] [--headers HEADERS [HEADERS ...]] [--urls URLS] [--skip-forms]
optional arguments:
-h, --help show this help message and exit
--url URL Single url you want to test (valid url is http(s)://host:[port]/[path])
--headers HEADERS [HEADERS ...]
Custom headers you want to try (space separated)
--urls URLS A file containing 1 url per line
--skip-forms Skip forms check (only perform 1 request)
Dieses Werkzeug ist dazu gedacht, um deine eigenen Systeme zu testen.
WICHTIGER HINWEIS: Dieses Werkzeug stellt nicht sicher, dass dein Server NICHT verwundbar ist, selbst wenn das Ergebnis negativ ausfällt. Das liegt daran, dass deine Anwendung die bösartige Nutzlast möglicherweise an anderer Stelle protokolliert und es nicht möglich ist, alle Fälle abzudecken. Der beste Weg, um zu überprüfen, ob du verwundbar bist, ist daher, die verwundbaren Pakete (d.h. log4j-core*.jar und log4j-api*.jar) im gesamten Dateisystem zu suchen.