Jackson的漏洞主要集中在jackson-databind中,当启用Global default typing,类似于FastJson的autoType,会存在各种各样的反序列化绕过类
区分Fastjson和Jackson:
{"name":"S","age":21}
{"name":"S","age":21,"agsbdkjada__ss_d":123}
这两个fastjson都不会报错,而jackson会报错,因为Jackson因为强制key与javabean属性对齐,只能少不能多 key,所以会报错。
CVE-2017-7525
FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization)特性(默认情况下不开启),当json字符串转换的Target class中有polymorph fields,即字段类型为接口、抽象类或Object类型时,攻击者可以通过在json字符串中指定变量的具体类型(子类或接口实现类),来实现实例化指定的类,借助某些特殊的class,如TemplatesImpl,可以实现任意代码执行。
1.访问8080端口:
2.使用JDK7u21的com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl作为Gadget,发送如下请求,将会执行touch /tmp/prove1.txt:
"transletBytecodes"为base64编码:
3.成功创建文档:
CVE-2017-17485
该漏洞是由于Jackson CVE-2017-7525黑名单过滤不完整,当开发人员在应用程序中通过ObjectMapper对象调用enableDefaultTyping方法时,程序就会受到此漏洞的影响,攻击者就可利用构造的包含有恶意代码的json数据包对应用进行攻击,直接获取服务器控制权限。目前针对该漏洞利用的POC已经公开,请受影响的用户及时更新版本进行修复。
1.漏洞检测方法:
1)检查pom.xml相关文件对jackson-databind引入情况,判断当前版本是否低于2.9.3版本
2)当引入了jackson-databind组件时,排查代码中是否调用了enableDefaultTyping方法,如果调用了,建议立即升级相关组件并重启Web应用。
2.利用该漏洞,我们需要创建一个bean文件,放置在任意服务器上(我放在kali的桌面上的),内容如下:
这里开启一个80端口的http服务:
3.burp包上传,注意ip和端口号的填写:
3.然后,发送以下数据包,使Jackson加载bean,触发漏洞
原理:
该漏洞利用了org.springframework.context.support.FileSystemXmlApplicationContext加载远程bean定义文件,创建ProcessBuilder bean,并在xml文件中使用Spring EL来调用start()方法实现命令执行
4.成功创建: