From c72e8df532f1e9e8452c017d3d65fe1480d88563 Mon Sep 17 00:00:00 2001 From: Nanne Baars Date: Thu, 13 Oct 2016 12:09:01 -0400 Subject: [PATCH] Moved lessons to this project. --- pom.xml | 1 + webgoat-lessons/client-side-filtering/pom.xml | 12 + .../java/org/owasp/webgoat/plugin/Attack.java | 58 ++++ .../webgoat/plugin/ClientSideFiltering.java | 67 +++++ .../org/owasp/webgoat/plugin/Salaries.java | 108 ++++++++ .../html/ClientSideFiltering.html | 77 ++++++ .../html/clientSideFiltering-stage1.css | 3 + .../ClientSideFiltering/html/employees.xml | 254 ++++++++++++++++++ .../images/lesson1_header.jpg | Bin 0 -> 44854 bytes .../images/lesson1_workspace.jpg | Bin 0 -> 23580 bytes .../js/clientSideFiltering.js | 92 +++++++ .../lessonPlans/en/ClientSideFiltering.html | 12 + .../en/ClientSideFiltering_plan.adoc | 6 + .../lessonPlans/ru/ClientSideFiltering.html | 11 + .../en/ClientSideFiltering.html | 84 ++++++ .../clientside_firebug.jpg | Bin 0 -> 23035 bytes .../plugin/i18n/WebGoatLabels.properties | 26 ++ webgoat-lessons/http-basics/pom.xml | 12 + .../org/owasp/webgoat/plugin/HttpBasics.java | 69 +++++ .../webgoat/plugin/HttpBasicsLesson.java | 65 +++++ .../owasp/webgoat/plugin/HttpBasicsQuiz.java | 73 +++++ .../plugin/HttpBasics/html/HttpBasics.html | 86 ++++++ .../HttpBasics/lessonPlans/de/HttpBasics.html | 29 ++ .../lessonPlans/en/HttpBasics_content1.adoc | 8 + .../lessonPlans/en/HttpBasics_content2.adoc | 4 + .../lessonPlans/en/HttpBasics_plan.adoc | 28 ++ .../HttpBasics/lessonPlans/ru/HttpBasics.html | 33 +++ .../en/HttpBasics_solution.adoc | 5 + .../lessonSolutions/html/HttpBasics.html | 14 + .../plugin/i18n/WebGoatLabels.properties | 2 + .../plugin/i18n/WebGoatLabels_de.properties | 2 + .../plugin/i18n/WebGoatLabels_fr.properties | 2 + .../plugin/i18n/WebGoatLabels_ru.properties | 2 + webgoat-lessons/pom.xml | 69 +++++ 34 files changed, 1314 insertions(+) create mode 100644 webgoat-lessons/client-side-filtering/pom.xml create mode 100644 webgoat-lessons/client-side-filtering/src/main/java/org/owasp/webgoat/plugin/Attack.java create mode 100644 webgoat-lessons/client-side-filtering/src/main/java/org/owasp/webgoat/plugin/ClientSideFiltering.java create mode 100644 webgoat-lessons/client-side-filtering/src/main/java/org/owasp/webgoat/plugin/Salaries.java create mode 100644 webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/html/ClientSideFiltering.html create mode 100644 webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/html/clientSideFiltering-stage1.css create mode 100644 webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/html/employees.xml create mode 100644 webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/images/lesson1_header.jpg create mode 100644 webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/images/lesson1_workspace.jpg create mode 100644 webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/js/clientSideFiltering.js create mode 100644 webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonPlans/en/ClientSideFiltering.html create mode 100644 webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonPlans/en/ClientSideFiltering_plan.adoc create mode 100644 webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonPlans/ru/ClientSideFiltering.html create mode 100644 webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonSolutions/en/ClientSideFiltering.html create mode 100644 webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonSolutions/en/ClientSideFiltering_files/clientside_firebug.jpg create mode 100644 webgoat-lessons/client-side-filtering/src/main/resources/plugin/i18n/WebGoatLabels.properties create mode 100644 webgoat-lessons/http-basics/pom.xml create mode 100644 webgoat-lessons/http-basics/src/main/java/org/owasp/webgoat/plugin/HttpBasics.java create mode 100644 webgoat-lessons/http-basics/src/main/java/org/owasp/webgoat/plugin/HttpBasicsLesson.java create mode 100644 webgoat-lessons/http-basics/src/main/java/org/owasp/webgoat/plugin/HttpBasicsQuiz.java create mode 100644 webgoat-lessons/http-basics/src/main/resources/plugin/HttpBasics/html/HttpBasics.html create mode 100644 webgoat-lessons/http-basics/src/main/resources/plugin/HttpBasics/lessonPlans/de/HttpBasics.html create mode 100644 webgoat-lessons/http-basics/src/main/resources/plugin/HttpBasics/lessonPlans/en/HttpBasics_content1.adoc create mode 100644 webgoat-lessons/http-basics/src/main/resources/plugin/HttpBasics/lessonPlans/en/HttpBasics_content2.adoc create mode 100644 webgoat-lessons/http-basics/src/main/resources/plugin/HttpBasics/lessonPlans/en/HttpBasics_plan.adoc create mode 100644 webgoat-lessons/http-basics/src/main/resources/plugin/HttpBasics/lessonPlans/ru/HttpBasics.html create mode 100644 webgoat-lessons/http-basics/src/main/resources/plugin/HttpBasics/lessonSolutions/en/HttpBasics_solution.adoc create mode 100644 webgoat-lessons/http-basics/src/main/resources/plugin/HttpBasics/lessonSolutions/html/HttpBasics.html create mode 100644 webgoat-lessons/http-basics/src/main/resources/plugin/i18n/WebGoatLabels.properties create mode 100644 webgoat-lessons/http-basics/src/main/resources/plugin/i18n/WebGoatLabels_de.properties create mode 100644 webgoat-lessons/http-basics/src/main/resources/plugin/i18n/WebGoatLabels_fr.properties create mode 100644 webgoat-lessons/http-basics/src/main/resources/plugin/i18n/WebGoatLabels_ru.properties create mode 100644 webgoat-lessons/pom.xml diff --git a/pom.xml b/pom.xml index ace67beec..4119de203 100644 --- a/pom.xml +++ b/pom.xml @@ -168,6 +168,7 @@ webgoat-container + webgoat-lessons diff --git a/webgoat-lessons/client-side-filtering/pom.xml b/webgoat-lessons/client-side-filtering/pom.xml new file mode 100644 index 000000000..c44a2605f --- /dev/null +++ b/webgoat-lessons/client-side-filtering/pom.xml @@ -0,0 +1,12 @@ + + 4.0.0 + client-side-filtering + jar + + org.owasp.webgoat.lesson + webgoat-lessons-parent + 8.0-SNAPSHOT + + + diff --git a/webgoat-lessons/client-side-filtering/src/main/java/org/owasp/webgoat/plugin/Attack.java b/webgoat-lessons/client-side-filtering/src/main/java/org/owasp/webgoat/plugin/Attack.java new file mode 100644 index 000000000..74ebb7242 --- /dev/null +++ b/webgoat-lessons/client-side-filtering/src/main/java/org/owasp/webgoat/plugin/Attack.java @@ -0,0 +1,58 @@ +package org.owasp.webgoat.plugin; + +import org.owasp.webgoat.lessons.LessonEndpoint; +import org.owasp.webgoat.lessons.LessonEndpointMapping; +import org.owasp.webgoat.lessons.model.AttackResult; +import org.springframework.web.bind.annotation.RequestMapping; +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; + +/** + * ************************************************************************************************ + * This file is part of WebGoat, an Open Web Application Security Project utility. For details, + * please see http://www.owasp.org/ + *

+ * Copyright (c) 2002 - 20014 Bruce Mayhew + *

+ * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License along with this program; if + * not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + *

+ * Getting Source ============== + *

+ * Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository for free software + * projects. + *

+ * + * @author WebGoat + * @version $Id: $Id + * @since August 11, 2016 + */ +@LessonEndpointMapping +public class Attack extends LessonEndpoint { + + @RequestMapping(method = RequestMethod.POST) + public @ResponseBody AttackResult completed(@RequestParam String answer) throws IOException { + if ("450000".equals(answer)) { + return trackProgress(AttackResult.success()); + } else { + return trackProgress(AttackResult.failed("You are close, try again")); + } + } + + @Override + public String getPath() { + return "/clientSideFiltering/attack1"; + } +} diff --git a/webgoat-lessons/client-side-filtering/src/main/java/org/owasp/webgoat/plugin/ClientSideFiltering.java b/webgoat-lessons/client-side-filtering/src/main/java/org/owasp/webgoat/plugin/ClientSideFiltering.java new file mode 100644 index 000000000..0656709fd --- /dev/null +++ b/webgoat-lessons/client-side-filtering/src/main/java/org/owasp/webgoat/plugin/ClientSideFiltering.java @@ -0,0 +1,67 @@ +package org.owasp.webgoat.plugin; + +import com.google.common.collect.Lists; +import org.owasp.webgoat.lessons.Category; +import org.owasp.webgoat.lessons.NewLesson; +import org.owasp.webgoat.session.WebSession; + +import java.util.List; + +/** + * ************************************************************************************************ + * This file is part of WebGoat, an Open Web Application Security Project utility. For details, + * please see http://www.owasp.org/ + *

+ * Copyright (c) 2002 - 20014 Bruce Mayhew + *

+ * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License along with this program; if + * not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + *

+ * Getting Source ============== + *

+ * Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository for free software + * projects. + *

+ * + * @author WebGoat + * @version $Id: $Id + * @since October 12, 2016 + */ +public class ClientSideFiltering extends NewLesson { + + @Override + public Category getDefaultCategory() { + return Category.ACCESS_CONTROL; + } + + @Override + public List getHints(WebSession webSession) { + return Lists.newArrayList("Many sites attempt to restrict access to resources by role.", + "Developers frequently make mistakes implementing this scheme.", + "Attempt combinations of users, roles, and resources."); + } + + @Override + public Integer getDefaultRanking() { + return 10; + } + + @Override + public String getTitle() { + return "Client side filtering"; + } + + @Override + public String getId() { + return "ClientSideFiltering"; + } +} diff --git a/webgoat-lessons/client-side-filtering/src/main/java/org/owasp/webgoat/plugin/Salaries.java b/webgoat-lessons/client-side-filtering/src/main/java/org/owasp/webgoat/plugin/Salaries.java new file mode 100644 index 000000000..4e9a2d42c --- /dev/null +++ b/webgoat-lessons/client-side-filtering/src/main/java/org/owasp/webgoat/plugin/Salaries.java @@ -0,0 +1,108 @@ +package org.owasp.webgoat.plugin; + +/** + * + */ + +import org.apache.ecs.html.TD; +import org.apache.ecs.html.TR; +import org.apache.ecs.html.Table; +import org.owasp.webgoat.lessons.LessonEndpoint; +import org.owasp.webgoat.lessons.LessonEndpointMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +@LessonEndpointMapping +public class Salaries extends LessonEndpoint { + + @RequestMapping(method = RequestMethod.GET) + public void invoke(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String userId = req.getParameter("userId"); + NodeList nodes = null; + File d = new File(getPluginDirectory(), "ClientSideFiltering/html/employees.xml"); + XPathFactory factory = XPathFactory.newInstance(); + XPath xPath = factory.newXPath(); + InputSource inputSource = new InputSource(new FileInputStream(d)); + + StringBuffer sb = new StringBuffer(); + + sb.append("/Employees/Employee/UserID | "); + sb.append("/Employees/Employee/FirstName | "); + sb.append("/Employees/Employee/LastName | "); + sb.append("/Employees/Employee/SSN | "); + sb.append("/Employees/Employee/Salary "); + + String expression = sb.toString(); + + try { + nodes = (NodeList) xPath.evaluate(expression, inputSource, + XPathConstants.NODESET); + } catch (XPathExpressionException e) { + e.printStackTrace(); + } + int nodesLength = nodes.getLength(); + + + TR tr; + + int COLUMNS = 5; + + Table t2 = null; + if (nodesLength > 0) { + t2 = new Table().setCellSpacing(0).setCellPadding(0) + .setBorder(1).setWidth("90%").setAlign("center"); + tr = new TR(); + tr.addElement(new TD().addElement("UserID")); + tr.addElement(new TD().addElement("First Name")); + tr.addElement(new TD().addElement("Last Name")); + tr.addElement(new TD().addElement("SSN")); + tr.addElement(new TD().addElement("Salary")); + t2.addElement(tr); + } + + tr = new TR(); + + for (int i = 0; i < nodesLength; i++) { + Node node = nodes.item(i); + + if (i % COLUMNS == 0) { + tr = new TR(); + tr.setID(node.getTextContent()); + //tr.setStyle("display: none"); + } + + tr.addElement(new TD().addElement(node.getTextContent())); + + if (i % COLUMNS == (COLUMNS - 1)) { + t2.addElement(tr); + } + } + + if (t2 != null) { + resp.getWriter().println(t2.toString()); + } else { + resp.getWriter().println("No Results"); + } + } + + @Override + public String getPath() { + return "/clientSideFiltering/salaries"; + } + + +} diff --git a/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/html/ClientSideFiltering.html b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/html/ClientSideFiltering.html new file mode 100644 index 000000000..16df814f0 --- /dev/null +++ b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/html/ClientSideFiltering.html @@ -0,0 +1,77 @@ + + + + +

+ +
+ +
+ +
+ + +
+ + + +
+
+


+

Select user:

+

+ +
+
+ + + + + + + + + + + + +
User IDFirst NameLast NameSSNSalary
+
+
+ + + + + + + + +
What is Neville Bartholomew's salary?
+
+
+ +
+
+ +
+ + + + + + diff --git a/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/html/clientSideFiltering-stage1.css b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/html/clientSideFiltering-stage1.css new file mode 100644 index 000000000..76bb26818 --- /dev/null +++ b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/html/clientSideFiltering-stage1.css @@ -0,0 +1,3 @@ +#lesson_wrapper {height: 435px;width: 500px;} +#lesson_header {background-image: url(../images/lesson1_header.jpg); width: 490px;padding-right: 10px;padding-top: 60px;background-repeat: no-repeat;} +.lesson_workspace {background-image: url(../images/lesson1_workspace.jpg); width: 489px;height: 325px;padding-left: 10px;padding-top: 10px;background-repeat: no-repeat;} \ No newline at end of file diff --git a/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/html/employees.xml b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/html/employees.xml new file mode 100644 index 000000000..31b95296b --- /dev/null +++ b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/html/employees.xml @@ -0,0 +1,254 @@ + + + + 101 + Larry + Stooge + 9175 Guilford Rd + New York, NY + 443-689-0192 + 1012000 + 386-09-5451 + 55000 + 2578546969853547 + 5000 + Does not work well with others + Constantly harassing coworkers + 10106 + + 102 + 111 + 112 + + + + 102 + Moe + Stooge + 3013 AMD Ave + New York, NY + 443-938-5301 + 3082003 + 936-18-4524 + 140000 + NA + 0 + Very dominating over Larry and Curly + Hit Curly over head + 101013 + + 112 + + + + 103 + Curly + Stooge + 1112 Crusoe Lane + New York, NY + 410-667-6654 + 2122001 + 961-08-0047 + 50000 + NA + 0 + Owes three-thousand to company for fradulent purchases + Hit Moe back + 101014 + + 102 + 111 + 112 + + + + 104 + Eric + Walker + 1160 Prescott Rd + New York, NY + 410-887-1193 + 12152005 + 445-66-5565 + 13000 + NA + 0 + Late. Always needs help. Too intern-ish. + Bothering Larry about webgoat problems + 101013 + + 107 + 102 + 111 + 112 + + + + 105 + Tom + Cat + 2211 HyperThread Rd. + New York, NY + 443-599-0762 + 1011999 + 792-14-6364 + 80000 + 5481360857968521 + 30000 + Co-Owner. + NA + 0 + + 106 + 102 + 111 + 112 + + + + 106 + Jerry + Mouse + 3011 Unix Drive + New York, NY + 443-699-3366 + 1011999 + 858-55-4452 + 70000 + 6981754825013564 + 20000 + Co-Owner. + NA + 0 + + 102 + 111 + 112 + + + + 107 + David + Giambi + 5132 DIMM Avenue + New York, NY + 610-521-8413 + 5011999 + 439-20-9405 + 100000 + 6981754825018101 + 10000 + Strong work habbit. Questionable ethics. + Hacked into accounting server. Modified personal pay. + 61402 + + 102 + 111 + 112 + + + + 108 + Bruce + McGuirre + 8899 FreeBSD Drive<script>alert(document.cookie)</script> + New York, NY + 610-282-1103 + 3012000 + 707-95-9482 + 110000 + 6981754825854136 + 30000 + Enjoys watching others struggle in exercises. + Tortuous Boot Camp workout at 5am. Employees felt sick. + 61502 + + 107 + 102 + 111 + 112 + + + + 109 + Sean + Livingston + 6422 dFlyBSD Road + New York, NY + 610-878-9549 + 6012003 + 136-55-1046 + 130000 + 6981754825014510 + 5000 + Has some fascination with Steelers. Go Ravens. + Late to work 30 days in row due to excessive Halo 2 + 72804 + + 107 + 102 + 111 + 112 + + + + 110 + Joanne + McDougal + 5567 Broadband Lane + New York, NY + 610-213-6341 + 1012001 + 789-54-2413 + 90000 + 6981754825081054 + 300 + Finds it necessary to leave early every day. + Used company cc to purchase new car. Limit adjusted. + 112005 + + 106 + 102 + 111 + 112 + + + + 111 + John + Wayne + 129 Third St + New York, NY + 610-213-1134 + 1012001 + 129-69-4572 + 200000 + 4437334565679921 + 300 + + + 112005 + + 112 + + + + 112 + Neville + Bartholomew + 1 Corporate Headquarters + San Jose, CA + 408-587-0024 + 3012000 + 111-111-1111 + 450000 + 4803389267684109 + 300 + + + 112005 + + 112 + + + diff --git a/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/images/lesson1_header.jpg b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/images/lesson1_header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60a809af01cd39c520a84573529811cc745ca362 GIT binary patch literal 44854 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 literal 0 HcmV?d00001 diff --git a/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/images/lesson1_workspace.jpg b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/images/lesson1_workspace.jpg new file mode 100644 index 0000000000000000000000000000000000000000..292d25654bdb690fd67b05bab161168aa66fe990 GIT binary patch literal 23580 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 literal 0 HcmV?d00001 diff --git a/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/js/clientSideFiltering.js b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/js/clientSideFiltering.js new file mode 100644 index 000000000..f0cbf4920 --- /dev/null +++ b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/js/clientSideFiltering.js @@ -0,0 +1,92 @@ +var dataFetched = false; +var json; + +//TODO: reimplement this + +function selectUser() { + + var newEmployeeID = document.getElementById("UserSelect").options[document.getElementById("UserSelect").selectedIndex].value; + + if (navigator.userAgent.indexOf("MSIE ") == -1) { + document.getElementById("employeeRecord").innerHTML = document.getElementById(newEmployeeID).innerHTML; + } + else { + //IE is a buggy .... + + var TR = document.createElement("tr"); + var TD0 = document.createElement("td"); + var TD1 = document.createElement("td"); + var TD2 = document.createElement("td"); + var TD3 = document.createElement("td"); + var TD4 = document.createElement("td"); + + var text0 = document.createTextNode(document.getElementById(newEmployeeID).childNodes[0].firstChild.nodeValue); + var text1 = document.createTextNode(document.getElementById(newEmployeeID).childNodes[1].firstChild.nodeValue); + var text2 = document.createTextNode(document.getElementById(newEmployeeID).childNodes[2].firstChild.nodeValue); + var text3 = document.createTextNode(document.getElementById(newEmployeeID).childNodes[3].firstChild.nodeValue); + var text4 = document.createTextNode(document.getElementById(newEmployeeID).childNodes[4].firstChild.nodeValue); + + TD0.appendChild(text0); + TD1.appendChild(text1); + TD2.appendChild(text2); + TD3.appendChild(text3); + TD4.appendChild(text4); + + TR.appendChild(TD0); + TR.appendChild(TD1); + TR.appendChild(TD2); + TR.appendChild(TD3); + TR.appendChild(TD4); + + document.getElementById("employeeRecord").appendChild(TR); + } + +} + +function fetchUserData() { + if (!dataFetched) { + dataFetched = true; + ajaxFunction(document.getElementById("userID").value); + } +} + +function ajaxFunction(userId) { + + var xmlHttp; + try { + + // Firefox, Opera 8.0+, Safari + xmlHttp = new XMLHttpRequest(); + + } + catch (e) { + + // Internet Explorer + try { + xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); + } + catch (e) { + try { + + xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); + } + catch (e) { + alert("Your browser does not support AJAX!"); + return false; + } + } + } + xmlHttp.onreadystatechange = function () { + var result = xmlHttp.responseText; + + if (xmlHttp.readyState == 4) { + //We need to do this because IE is buggy + var newdiv = document.createElement("div"); + newdiv.innerHTML = result; + var container = document.getElementById("hiddenEmployeeRecords"); + container.appendChild(newdiv); + } + } + xmlHttp.open("GET", "/WebGoat/clientSideFiltering/salaries?userId=" + userId, true); + xmlHttp.send(null); +} \ No newline at end of file diff --git a/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonPlans/en/ClientSideFiltering.html b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonPlans/en/ClientSideFiltering.html new file mode 100644 index 000000000..dc703a7b2 --- /dev/null +++ b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonPlans/en/ClientSideFiltering.html @@ -0,0 +1,12 @@ +
+

Lesson Plan Title: Client Side Filtering

+
+

Concept / Topic To Teach:

+ +It is always a good practice to send to the client only information which they are supposed +to have access to. In this lesson, too much information is being sent to the client, creating +a serious access control problem. + +

General Goal(s):

+For this exercise, your mission is exploit the extraneous information being returned by the +server to discover information to which you should not have access. \ No newline at end of file diff --git a/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonPlans/en/ClientSideFiltering_plan.adoc b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonPlans/en/ClientSideFiltering_plan.adoc new file mode 100644 index 000000000..ec5852f77 --- /dev/null +++ b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonPlans/en/ClientSideFiltering_plan.adoc @@ -0,0 +1,6 @@ +== Client Side Filtering + +It is always a good practice to send to the client only information which they are supposed +to have access to. In this lesson, too much information is being sent to the client, creating +a serious access control problem. For this exercise, your mission is exploit the extraneous information being returned +by the server to discover information to which you should not have access. \ No newline at end of file diff --git a/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonPlans/ru/ClientSideFiltering.html b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonPlans/ru/ClientSideFiltering.html new file mode 100644 index 000000000..301231591 --- /dev/null +++ b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonPlans/ru/ClientSideFiltering.html @@ -0,0 +1,11 @@ +
+

Название урока: Фильтрация данных на стороне клиента

+
+

Тема для изучения:

+ +Всегда считается хорошей практикой отправлять на сторону клиента только ту информацию, доступ к которой он имеет. +В данном уроке на сторону клиента будет отправлено очень много информации, что создаст серьёзные проблемы с контролем доступа к ней. + +

Основные цели и задачи:

+Ваша цель состоит в том, чтоб среди принимаемых со стороны сервера данных найти ту +информацию, доступа к которой у вас нет. diff --git a/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonSolutions/en/ClientSideFiltering.html b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonSolutions/en/ClientSideFiltering.html new file mode 100644 index 000000000..3a67cfb18 --- /dev/null +++ b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonSolutions/en/ClientSideFiltering.html @@ -0,0 +1,84 @@ + + + + +Client Side Filtering + + + +

Lesson Plan Title: Client Side Filtering

+ +

Concept / Topic To Teach:
+It is always a good practice to send to the client +only information which they are supposed to have access to. +In this lesson, too much information is being sent to the +client, creating a serious access control problem. +

+ +

General Goal(s):
+For this exercise, your mission is exploit the extraneous +information being returned by the server to discover information +to which you should not have access. +

+ +Solution:
+

+This Lab consists of two Stages. In the first Stage you have to +get sensitive information . In the second one you have to fix the problem.
+

+Stage 1 +

+Use Firebug to solve this stage. If you are using IE you can try it with +IEWatch.

+ +First use any person from the list and see what you get. After doing this you +can search for a specific person in Firebug. Make sure you find the hidden table with +the information, including the salary and so on. In the same table you will find +Neville. + +Clientside Filtering
+Inspect HTML on Firebug + +

+Now write the salary into the text edit box and submit your answer! +

+Stage 2 +

+In this stage you have to modify the clientSideFiltering.jsp which you will find under +the WebContent in the lessons/Ajax folder. The Problem is that +the server sends all information to the client. As you could see +even if it is hidden it is easy to find the sensitive date. In this +stage you will add a filter to the XPath queries. In this file you will find +following construct:

+ + StringBuffer sb = new StringBuffer();
+ + sb.append("/Employees/Employee/UserID | ");
+ sb.append("/Employees/Employee/FirstName | ");
+ sb.append("/Employees/Employee/LastName | ");
+ sb.append("/Employees/Employee/SSN | ");
+ sb.append("/Employees/Employee/Salary ");
+ + String expression = sb.toString();
+
+

+This string will be used for the XPath query. You have to guarantee that a manger only +can see employees which are working for him. To archive this you can use +filters in XPath. Following code will exactly do this:

+ + StringBuffer sb = new StringBuffer();
+ + sb.append("/Employees/Employee[Managers/Manager/text() = " + userId + "]/UserID | ");
+ sb.append("/Employees/Employee[Managers/Manager/text() = " + userId + "]/FirstName | ");
+ sb.append("/Employees/Employee[Managers/Manager/text() = " + userId + "]/LastName | ");
+ sb.append("/Employees/Employee[Managers/Manager/text() = " + userId + "]/SSN | ");
+ sb.append("/Employees/Employee[Managers/Manager/text() = " + userId + "]/Salary ");
+ + String expression = sb.toString();
+
+

+Now only information is sent to your client you are authorized for. You can click on the button. +

+ + + \ No newline at end of file diff --git a/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonSolutions/en/ClientSideFiltering_files/clientside_firebug.jpg b/webgoat-lessons/client-side-filtering/src/main/resources/plugin/ClientSideFiltering/lessonSolutions/en/ClientSideFiltering_files/clientside_firebug.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e51a40ad0c9d63beaf1fb70b16394cab5c767f49 GIT binary patch literal 23035 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