[基础部分]
反射:
Java代码审计基础之反射 - FreeBuf网络安全行业门户
反序列化:
java对象的序列化以及反序列化详解 - 少说点话 - 博客园
[漏洞学习]
Apache Commons Collections反序列化漏洞解析
反序列寻找构造链。链的开头是TransformedMap和InvokerTransformer这两个类。而链的结尾要逐渐推演替换到有相应readObject方法的类,这样才能达到反序列化触发漏洞的目的。InvokerTransformer可以构造任意反射,而ChainedTransformer可以顺序执行一个由InvokerTransformer数组组成的反射链以达到执行命令的效果。
看这个AnnotationInvocationHandler反序列化的这块。这里的this.memberValues是之前我们传入的TransformedMap,一个map
他的内容只有"value":2
entrySet()方法返回一个set集合,类似于如下:
var4 = this.memberValues.entrySet().iterator();
这块的值就是this.memberValues调用父类的entrySet()然后返回AbstractInputCheckedMapDecorator的entrySet类型的迭代器。
var5是var4.next()。
然后var5.setValue
这块就是AbstractInputCheckedMapDecorator.setValue,里面调用thisparent.checkSetValue也就是TransformedMap.checkSetValue,
checkSetValue这块执行了TransformedMap的transform方法,执行我们构造好的命令
其中使用new Class[0]而不是null,是因为当new Class[0]传入for循环的时候不会抛出异常,而null会