一:漏洞简介
FasterXML Jackson是美国FasterXML公司的一款适用于Java的数据处理工具。jackson-databind是其中的一个具有数据绑定功能的核心组件之一。FasterXML jackson-databind 2.x < 2.9.10.8的版本存在该漏洞,该漏洞是由于org.apache.commons.dbcp2.cpdsadapter.DriverAdapterCPDS组件库存在不安全的反序列化,导致攻击者可以利用漏洞实现远程代码执行。
二:利用条件
开启enableDefaultTyping()
使用了com.h2database\com.newrelic.agent.java第三方依赖库
三:漏洞复现
- 环境搭建
- 使用idea的maven项目进行环境搭建,操作如下所示:
- 新建一个项目,选择maven
- 填好项目名称和路径后点击Finish,idea会自动创建一个项目
- 初始状态如图所示:
- 接下来替换漏洞需要的pom.xml,然后保存,idea会自动下载依赖
- 如果没有自动下载,可以点击这里手动加载
- 接下来可以在src -> main -> java -> poc.java创建一个poc.java文件
- 然后需要启一个web服务并在目录下放入exec.sql这个sql文件用于反序列化成功后执行命令
- 然后启动web服务并监听某端口
- 然后执行java文件会发现已弹出计算器
- 踩坑记录
- 执行java文件时报错程序包com.fasterxml.jackson.databind不存在
- 这个问题我们需要在项目根目录依次执行以下命令:
- mvn clean install -Dmaven.test.skip=true
- mvn -U idea:idea
- 然后我们会看见 BUILD SUCCESS字样代表安装成功
- 如果发现执行完命令后出现error报错并且发现BUILD FAILURE字样,这时候可以尝试切换不同版本的mvn试试,可能与jdk版本以及mvn版本有关,如下:
- 然后我们继续执行java文件可能会报错:
- 这个错误是因为ObjectMapper的默认配置问题,我们需要更改ObjectMapper的默认配置,如上图所示新增一行代码或者已注释的部分代码都可以解决该问题
- 还有可能遇到的问题是pom文件中配置了jackson的相关信息但是并没有起作用,还是报程序包com.fasterxml.jackson.databind不存在,这时我们可以尝试把这三个依赖的版本设置为同样的版本,并且重新加载maven。
- 还有可能遇到程序报错:mapper.enableDefaultTyping(); 方法已过期,这时我们需要在pom.xml中查看jackson-databind版本是否>=2.10.0,Jackson ObjectMapper 中的 enableDefaultTyping 方法从 2.10.0 开始标记为过期,这时我们可以使用activateDefaultTyping方法来替代它或者切换版本到小于2.10.0版本。
- 个人github:https://artio-li.github.io/
五:参考链接
https://github.com/Al1ex/CVE-2020-36179
https://cn-sec.com/archives/245131.html
https://blog.csdn.net/ls0111/article/details/77507340
https://segon.cn/jackson-objectmapper-enabledefaulttyping-deprecated.html