
Скрипт на Python3 для сканирования уязвимых машин CVE-2021-44228 (Log4shell).

Этот скрипт на Python3 пытается найти серверы, уязвимые для CVE-2021-44228, также известной как Log4Shell, очень критической уязвимости, обнаруженной в библиотеке журналирования Log4j2 на Java.
Он не полагается на внешние DNS-логи серверы для проверки и подтверждения уязвимых целей: при запуске создается новый поток, прослушивающий все интерфейсы и порт 55555 (может быть изменен с помощью файла .env или переменных окружения); он будет ожидать обратные вызовы от уязвимых машин и уведомлять главный поток через очередь Python. Имейте в виду, что вам может понадобиться добавить правила брандмауэра (и/или правила пересылки портов), чтобы разрешить входящие подключения к паре IP:порт прослушивания.
Чтобы повысить шансы на срабатывание уязвимости, инструмент принимает URL в качестве аргумента (или список URL) и ищет любые формы, включенные в предоставленный(е) URL. Затем он пытается эксплуатировать уязвимость, используя каждый параметр для каждой найденной формы (GET и POST запросы). Это поведение по умолчанию, но его можно отключить с помощью опции --skip-forms (в этом случае будет выполнен только 1 запрос, а полезная нагрузка будет помещена в несколько полей заголовков).
Кроме того, для проверки уязвимости целей используются следующие предопределенные заголовки:
Пользовательские заголовки можно добавить через опцию командной строки.
Полное описание использования см. в разделе ниже.
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)
Этот инструмент предназначен для тестирования ваших собственных систем.
ВАЖНОЕ ПРИМЕЧАНИЕ: Этот инструмент не гарантирует, что ваш сервер НЕ уязвим, даже если результат отрицательный. Это связано с тем, что ваше приложение может регистрировать вредоносную полезную нагрузку где-то еще, и невозможно охватить все случаи. Поэтому лучший способ проверить, уязвимы ли вы, — это поискать уязвимые пакеты (т.е. log4j-core*.jar и log4j-api*.jar) по всей файловой системе.