JAVA安全—FastJson反序列化利用链跟踪autoType绕过
前言
FastJson这个漏洞我们之前讲过了,今天主要是对它的链条进行分析一下,明白链条的构造原理。
Java安全—log4j日志&FastJson序列化&JNDI注入_log4j漏洞-CSDN博客
漏洞版本
1.2.24及以下没有对序列化的类做校验,导致漏洞产生
1.2.25-1.2.41增加了黑名单限制,更改autoType默认为关闭选项。
1.2.42版本是对1.2.41及以下版本的黑名单绕过,代码内更新字符串黑名单hash方式
1.2.43版本是对1.2.42及以下版本的黑名单绕过
1.2.44-1.2.45版本1.2.43版本黑名单无法绕过,寻找新的利用链进行利用
1.2.47版本 利用fastjson处理Class类时的操作,将恶意类加载到缓存中,实现攻击
1.2.62-1.2.67版本Class不会再往缓存中加载恶意类,寻找新的利用链进行突破
1.2.68版本,使用期望类AutoCloseable来绕过fastjson校验
1.2.72-1.2.80使用期望类Throwable的子类,进行绕过
项目搭建
JDK不建议选版本太高的,以防止出错啥的。
选择Web依赖项,因为后续会用到Web的功能。
新建一个类叫FastJsonController,这里待会写入我们的实验代码。
接着我们引入fastjson这个包,我这里选择的是1.2.24版本,直接再pom.xml文件写入以下代码即可。
首先写入以下代码,对我们的JSON数据进行测试,可以看到能够成功解析输出,说明环境没毛病。
public static void main(String[] args) {String str = "{\"name\":\"wlwznb\",\"age\":18}";JSONObject data = JSON.parseObject(str);System.out.println(data);}
链条分析
1.2.24 利用链分析
现在我们开始对链条来解析,把我们上面测试的JSON数据换成以下的链条,可以看出来有点像我们的fastjson利用链了。
String userStr = "{\"@type\":\"com.sf.maven.fastjsondemo1.demos.web.User\",\"age\":18,\"name\":\"wlwznb\"}";
这个 com.sf.maven.fastjsondemo1.demos.web.User 就是你自带的 User 类的路径,直接复制过来就行。
运行代码,可以看出与上面的没啥区别。
别急,此时我们打开User这个类,可以看出里面又很多方法。
我们往里面添加打印语句,这样在调用这些方法的时候,我们就会知道被调用了。
此时我们再运行代码,可以看到setAge、setName、getAge、getName这四个方法都被调用了,这说明在解析数据的时候不仅仅把age和name这两个数据解析了,还把User类里面的set和get方法解析了。