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