
Apache Solr Poc CVE-2017-3164 CVE-2017-12629
Questa cartella contiene exploit di esempio per Apache Solr CVE-2017-3164 CVE-2017-12629
Da usare SOLO per scopi educativi e con il pieno permesso del proprietario del server Apache Solr.
Dovrai conoscere l'IP o il nome DNS del server Apache Solr e il nome di una Collection.
Server Side Request Forgery in Apache Solr, versioni 1.3 fino alla 7.6 (inclusa). Poiché il parametro "shards" non dispone di un corrispondente meccanismo di whitelist, un attaccante remoto con accesso al server potrebbe far eseguire a Solr una richiesta HTTP GET verso qualsiasi URL raggiungibile.
Questa SSRF è estremamente potente perché tutto ciò che devi fare è inviare una richiesta GET a questo e farà una richiesta POST al target. Inoltre, puoi fornire il corpo della richiesta POST come parametro URL insieme alla richiesta GET.
L'esecuzione di codice remoto avviene in Apache Solr precedente alla 7.1 con Apache Lucene precedente alla 7.1 sfruttando XXE in combinazione con l'uso di un comando add-listener della Config API per raggiungere la classe RunExecutableListener. Elasticsearch, sebbene utilizzi Lucene, NON è vulnerabile a questo. Si noti che la vulnerabilità di espansione delle entità esterne XML si verifica nell'XML Query Parser, disponibile, per impostazione predefinita, per qualsiasi richiesta di query con parametri deftype=xmlparser e può essere sfruttata per caricare dati dannosi sul request handler /upload o come Blind XXE utilizzando il wrapper ftp per leggere file locali arbitrari dal server Solr. Si noti inoltre che la seconda vulnerabilità riguarda l'esecuzione di codice remoto tramite RunExecutableListener, disponibile su tutte le versioni interessate di Solr.
Ho scelto di sfruttare proprio questa RCE, ma Apache Solr ha molte vulnerabilità RCE che potresti sfruttare con la SSRF. Potresti anche altrettanto facilmente sfruttare qualsiasi altro server a cui il server Solr ha accesso, ad esempio inviare comandi Redis e ottenere invece una reverse shell su server Redis.
Puoi ospitare questo file su un server web pubblico e poi inviarlo via email all'utente bersaglio. Se l'utente bersaglio carica la pagina web, il JavaScript sfrutterà automaticamente il server Apache Solr.
Il numero di porta deve essere fornito nel parametro URL ?n=. In questo modo puoi inviare email a più target e avere un listener unico per ciascuno.