
Apache Solr Poc CVE-2017-3164 CVE-2017-12629
Esta carpeta contiene ejemplos de exploits para Apache Solr CVE-2017-3164 CVE-2017-12629.
Para ser utilizados únicamente con fines educativos y con el permiso total del propietario del servidor Apache Solr.
Necesitarás conocer la IP o el nombre DNS del servidor Apache Solr y el nombre de una Colección.
Server Side Request Forgery en Apache Solr, versiones 1.3 hasta 7.6 (inclusive). Dado que el parámetro "shards" no tiene un mecanismo de lista blanca correspondiente, un atacante remoto con acceso al servidor podría hacer que Solr realice una solicitud HTTP GET a cualquier URL alcanzable.
Este SSRF es extremadamente potente porque todo lo que tienes que hacer es enviar una solicitud GET a esto y hará una solicitud POST al objetivo. Además, puedes suministrar el cuerpo de la solicitud POST como un parámetro de URL junto con la solicitud GET.
La ejecución remota de código ocurre en Apache Solr anterior a 7.1 con Apache Lucene anterior a 7.1 al explotar XXE junto con el uso de un comando Config API add-listener para alcanzar la clase RunExecutableListener. Elasticsearch, aunque usa Lucene, NO es vulnerable a esto. Tenga en cuenta que la vulnerabilidad de expansión de entidades externas XML ocurre en el Analizador de Consultas XML que está disponible, por defecto, para cualquier solicitud de consulta con parámetros deftype=xmlparser y puede ser explotada para cargar datos maliciosos al controlador de solicitudes /upload o como XXE ciego usando el envoltorio ftp para leer archivos locales arbitrarios del servidor Solr. Tenga en cuenta también que la segunda vulnerabilidad se relaciona con la ejecución remota de código usando RunExecutableListener disponible en todas las versiones afectadas de Solr.
Elegí este RCE para explotar, pero Apache Solr tiene muchas vulnerabilidades RCE que podrías explotar con el SSRF. También podrías explotar fácilmente cualquier otro servidor al que el servidor Solr tenga acceso, por ejemplo, suministrar comandos Redis y obtener un shell inverso en servidores Redis en su lugar.
Puedes alojar este archivo en un servidor web público y luego enviarlo por correo electrónico al usuario objetivo. Si el objetivo carga la página web, el JavaScript explotará automáticamente el servidor Apache Solr.
El número de puerto debe ser proporcionado en el parámetro de URL ?n=. De esta manera, puedes enviar correos electrónicos a múltiples objetivos y tener un listener único para cada uno.