环境搭建

git clone https://github.com/jflyfox/jfinal_cms.git

拉取5.1.0版本。

Tomcat 9.0.96 JDK 17.0.1

image-20241229181056450

漏洞简述

在这个版本,Maven中使用了Fastjson1.2.62版本,该版本存在反序列化漏洞。而正好这个版本存在一个可控的parseObject

漏洞分析

因为是Fastjson漏洞,全局搜索parseObject image-20241229181359145

我们跟进到com.jflyfox.api.form.ApiForm#getParams

image-20241229181440636

这里对params使用了parseObject,而这个params是p而来的,看p image-20241229181602069

p就是ApiForm的一个属性。现在找哪里用了getParams image-20241229181704540

为这几个,继续往上找;发现这几个方法都会在ApiV100Logic或者BaseApiLogic中被调用,且ApiV100Logic继承BaseApiLogic

我们看com.jflyfox.api.service.impl.ApiV100Logic#里面很多方法都能够触发com.jflyfox.api.form.ApiForm#中的get方法,那么就能调用到com.jflyfox.api.form.ApiForm#getParams 现在去找怎么调用到com.jflyfox.api.service.impl.ApiV100Logic#中的方法。

去找controller,去看com.jflyfox.api.controller.ApiController#action的具体实现;

image-20241229182611780

这里很关键,这能返回一个IApiLogic类型的实例,通过反射调用接口;跟进到ReflectionUtils.invokeMethod image-20241229182915206

这里通过反射调用方法;我们传入IApiLogic实例然后加一个方法就进入了ApiV100Logic;这里以article为例,

image-20241229183121892

这里调用了ApiForm.getInt image-20241229183236733

形成闭环了。

调试过程

image-20241229183510574

image-20241229183531407

image-20241229183606389

image-20241229183622471

image-20241229183642271

重拾几个月前学的东西。。。