CommonsCollections5


触发POC

利用IDEA创建一个maven项目,导入依赖

利用ysoserial生成payload:

得到

这里用的jdk1.8.0_121

触发Poc

 

分析利用链

Step 0

入口点是javax.management.BadAttributeValueExpExceptionreadObject()中的valObj.toString()

java.io.ObjectInputStream.readFields() 方法从流中读取持久字段并通过名称使其可用,这里是获取反序列化中的val字段,故valObj是我们可控的

要执行到toString()System.getSecurityManager需要为空,也就是当前的jvm环境不能启用安全管理器

 

Step 1

接下来看到org.apache.commons.collections.keyvalue.TiedMapEntrytoString()方法:

调用了this.getValue(),进一步调用了this.map.get(this.key),然而mapkey又是完全可控的

这样又回到了利用get()方法上

接下来的分析和CC1.Step 2后的一模一样了,不再赘述

 

构造EXP

Step 0

照抄CC1前半段,EXP part 1:

 

Step 1

根据分析,这里要使BadAttributeValueExpExceptionvalObjtiedMapEntry

EXP part 2设置属性:

 

整合EXP