From 33e807797c4d07ee31ce9249865d09216cc47155 Mon Sep 17 00:00:00 2001 From: mayhew64 Date: Tue, 7 Feb 2017 23:51:05 -0500 Subject: [PATCH] Xstream RCE works now --- webgoat-container/pom.xml | 6 ++ .../webgoat/plugin/CatchAllConverter.java | 22 ++++++ .../org/owasp/webgoat/plugin/Contact.java | 18 +++++ .../webgoat/plugin/ContactConverter.java | 30 ++++++++ .../plugin/VulnerableComponentsLesson.java | 74 ++++++++++++------- .../html/VulnerableComponents.html | 17 ++++- .../en/VulnerableComponents_content4c.adoc | 11 ++- .../en/VulnerableComponents_content5.adoc | 6 +- .../en/VulnerableComponents_content5a.adoc | 14 ++++ .../plugin/i18n/WebGoatLabels.properties | 3 + 10 files changed, 161 insertions(+), 40 deletions(-) create mode 100644 webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/CatchAllConverter.java create mode 100644 webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/Contact.java create mode 100644 webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/ContactConverter.java create mode 100644 webgoat-lessons/vulnerable-components/src/main/resources/plugin/VulnerableComponents/lessonPlans/en/VulnerableComponents_content5a.adoc diff --git a/webgoat-container/pom.xml b/webgoat-container/pom.xml index cb744d3a0..5a1493b62 100644 --- a/webgoat-container/pom.xml +++ b/webgoat-container/pom.xml @@ -259,6 +259,12 @@ docker-maven-plugin 0.4.10 + + + com.thoughtworks.xstream + xstream + 1.4.6 + diff --git a/webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/CatchAllConverter.java b/webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/CatchAllConverter.java new file mode 100644 index 000000000..4c09f7e41 --- /dev/null +++ b/webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/CatchAllConverter.java @@ -0,0 +1,22 @@ +package org.owasp.webgoat.plugin; + +import com.thoughtworks.xstream.converters.Converter; +import com.thoughtworks.xstream.converters.MarshallingContext; +import com.thoughtworks.xstream.converters.UnmarshallingContext; +import com.thoughtworks.xstream.io.HierarchicalStreamReader; +import com.thoughtworks.xstream.io.HierarchicalStreamWriter; + +public class CatchAllConverter implements Converter { + + public boolean canConvert(Class clazz) { + return true; + } + + public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { + } + + public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { + return null; + } + +} \ No newline at end of file diff --git a/webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/Contact.java b/webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/Contact.java new file mode 100644 index 000000000..58b62fc5c --- /dev/null +++ b/webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/Contact.java @@ -0,0 +1,18 @@ +package org.owasp.webgoat.plugin; + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +@XStreamAlias("contact") +public class Contact { + @XStreamAlias("name") + String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} \ No newline at end of file diff --git a/webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/ContactConverter.java b/webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/ContactConverter.java new file mode 100644 index 000000000..76903c440 --- /dev/null +++ b/webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/ContactConverter.java @@ -0,0 +1,30 @@ +package org.owasp.webgoat.plugin; + +import com.thoughtworks.xstream.converters.Converter; +import com.thoughtworks.xstream.converters.MarshallingContext; +import com.thoughtworks.xstream.converters.UnmarshallingContext; +import com.thoughtworks.xstream.io.HierarchicalStreamReader; +import com.thoughtworks.xstream.io.HierarchicalStreamWriter; + +public class ContactConverter implements Converter { + + public boolean canConvert(Class clazz) { + return clazz.equals(Contact.class); + } + + public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { + Contact contact = (Contact) value; + writer.startNode("name"); + writer.setValue(contact.getName()); + writer.endNode(); + } + + public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { + Contact contact = new Contact(); + reader.moveDown(); + contact.setName(reader.getValue()); + reader.moveUp(); + return contact; + } + +} diff --git a/webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/VulnerableComponentsLesson.java b/webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/VulnerableComponentsLesson.java index be22ed45e..874384662 100644 --- a/webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/VulnerableComponentsLesson.java +++ b/webgoat-lessons/vulnerable-components/src/main/java/org/owasp/webgoat/plugin/VulnerableComponentsLesson.java @@ -1,6 +1,7 @@ package org.owasp.webgoat.plugin; -import com.thoughtworks.xstream.XStream; +import java.io.IOException; + import org.owasp.webgoat.assignments.AssignmentEndpoint; import org.owasp.webgoat.assignments.AssignmentPath; import org.owasp.webgoat.assignments.AttackResult; @@ -9,7 +10,8 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; -import java.io.IOException; +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.xml.DomDriver; /** * ************************************************************************************************* @@ -50,34 +52,50 @@ public class VulnerableComponentsLesson extends AssignmentEndpoint { @RequestMapping(method = RequestMethod.POST) public @ResponseBody AttackResult completed(@RequestParam String payload) throws IOException { - String process = "open"; - String arguments = "/Applications/Calculator.app"; + - String payload2 = "" + - "foo" + - "" + - "java.lang.Comparable" + - "" + - " " + - " " + - " " + process + "" + - " " + arguments + "" + - " " + - " " + - " start" + - "" + - "" + - ""; - XStream xstream = new XStream(); - String xml = (String)xstream.fromXML(payload2); - if (!payload.toString().equals("")) { - return trackProgress(success() - .feedback("vulnerable-components") - .feedbackArgs(xml) - .build()); - } else { + XStream xstream = new XStream(new DomDriver()); +// xstream.processAnnotations(Contact.class); +// xstream.registerConverter(new ContactConverter()); +// xstream.registerConverter(new CatchAllConverter(), XStream.PRIORITY_VERY_LOW); + +// Contact c = new Contact(); +// c.setName("Alvaro"); +// String sc = xstream.toXML(c); +// System.out.println(sc); + + +// String payload2 = "" + +// "foo" + +// "" + +// "java.lang.Comparable" + +// "" + +// " " + +// " " + +// " /Applications/Calculator.app/Contents/MacOS/Calculator" + +// " " + +// " " + +// " start" + +// "" + +// "" + +// ""; + + try { +// System.out.println("Payload:" + payload); + Contact expl = (Contact) xstream.fromXML(payload); + return trackProgress(success().feedback("vulnerable-components.fromXML").feedbackArgs(expl.toString()).build()); + + } catch (com.thoughtworks.xstream.converters.ConversionException ex) { + ex.printStackTrace(); + if (ex.getMessage().contains("Integer")) + { + return trackProgress(success().feedback("vulnerable-components.success").build()); + } return trackProgress(failed().feedback("vulnerable-components.close").build()); - } + + } + + } } diff --git a/webgoat-lessons/vulnerable-components/src/main/resources/plugin/VulnerableComponents/html/VulnerableComponents.html b/webgoat-lessons/vulnerable-components/src/main/resources/plugin/VulnerableComponents/html/VulnerableComponents.html index 8151c06ce..b905e3635 100644 --- a/webgoat-lessons/vulnerable-components/src/main/resources/plugin/VulnerableComponents/html/VulnerableComponents.html +++ b/webgoat-lessons/vulnerable-components/src/main/resources/plugin/VulnerableComponents/html/VulnerableComponents.html @@ -131,6 +131,12 @@
+ +
+ + +
@@ -142,9 +148,14 @@ enctype="application/json;charset=UTF-8">
- Enter Your XML payload: + action="#attack/307/100" enctype=""> + + + +
Enter the contact's xml representation: