
Apache Solr Poc CVE-2017-3164 CVE-2017-12629
Esta pasta contém exemplos de exploits para Apache Solr CVE-2017-3164 CVE-2017-12629
Para ser usado APENAS para fins educacionais e com permissão total do proprietário do servidor Apache Solr.
Você precisará saber o IP ou nome DNS do servidor Apache Solr e o nome de uma Collection.
Server Side Request Forgery no Apache Solr, versões 1.3 até 7.6 (inclusive). Como o parâmetro "shards" não possui um mecanismo de lista de permissões (whitelist) correspondente, um atacante remoto com acesso ao servidor poderia fazer o Solr realizar uma solicitação HTTP GET para qualquer URL acessível.
Este SSRF é extremamente poderoso porque tudo o que você precisa fazer é enviar uma solicitação GET para ele e ele fará uma solicitação POST para o alvo. Além disso, você pode fornecer o corpo da solicitação POST como um parâmetro de URL junto com a solicitação GET.
A execução remota de código ocorre no Apache Solr antes da versão 7.1 com Apache Lucene antes da versão 7.1 ao explorar XXE em conjunto com o uso de um comando add-listener da Config API para alcançar a classe RunExecutableListener. Elasticsearch, embora use Lucene, NÃO é vulnerável a isso. Observe que a vulnerabilidade de expansão de entidades externas XML ocorre no XML Query Parser, que está disponível, por padrão, para qualquer solicitação de consulta com parâmetros deftype=xmlparser, e pode ser explorada para enviar dados maliciosos para o manipulador de solicitações /upload ou como Blind XXE usando o wrapper ftp para ler arquivos locais arbitrários do servidor Solr. Observe também que a segunda vulnerabilidade diz respeito à execução remota de código usando o RunExecutableListener disponível em todas as versões afetadas do Solr.
Eu apenas escolhi este RCE para explorar, mas o Apache Solr tem muitas vulnerabilidades de RCE que você poderia explorar com o SSRF. Você também poderia, com a mesma facilidade, explorar qualquer outro servidor ao qual o servidor Solr tenha acesso, por exemplo, fornecer comandos Redis e obter um reverse shell nos servidores Redis em vez disso.
Você pode hospedar este arquivo em um servidor web público e depois enviá-lo por e-mail para o usuário alvo. Se o alvo carregar a página web, o JavaScript explorará automaticamente o servidor Apache Solr.
O número da porta precisa ser fornecido no parâmetro de URL ?n=. Dessa forma, você pode enviar e-mails para vários alvos e ter um listener exclusivo para cada um.