From 5e061d5bad0f8276c6ffebe1436a521b70f30abb Mon Sep 17 00:00:00 2001
From: "sherif.fathy"
Date: Thu, 28 Dec 2006 15:35:10 +0000
Subject: [PATCH] Added JSONInjection, SilentTransactions Modified The install
guide
git-svn-id: http://webgoat.googlecode.com/svn/trunk@48 4033779f-a91e-0410-96ef-6bf7bf53c507
---
.../owasp/webgoat/lessons/JSONInjection.java | 220 +++++++++++++++++
.../webgoat/lessons/SilentTransactions.java | 221 ++++++++++++++++++
.../WebContent/lesson_plans/DOMInjection.html | 6 +-
.../lesson_plans/JSONInjection.html | 23 ++
.../lesson_plans/SilentTransactions.html | 24 ++
.../project/doc/WebGoatv4UsersGuide_DRAFT.doc | Bin 723456 -> 770560 bytes
6 files changed, 491 insertions(+), 3 deletions(-)
create mode 100644 webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/JSONInjection.java
create mode 100644 webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/SilentTransactions.java
create mode 100644 webgoat/main/project/WebContent/lesson_plans/JSONInjection.html
create mode 100644 webgoat/main/project/WebContent/lesson_plans/SilentTransactions.html
diff --git a/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/JSONInjection.java b/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/JSONInjection.java
new file mode 100644
index 000000000..f9ff8a44b
--- /dev/null
+++ b/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/JSONInjection.java
@@ -0,0 +1,220 @@
+package org.owasp.webgoat.lessons;
+
+import org.owasp.webgoat.session.WebSession;
+
+import org.apache.ecs.Element;
+import org.apache.ecs.ElementContainer;
+import org.apache.ecs.StringElement;
+import org.apache.ecs.html.Div;
+import org.apache.ecs.html.Form;
+import org.apache.ecs.html.Table;
+import org.apache.ecs.html.TR;
+import org.apache.ecs.html.TD;
+import org.apache.ecs.html.Input;
+import org.apache.ecs.html.BR;
+
+import java.io.PrintWriter;
+import java.util.List;
+import java.util.ArrayList;
+
+public class JSONInjection extends LessonAdapter {
+
+ private final static Integer DEFAULT_RANKING = new Integer(30);
+ private final static String TRAVEL_FROM = "travelFrom";
+ private final static String TRAVEL_TO = "travelTo";
+
+ /**
+ * Copyright (c) 2002 Free Software Foundation developed under the
+ * custody of the Open Web Application Security Project
+ * (http://www.owasp.org) This software package is published by OWASP
+ * under the GPL. You should read and accept the LICENSE before you
+ * use, modify and/or redistribute this software.
+ *
+ * @author sherif@macadamian.com
+ * @created December 25, 2006
+ */
+
+ public void handleRequest(WebSession s) {
+
+ try
+ {
+ if(s.getParser().getRawParameter("from", "").equals("ajax"))
+ {
+ String lineSep = System.getProperty("line.separator");
+ String jsonStr = "{" + lineSep +
+ "\"From\": \"Boston\"," + lineSep +
+ "\"To\": \"Seattle\", " + lineSep +
+ "\"flights\": [" + lineSep +
+ "{\"stops\": \"0\", \"transit\" : \"N/A\", \"price\": \"600$\"}," + lineSep +
+ "{\"stops\": \"2\", \"transit\" : \"Newark,Chicago\", \"price\": \"300$\"} " + lineSep +
+ "]" + lineSep +
+ "}" ;
+ s.getResponse().setContentType("text/html");
+ s.getResponse().setHeader("Cache-Control", "no-cache");
+ PrintWriter out = new PrintWriter(s.getResponse().getOutputStream());
+ out.print(jsonStr);
+ out.flush();
+ out.close();
+ return;
+ }
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ }
+
+ Form form = new Form( getFormAction(), Form.POST ).setName( "form" ).setEncType( "" );
+ form.setOnSubmit("check();");
+
+ form.addElement( createContent( s ) );
+
+ setContent(form);
+
+ }
+
+ /**
+ * Description of the Method
+ *
+ * @param s Current WebSession
+ */
+
+ protected Element createContent(WebSession s)
+ {
+ ElementContainer ec = new ElementContainer();
+ String lineSep = System.getProperty("line.separator");
+ String script = "" + lineSep;
+ ec.addElement( new StringElement(script));
+ Table t1 = new Table().setCellSpacing(0).setCellPadding(0).setBorder(0).setWidth("90%").setAlign("center");
+
+ TR tr = new TR();
+
+ tr.addElement( new TD("From: "));
+ Input in = new Input( Input.TEXT , TRAVEL_FROM ,"" );
+ in.addAttribute("onkeyup", "getFlights();");
+ tr.addElement( new TD(in) );
+
+ t1.addElement( tr );
+
+ tr = new TR();
+ tr.addElement( new TD("To: "));
+ in = new Input( Input.TEXT , TRAVEL_TO ,"" );
+ in.addAttribute("onkeyup", "getFlights();");
+ tr.addElement( new TD(in) );
+
+ t1.addElement( tr );
+ ec.addElement(t1);
+
+ ec.addElement(new BR());
+ ec.addElement(new BR());
+ Div div = new Div();
+ div.addAttribute("name", "flightsDiv");
+ div.addAttribute("id", "flightsDiv");
+ ec.addElement(div);
+
+ Input b = new Input();
+ b.setType( Input.SUBMIT );
+ b.setValue( "Submit" );
+ b.setName("SUBMIT");
+ ec.addElement(b);
+
+ Input price2Submit = new Input();
+ price2Submit.setType( Input.HIDDEN);
+ price2Submit.setName("price2Submit");
+ ec.addElement( price2Submit );
+ if (s.getParser().getRawParameter("radio0" , "").equals("on"))
+ {
+ String price = s.getParser().getRawParameter("price2Submit" , "");
+ price = price.replace("$", "");
+
+ if (Integer.parseInt(price) < 600)
+ {
+ makeSuccess(s);
+ }
+ else
+ {
+ s.setMessage("You are close, try to set the price for the non-stop flight to be less than 600$");
+ }
+ }
+ return ec;
+ }
+
+ protected Category getDefaultCategory()
+ {
+ return AbstractLesson.AJAX_SECURITY;
+ }
+
+ protected List getHints()
+ {
+ List hints = new ArrayList();
+ hints.add( "JSON stands for JavaScript Object Notation." );
+ hints.add( "JSON is a way of representing data just like XML." );
+ hints.add( "The JSON payload is easily interceptable." );
+ hints.add( "Intercept the reply, change the 600$ to 25$." );
+ return hints;
+
+ }
+
+ protected Integer getDefaultRanking()
+ {
+ return DEFAULT_RANKING;
+ }
+
+ /**
+ * Gets the title attribute of the HelloScreen object
+ *
+ * @return The title value
+ */
+ public String getTitle()
+ {
+ return ( "JSON Injection" );
+ }
+
+
+}
diff --git a/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/SilentTransactions.java b/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/SilentTransactions.java
new file mode 100644
index 000000000..d7a660d56
--- /dev/null
+++ b/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/SilentTransactions.java
@@ -0,0 +1,221 @@
+package org.owasp.webgoat.lessons;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.ecs.Element;
+import org.apache.ecs.ElementContainer;
+import org.apache.ecs.StringElement;
+import org.apache.ecs.html.BR;
+import org.apache.ecs.html.Div;
+import org.apache.ecs.html.Form;
+import org.apache.ecs.html.H1;
+import org.apache.ecs.html.H3;
+import org.apache.ecs.html.Input;
+import org.apache.ecs.html.PRE;
+import org.apache.ecs.html.TD;
+import org.apache.ecs.html.TR;
+import org.apache.ecs.html.Table;
+import org.owasp.webgoat.session.WebSession;
+
+public class SilentTransactions extends LessonAdapter {
+ private final static Integer DEFAULT_RANKING = new Integer(40);
+
+ /**
+ * Copyright (c) 2002 Free Software Foundation developed under the
+ * custody of the Open Web Application Security Project
+ * (http://www.owasp.org) This software package is published by OWASP
+ * under the GPL. You should read and accept the LICENSE before you
+ * use, modify and/or redistribute this software.
+ *
+ * @author sherif@macadamian.com
+ * @created December 26, 2006
+ */
+
+ public void handleRequest(WebSession s) {
+
+ try
+ {
+ if(s.getParser().getRawParameter("from", "").equals("ajax"))
+ {
+ if (s.getParser().getRawParameter( "confirm", "").equals("Confirm"))
+ {
+ s.getResponse().setContentType("text/html");
+ s.getResponse().setHeader("Cache-Control", "no-cache");
+ PrintWriter out = new PrintWriter(s.getResponse().getOutputStream());
+ out.print("
* Congratulations. You have successfully completed this lesson.");
+ out.flush();
+ out.close();
+ return;
+ }
+ else if (s.getParser().getRawParameter( "confirm", "").equals("Transferring"))
+ {
+ s.getResponse().setContentType("text/html");
+ s.getResponse().setHeader("Cache-Control", "no-cache");
+ PrintWriter out = new PrintWriter(s.getResponse().getOutputStream());
+ out.print("
The transaction had been completed successfully.");
+ out.flush();
+ out.close();
+ return;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ }
+
+ Form form = new Form( getFormAction(), Form.POST ).setName( "form" ).setEncType( "" );
+
+ form.addElement( createContent( s ) );
+
+ setContent(form);
+
+ }
+
+ /**
+ * Description of the Method
+ *
+ * @param s Current WebSession
+ */
+
+ protected Element createContent(WebSession s)
+ {
+ ElementContainer ec = new ElementContainer();
+ String lineSep = System.getProperty("line.separator");
+ String script = "" + lineSep;
+
+ ec.addElement( new StringElement(script) );
+ ec.addElement( new H1("Welcome to WebGoat Banking System"));
+ ec.addElement( new BR() );
+ ec.addElement( new H3("Account Summary:"));
+
+ Table t1 = new Table().setCellSpacing(0).setCellPadding(0).setBorder(1).setWidth("70%").setAlign("left");
+ ec.addElement( new BR() );
+ TR tr = new TR();
+ tr.addElement( new TD( new StringElement( "Account Number" ) ));
+ tr.addElement( new TD( new StringElement( "Account Balance" ) ));
+ t1.addElement( tr );
+
+ tr = new TR();
+ tr.addElement( new TD( new StringElement( "007-872108-023" )));
+ tr.addElement( new TD( new StringElement( "11983" )));
+ t1.addElement( tr );
+
+ ec.addElement( t1 );
+ ec.addElement( new BR() );
+ ec.addElement( new BR() );
+
+ ec.addElement( new H3("
Transfer Information:
"));
+ ec.addElement( new BR() );
+
+ t1 = new Table().setCellSpacing(0).setCellPadding(0).setBorder(1).setWidth("70%").setAlign("left");
+
+ tr = new TR();
+ tr.addElement( new TD( new StringElement( "Transfer to Account:" ) ));
+ Input newAccount = new Input();
+ newAccount.setType( Input.TEXT );
+ newAccount.setName( "newAccount" );
+ newAccount.setValue( "" );
+ tr.addElement( new TD( newAccount ));
+ t1.addElement( tr );
+
+ tr = new TR();
+ tr.addElement( new TD( new StringElement( "Transfer Amount:" )));
+ Input amount = new Input();
+ amount.setType( Input.TEXT );
+ amount.setName( "amount" );
+ amount.setValue( 0 );
+ tr.addElement( new TD( amount ));
+ t1.addElement( tr );
+
+ ec.addElement( t1 );
+
+ ec.addElement( new PRE() );
+ Input b = new Input();
+ b.setType( Input.BUTTON );
+ b.setName( "confirm" );
+ b.setValue( "Confirm" );
+ b.setOnClick( "processData();" );
+ ec.addElement( b );
+
+ ec.addElement( new BR());
+ Div div = new Div();
+ div.addAttribute("name", "resultsDiv");
+ div.addAttribute("id", "resultsDiv");
+ div.setStyle("font-weight: bold;color:red;");
+ ec.addElement(div);
+
+ return ec;
+ }
+
+ protected Category getDefaultCategory()
+ {
+ return AbstractLesson.AJAX_SECURITY;
+ }
+
+ protected List getHints()
+ {
+ List hints = new ArrayList();
+ hints.add("Check the javascript in the HTML source.");
+ hints.add("Check how the application calls a specific javascript function to execute the transaction.");
+ hints.add("Try to navigate to 'javascript:submitData(1234556,11000);'");
+ return hints;
+
+ }
+
+ protected Integer getDefaultRanking()
+ {
+ return DEFAULT_RANKING;
+ }
+
+ /**
+ * Gets the title attribute of the HelloScreen object
+ *
+ * @return The title value
+ */
+ public String getTitle()
+ {
+ return ( "Silent Transactions Attacks" );
+ }
+
+
+}
diff --git a/ webgoat/main/project/WebContent/lesson_plans/DOMInjection.html b/ webgoat/main/project/WebContent/lesson_plans/DOMInjection.html
index 3428c2e93..7287be2e2 100644
--- a/ webgoat/main/project/WebContent/lesson_plans/DOMInjection.html
+++ b/ webgoat/main/project/WebContent/lesson_plans/DOMInjection.html
@@ -10,13 +10,13 @@ How to perform DOM injection attacks.
How the attacks works:
Some applications specially the ones that uses AJAX manipulates and updates the DOM
-directly using javascript, DHTML and eval.
+directly using javascript, DHTML and eval() method.
An attacker may take advantage of that by intercepting the reply and try to inject some
javascript commands to exploit his attacks.
General Goal(s):
-* Your victim is a system that takes an activatation key to allow you to use it.
+* Your victim is a system that takes an activatation key to allow you to use it.
* Your goal should be to try to get to enable the activate button.
-* Take some time to see the HTML source in order to understand how does it work.
+* Take some time to see the HTML source in order to understand how the key validation process works.
diff --git a/ webgoat/main/project/WebContent/lesson_plans/JSONInjection.html b/ webgoat/main/project/WebContent/lesson_plans/JSONInjection.html
new file mode 100644
index 000000000..7a1e08e40
--- /dev/null
+++ b/ webgoat/main/project/WebContent/lesson_plans/JSONInjection.html
@@ -0,0 +1,23 @@
+
+
Lesson Plan Title: How to Perform JSON Injection
+
+
+Concept / Topic To Teach:
+This lesson teaches how to perform JSON Injection Attacks.
+
+
+
+How the attacks works:
+
+JavaScript Object Notation (JSON) is a simple and effective lightweight data exchange format. JSON can be in a lot of forms such as arrays, lists, hashtables and other data structures.
+JSON is widely used in AJAX and Web2.0 application and is favored by programmers over XML because of its ease of use and speed.
+However, JSON, like XML is prone to Injection attacks. A malacious attackers can inject the reply from the server and inject some aribtrary values in there.
+
+
+General Goal(s):
+
+* You are travelling from Boston, MA- Airport code BOS to Seattle, WA - Airport code SEA.
+* Once you enter the three digits code of the airport, an AJAX request will be executed asking for the tickets price.
+* You will notice that there are two flights available, an expensive one with no stops and another cheaper one with 2 stops.
+* Your goal is to try to get the one with no stops but for a cheaper price.
+
diff --git a/ webgoat/main/project/WebContent/lesson_plans/SilentTransactions.html b/ webgoat/main/project/WebContent/lesson_plans/SilentTransactions.html
new file mode 100644
index 000000000..7f052b18f
--- /dev/null
+++ b/ webgoat/main/project/WebContent/lesson_plans/SilentTransactions.html
@@ -0,0 +1,24 @@
+
+
Lesson Plan Title: How to Perform Silent Transactions Attacks.
+
+
+Concept / Topic To Teach:
+This lesson teaches how to perform silent transactions attacks.
+
+
+
+How the attacks works:
+
+Any system that silently processes transactions using a single submission is dangerous to the client.
+For example, if a normal web application allows a simple URL submission, a preset session attack will
+allow the attacker to complete a transaction without the user’s authorization.
+In Ajax, it gets worse: the transaction is silent; it happens with no user feedback on the page,
+so an injected attack script may be able to steal money from the client without authorization.
+
+General Goal(s):
+
+* This is a sample internet banking application - money transfers page.
+* It shows below your balance, the account you are transferring to and amount you will transfer.
+* The application uses AJAX to submit the transaction after doing some basic client side validations.
+* Your goal is to try to bypass the user's authorization and silently execute the transaction
+
diff --git a/ webgoat/main/project/doc/WebGoatv4UsersGuide_DRAFT.doc b/ webgoat/main/project/doc/WebGoatv4UsersGuide_DRAFT.doc
index 1933d6d80ea58758c7692835110ab17a470576c5..a755343bf6fe39b1a5ba0b4da6f93273b614ca31 100644
GIT binary patch
delta 44629
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
delta 28302
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
LGUl8$C{_J`o3EOK