CC1链分析
1,整体思路,从尾往上追
- 触发RCE的代码在 InvokerTransformer.transform()方法中
2,具体跟踪过程
-
确认依赖是否正常添加,特别注意右击CC3.1下载资源,树立规则以方法结尾
-
展开菜单 ~> Edit ~> Find ~> Find in files ~> 搜索框InvokerTransformer ~> 点击Scope ~> public class InvokerTransformer implements Transformer, Serializable ~> InvokerTransformer.java
- D:\App\apache-maven-3.6.3\mvn_repo\commons-collections\commons-collections\3.1\commons-collections-3.1-sources.jar!\org\apache\commons\collections\functors\InvokerTransformer.java
-
右击transform(),点击查找用法(Find Usages)
- 在底部 “Find” 窗口的工具栏中,点击齿轮图标
- Scope下拉,选择作用域,All Place可以调出Maven包
-
org.apache.commons.collectins.map ~> TransformedMap.Java ~> checkSetValue ~> transform()
-
transform() ~> checkSetValue
-
AbstractInputCheckedMapDecorator.java ~> checkSetValue ~> setValue
-
踩坑点切记添加jdk依赖 ~> 将官网下载的jdk-af660750b2f4.zip ~> jdk-af660750b2f4/src/share/classes/sun ~> 将sun目录复制到jdk根目录下 ~> setValue sun.reflect.annotation ~> AnnotationInvocationHandler.java ~> memberValue.setValue ~> readObject