
Apache Solr Poc CVE-2017-3164 CVE-2017-12629
Эта папка содержит примеры эксплойтов для Apache Solr CVE-2017-3164 CVE-2017-12629
Использовать ТОЛЬКО в образовательных целях и с полного разрешения владельца сервера Apache Solr.
Вам понадобится знать IP-адрес или DNS-имя сервера Apache Solr и имя коллекции (Collection).
Server Side Request Forgery (SSRF) в Apache Solr, версии с 1.3 по 7.6 включительно. Поскольку параметр "shards" не имеет соответствующего механизма белого списка, удаленный злоумышленник, имеющий доступ к серверу, может заставить Solr выполнить HTTP GET-запрос на любой доступный URL.
Этот SSRF чрезвычайно мощный, потому что всё, что вам нужно сделать, — это отправить GET-запрос на этот адрес, и он выполнит POST-запрос к цели. Кроме того, вы можете передать тело POST-запроса как URL-параметр вместе с GET-запросом.
Удаленное выполнение кода происходит в Apache Solr до версии 7.1 с Apache Lucene до версии 7.1 путём эксплуатации XXE в сочетании с использованием команды add-listener Config API для доступа к классу RunExecutableListener. Elasticsearch, хотя и использует Lucene, НЕ уязвим к этому. Обратите внимание, что уязвимость расширения внешних сущностей XML (XXE) возникает в XML Query Parser, который по умолчанию доступен для любого запроса с параметрами deftype=xmlparser, и может быть использована для загрузки вредоносных данных в обработчик запросов /upload или как Blind XXE с использованием ftp-обёртки для чтения произвольных локальных файлов с сервера Solr. Также обратите внимание, что вторая уязвимость связана с удалённым выполнением кода с использованием RunExecutableListener, доступного во всех затронутых версиях Solr.
Я просто выбрал эту RCE для эксплуатации, но у Apache Solr есть множество RCE-уязвимостей, которые можно эксплуатировать через SSRF. Вы также можете с лёгкостью эксплуатировать любой другой сервер, к которому имеет доступ сервер Solr, например, отправить команды Redis и получить обратную оболочку (reverse shell) на Redis-серверах.
Вы можете разместить этот файл на публичном веб-сервере и затем отправить его по электронной почте целевому пользователю. Если цель загрузит веб-страницу, JavaScript автоматически эксплуатирует сервер Apache Solr.
Номер порта необходимо указать в URL-параметре ?n=. Таким образом, вы можете отправлять письма нескольким целям и иметь уникальный слушатель (listener) для каждой из них.