这里以帆软的历史反序列化链为例
需要准备lib依赖包:
- chains-all-xxx.jar SDK,在 https://github.com/Java-Chains/chains-plugin-demo 的 release 中下载
- 编写 gadget 链涉及的第三方依赖jar包,例如 fine-third-10.0-hibernate.jar
分别右键【Add as Library】添加到 lib 中,建议将以上两种分别进行【Add as Library】
可参考 Finereport_Hibernate、Finereport_Jackson 类中的注释
注意以下几点:
- Gadget 类的包名以 com.ar3h 开始
- Gadget 类需要 GadgetTags、GadgetAnnotation 两个注解,缺一不可
- Gadget 类需要实现 com.ar3h.chains.common.Gadget 接口
直接调用代码生成反序列化 Payload,然后再手动测试是否可用
测试没有问题后就可以用 IDEA 自带的功能打包成jar包
把涉及的第三方依赖全部提取并打包进去
这里的 chains-all-xxx.jar sdk包不用打包进去
配置好 Artifacts 后点击 Build 进行打包
默认会在 out/artifacts/ 目录下生成 chains-plugin-demo-fr.jar
复制到 web-chains-xxx.jar 的 ./chains-config/plugins/
目录下即可,没有这个目录需要自行创建
目录结构如下
|── web-chains-1.3.0.jar
|── chains-config
|── plugins
|── chains-plugin-demo-fr.jar
web-chains 启动时会自动加载 当前目录下的 ./chains-config/plugins/ 下的所有jar包
如果 web-chains 已是启动状态,方便起见,可以在 System -> ControlPanel 中点击【Reload】按钮重新加载 Gadget 插件
System -> ShowGadget 中找到相关描述信息
在 Generate -> JavaNativePayload 中找到并使用