From 36b10c07bc80b5284c8ae574ea161ab721b940be Mon Sep 17 00:00:00 2001 From: Nanne Baars Date: Thu, 23 Mar 2017 11:49:34 +0100 Subject: [PATCH 01/22] First attempt for challenge --- .../src/main/resources/html/Challenge.html | 38 ++++++++++++++++-- .../src/main/resources/images/webgoat2.png | Bin 0 -> 35040 bytes .../resources/lessonPlans/en/Challenge_1.adoc | 9 +++++ .../lessonPlans/en/Challenge_content1.adoc | 1 - .../en/Challenge_introduction.adoc | 9 +++++ webgoat-server/pom.xml | 10 ++--- 6 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 webgoat-lessons/challenge/src/main/resources/images/webgoat2.png create mode 100644 webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_1.adoc delete mode 100644 webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_content1.adoc create mode 100644 webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_introduction.adoc diff --git a/webgoat-lessons/challenge/src/main/resources/html/Challenge.html b/webgoat-lessons/challenge/src/main/resources/html/Challenge.html index 00c0e2c2f..b5a072d9b 100644 --- a/webgoat-lessons/challenge/src/main/resources/html/Challenge.html +++ b/webgoat-lessons/challenge/src/main/resources/html/Challenge.html @@ -3,10 +3,40 @@
- - -
+
+
+
+
+
+
+ +
+
+
+ +
+ + +
+
+ + +
+ +
+
+
+
+
+
+
\ No newline at end of file diff --git a/webgoat-lessons/challenge/src/main/resources/images/webgoat2.png b/webgoat-lessons/challenge/src/main/resources/images/webgoat2.png new file mode 100644 index 0000000000000000000000000000000000000000..c53a1f75b4a3343f03014336462ba0fc6c2e4011 GIT binary patch literal 35040 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 zq6KyG($ZHDGwebgoat-container ${project.version} - - - - - + + org.owasp.webgoat.lesson + challenge + ${project.version} + org.owasp.webgoat.lesson client-side-filtering From debc1e4b737ead176267abe6ed0e19585921c5cb Mon Sep 17 00:00:00 2001 From: Nanne Baars Date: Thu, 23 Mar 2017 16:12:04 +0100 Subject: [PATCH 02/22] Added more for challenge 1 including input form group for flag --- .../org/owasp/webgoat/plugin/Challenge1.java | 56 ++++++++++++++++++ .../java/org/owasp/webgoat/plugin/Flag.java | 52 ++++++++++++++++ .../webgoat/plugin/SolutionConstants.java | 13 ++++ .../src/main/resources/html/Challenge.html | 17 +++++- .../resources/i18n/WebGoatLabels.properties | 1 + .../src/main/resources/images/webgoat2.png | Bin 35040 -> 89932 bytes 6 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/Challenge1.java create mode 100644 webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/Flag.java create mode 100644 webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/SolutionConstants.java diff --git a/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/Challenge1.java b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/Challenge1.java new file mode 100644 index 000000000..2b2a4f1d4 --- /dev/null +++ b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/Challenge1.java @@ -0,0 +1,56 @@ +package org.owasp.webgoat.plugin; + +import org.owasp.webgoat.assignments.AssignmentEndpoint; +import org.owasp.webgoat.assignments.AssignmentPath; +import org.owasp.webgoat.assignments.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; + +import static org.owasp.webgoat.plugin.SolutionConstants.PASSWORD; + +/** + * ************************************************************************************************ + * 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 + */ +@AssignmentPath("/challenge/1") +public class Challenge1 extends AssignmentEndpoint { + + @RequestMapping(method = RequestMethod.POST) + public + @ResponseBody + AttackResult completed(@RequestParam String username, @RequestParam String password) throws IOException { + if (PASSWORD.equals(password)) { + return success().feedback("challenge.solved").feedbackArgs(Flag.FLAGS.get(1)).build(); + } + return failed().build(); + } +} diff --git a/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/Flag.java b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/Flag.java new file mode 100644 index 000000000..6ac1a0e62 --- /dev/null +++ b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/Flag.java @@ -0,0 +1,52 @@ +package org.owasp.webgoat.plugin; + +import com.google.common.collect.Maps; +import org.owasp.webgoat.assignments.Endpoint; +import org.owasp.webgoat.session.UserTracker; +import org.owasp.webgoat.session.WebSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +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.ResponseStatus; + +import javax.annotation.PostConstruct; +import java.util.Map; +import java.util.UUID; +import java.util.stream.IntStream; + +/** + * @author nbaars + * @since 3/23/17. + */ +public class Flag extends Endpoint { + + public static final Map FLAGS = Maps.newHashMap(); + @Autowired + private UserTracker userTracker; + @Autowired + private WebSession webSession; + + @PostConstruct + public void initFlags() { + IntStream.range(1, 4).forEach(i -> FLAGS.put(i, UUID.randomUUID().toString())); + } + + @Override + public String getPath() { + return "challenge/flag"; + } + + @RequestMapping(method = RequestMethod.POST) + @ResponseStatus(HttpStatus.OK) + public void postFlag(@RequestParam String flag, @RequestParam int challengeNumber) { + String expectedFlag = FLAGS.get(challengeNumber); + if (expectedFlag.equals(flag)) { + userTracker.assignmentSolved(webSession.getCurrentLesson(), "Challenge" + challengeNumber); + } else { + userTracker.assignmentFailed(webSession.getCurrentLesson()); + } + } + +} diff --git a/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/SolutionConstants.java b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/SolutionConstants.java new file mode 100644 index 000000000..dda05d492 --- /dev/null +++ b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/SolutionConstants.java @@ -0,0 +1,13 @@ +package org.owasp.webgoat.plugin; + +/** + * Interface with constants so we can easily change the flags + * + * @author nbaars + * @since 3/23/17. + */ +public interface SolutionConstants { + + String PASSWORD = "!!webgoat_admin_1234!!"; + +} diff --git a/webgoat-lessons/challenge/src/main/resources/html/Challenge.html b/webgoat-lessons/challenge/src/main/resources/html/Challenge.html index b5a072d9b..76398ed1a 100644 --- a/webgoat-lessons/challenge/src/main/resources/html/Challenge.html +++ b/webgoat-lessons/challenge/src/main/resources/html/Challenge.html @@ -33,10 +33,23 @@ -

-
+ +
+
+
+
+ +
+
+ +
+ +
+
+
+ \ No newline at end of file diff --git a/webgoat-lessons/challenge/src/main/resources/i18n/WebGoatLabels.properties b/webgoat-lessons/challenge/src/main/resources/i18n/WebGoatLabels.properties index cbae74dcb..7a0256c24 100644 --- a/webgoat-lessons/challenge/src/main/resources/i18n/WebGoatLabels.properties +++ b/webgoat-lessons/challenge/src/main/resources/i18n/WebGoatLabels.properties @@ -1 +1,2 @@ challenge.title=WebGoat Challenge +challenge.solved=Congratulations, you solved the challenge. Here is your flag: {0} diff --git a/webgoat-lessons/challenge/src/main/resources/images/webgoat2.png b/webgoat-lessons/challenge/src/main/resources/images/webgoat2.png index c53a1f75b4a3343f03014336462ba0fc6c2e4011..394793d4b4879927227af837fbd14b39e161547e 100644 GIT binary patch literal 89932 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 CvIQsr delta 97 zcmX@JkM+SsrVSOoo9(66F}f=#l&2=8=O>mZq~#>0E0m{KM}{O<_*LcP`nzP8_=h+e zMP?cpMCFEM`Gn+T`-fzgL}j@eMrI|O`sIci`(` Date: Thu, 23 Mar 2017 20:30:23 +0100 Subject: [PATCH 03/22] wip --- .../owasp/webgoat/session/LessonTracker.java | 2 +- .../org/owasp/webgoat/users/Scoreboard.java | 79 +++++++++++++++++++ .../src/main/resources/html/Challenge.html | 2 +- .../resources/lessonPlans/en/Challenge_1.adoc | 10 +-- 4 files changed, 82 insertions(+), 11 deletions(-) create mode 100644 webgoat-container/src/main/java/org/owasp/webgoat/users/Scoreboard.java diff --git a/webgoat-container/src/main/java/org/owasp/webgoat/session/LessonTracker.java b/webgoat-container/src/main/java/org/owasp/webgoat/session/LessonTracker.java index edd0d1483..3d16e90a8 100644 --- a/webgoat-container/src/main/java/org/owasp/webgoat/session/LessonTracker.java +++ b/webgoat-container/src/main/java/org/owasp/webgoat/session/LessonTracker.java @@ -61,7 +61,7 @@ public class LessonTracker implements Serializable { } /** - * Mark an assingment as solved + * Mark an assignment as solved * * @param solvedAssignment the assignment which the user solved */ diff --git a/webgoat-container/src/main/java/org/owasp/webgoat/users/Scoreboard.java b/webgoat-container/src/main/java/org/owasp/webgoat/users/Scoreboard.java new file mode 100644 index 000000000..f6809852d --- /dev/null +++ b/webgoat-container/src/main/java/org/owasp/webgoat/users/Scoreboard.java @@ -0,0 +1,79 @@ +package org.owasp.webgoat.users; + +import com.google.common.collect.Maps; +import com.google.common.io.ByteStreams; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.SneakyThrows; +import org.owasp.webgoat.lessons.Assignment; +import org.owasp.webgoat.session.LessonTracker; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.serializer.DefaultDeserializer; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.util.List; +import java.util.Map; + +/** + * Temp endpoint just for the CTF. + * + * @author nbaars + * @since 3/23/17. + */ +@RestController +public class Scoreboard { + + @AllArgsConstructor + @Getter + private class Challenge { + private List rankings; + } + + @AllArgsConstructor + @Getter + private class Ranking { + private String username; + private int flagsCaptured; + } + + private final String webgoatDirectory; + + public Scoreboard(@Value("${webgoat.server.directory}") final String webgoatDirectory) { + this.webgoatDirectory = webgoatDirectory; + } + + @GetMapping("/scoreboard") + public Challenge getRankings() { + File homeDir = new File(webgoatDirectory); + File[] files = homeDir.listFiles(f -> f.getName().endsWith(".progress")); + for (File progressFile : files) { + String username = progressFile.getName().replace(".progress", ""); + Map storage = load(progressFile); + LessonTracker lessonTracker = storage.get("WebGoat Challenge"); + Map lessonOverview = lessonTracker.getLessonOverview(); + for (int i = 0; i <= 5; i++) { + //lessonOverview.e + + } + } + return null; + } + + @SneakyThrows + private Map load(File progressFile) { + Map storage = Maps.newHashMap(); + if (progressFile.exists() && progressFile.isFile()) { + DefaultDeserializer deserializer = new DefaultDeserializer(Thread.currentThread().getContextClassLoader()); + try (FileInputStream fis = new FileInputStream(progressFile)) { + byte[] b = ByteStreams.toByteArray(fis); + storage = (Map) deserializer.deserialize(new ByteArrayInputStream(b)); + } + } + return storage; + } + +} diff --git a/webgoat-lessons/challenge/src/main/resources/html/Challenge.html b/webgoat-lessons/challenge/src/main/resources/html/Challenge.html index 76398ed1a..b6bc7f41e 100644 --- a/webgoat-lessons/challenge/src/main/resources/html/Challenge.html +++ b/webgoat-lessons/challenge/src/main/resources/html/Challenge.html @@ -36,7 +36,7 @@ -
+
diff --git a/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_1.adoc b/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_1.adoc index b1d8e837f..3a0b7ee9f 100644 --- a/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_1.adoc +++ b/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_1.adoc @@ -1,9 +1 @@ -== Welcome to the WebGoat challenge (CTF) - -In this CTF you will need to solve a couple of challenges, each challenge will give you a flag which you will -need to post in order to gain points. -Flags have the following format: a7179f89-906b-4fec-9d99-f15b796e7208 - - -Have fun!! -Team WebGoat \ No newline at end of file +=== Admin forgot password can you help? \ No newline at end of file From a3d2ed171a34737475f739f883051e0c790b7bf2 Mon Sep 17 00:00:00 2001 From: Nanne Baars Date: Sat, 8 Apr 2017 08:04:16 +0200 Subject: [PATCH 04/22] First steps for challenge 2 --- .../org/owasp/webgoat/plugin/Challenge2.java | 31 ++++++ .../owasp/webgoat/plugin/ShopEndpoint.java | 71 +++++++++++++ .../webgoat/plugin/SolutionConstants.java | 1 + .../src/main/resources/css/challenge2.css | 33 +++++++ .../src/main/resources/html/Challenge.html | 93 +++++++++++++++++- .../main/resources/images/samsung-black.jpg | Bin 0 -> 12078 bytes .../main/resources/images/samsung-grey.jpg | Bin 0 -> 11227 bytes .../src/main/resources/js/challenge2.js | 33 +++++++ 8 files changed, 258 insertions(+), 4 deletions(-) create mode 100644 webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/Challenge2.java create mode 100644 webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/ShopEndpoint.java create mode 100644 webgoat-lessons/challenge/src/main/resources/css/challenge2.css create mode 100644 webgoat-lessons/challenge/src/main/resources/images/samsung-black.jpg create mode 100644 webgoat-lessons/challenge/src/main/resources/images/samsung-grey.jpg create mode 100644 webgoat-lessons/challenge/src/main/resources/js/challenge2.js diff --git a/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/Challenge2.java b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/Challenge2.java new file mode 100644 index 000000000..8bc916874 --- /dev/null +++ b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/Challenge2.java @@ -0,0 +1,31 @@ +package org.owasp.webgoat.plugin; + +import org.owasp.webgoat.assignments.AssignmentEndpoint; +import org.owasp.webgoat.assignments.AssignmentPath; +import org.owasp.webgoat.assignments.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; + +import static org.owasp.webgoat.plugin.SolutionConstants.SUPER_COUPON_CODE; + +/** + * @author nbaars + * @since 4/6/17. + */ +@AssignmentPath("/challenge/2") +public class Challenge2 extends AssignmentEndpoint { + + @RequestMapping(method = RequestMethod.POST) + public + @ResponseBody + AttackResult completed(@RequestParam String couponCode) throws IOException { + if (SUPER_COUPON_CODE.equals(couponCode)) { + return success().feedback("challenge.solved").feedbackArgs(Flag.FLAGS.get(2)).build(); + } + return failed().build(); + } +} diff --git a/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/ShopEndpoint.java b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/ShopEndpoint.java new file mode 100644 index 000000000..fc0323613 --- /dev/null +++ b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/ShopEndpoint.java @@ -0,0 +1,71 @@ +package org.owasp.webgoat.plugin; + +import com.beust.jcommander.internal.Lists; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.apache.commons.lang3.RandomStringUtils; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +import static org.owasp.webgoat.plugin.SolutionConstants.SUPER_COUPON_CODE; + +/** + * @author nbaars + * @since 4/6/17. + */ +@RestController +public class ShopEndpoint { + + @AllArgsConstructor + private class CouponCodes { + + @Getter + private List codes = Lists.newArrayList(); + + public boolean contains(String code) { + return codes.stream().anyMatch(c -> c.getCode().equals(code)); + } + } + + @AllArgsConstructor + @Getter + private class CouponCode { + private String code; + private int discount; + } + + private CouponCodes couponCodes; + + public ShopEndpoint() { + List codes = Lists.newArrayList(); + for (int i = 0; i < 9; i++) { + codes.add(new CouponCode(RandomStringUtils.random(10), i * 100)); + } + this.couponCodes = new CouponCodes(codes); + } + + @GetMapping(value = "/coupons/{user}", produces = MediaType.APPLICATION_JSON_VALUE) + public CouponCodes getDiscountCodes(@PathVariable String user) { + if ("Tom".equals(user)) { + return couponCodes; + } + return null; + } + + @GetMapping(value = "/coupons/valid/{code}", produces = MediaType.APPLICATION_JSON_VALUE) + public boolean isValidCouponCode(@PathVariable String code) { + return couponCodes.contains(code); + } + + @GetMapping(value = "/coupons", produces = MediaType.APPLICATION_JSON_VALUE) + public CouponCodes coupons() { + List all = Lists.newArrayList(); + all.addAll(this.couponCodes.getCodes()); + all.add(new CouponCode(SUPER_COUPON_CODE, 100)); + return new CouponCodes(all); + } +} diff --git a/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/SolutionConstants.java b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/SolutionConstants.java index dda05d492..5450e02ae 100644 --- a/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/SolutionConstants.java +++ b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/SolutionConstants.java @@ -9,5 +9,6 @@ package org.owasp.webgoat.plugin; public interface SolutionConstants { String PASSWORD = "!!webgoat_admin_1234!!"; + String SUPER_COUPON_CODE = "get_if_for_free"; } diff --git a/webgoat-lessons/challenge/src/main/resources/css/challenge2.css b/webgoat-lessons/challenge/src/main/resources/css/challenge2.css new file mode 100644 index 000000000..7bca52cbe --- /dev/null +++ b/webgoat-lessons/challenge/src/main/resources/css/challenge2.css @@ -0,0 +1,33 @@ +ul > li{margin-right:25px;font-weight:lighter;cursor:pointer} +li.active{border-bottom:3px solid silver;} + +.item-photo{display:flex;justify-content:center;align-items:center;border-right:1px solid #f6f6f6;} +.menu-items{list-style-type:none;font-size:11px;display:inline-flex;margin-bottom:0px;margin-top:20px} +.btn-success{width:100%;border-radius:0px;} +.section{width:100%;margin-left:-15px;padding:2px;padding-left:15px;padding-right:15px;background:#f8f9f9} +.title-price{margin-top:30px;margin-bottom:0px;color:black} +.title-attr{margin-top:0px;margin-bottom:0px;color:black;} +.btn-minus{cursor:pointer;font-size:7px;display:flex;align-items:center;padding:5px;padding-left:10px;padding-right:10px;border:1px solid gray;border-radius:2px;border-right:0px;} +.btn-plus{cursor:pointer;font-size:7px;display:flex;align-items:center;padding:5px;padding-left:10px;padding-right:10px;border:1px solid gray;border-radius:2px;border-left:0px;} +div.section > div {width:100%;display:inline-flex;} +div.section > div > input {margin:0px;padding-left:5px;font-size:10px;padding-right:5px;max-width:18%;text-align:center;} +.attr,.attr2{cursor:pointer;margin-right:5px;height:20px;font-size:10px;padding:2px;border:1px solid gray;border-radius:2px;} +.attr.active,.attr2.active{ border:1px solid orange;} + +@media (max-width: 426px) { + .container {margin-top:0px !important;} + .container > .row{padding:0px !important;} + .container > .row > .col-xs-12.col-sm-5{ + padding-right:0px ; + } + .container > .row > .col-xs-12.col-sm-9 > div > p{ + padding-left:0px !important; + padding-right:0px !important; + } + .container > .row > .col-xs-12.col-sm-9 > div > ul{ + padding-left:10px !important; + + } + .section{width:104%;} + .menu-items{padding-left:0px;} +} \ No newline at end of file diff --git a/webgoat-lessons/challenge/src/main/resources/html/Challenge.html b/webgoat-lessons/challenge/src/main/resources/html/Challenge.html index b6bc7f41e..59de297d1 100644 --- a/webgoat-lessons/challenge/src/main/resources/html/Challenge.html +++ b/webgoat-lessons/challenge/src/main/resources/html/Challenge.html @@ -36,11 +36,13 @@
- +
-
- +
+
@@ -49,7 +51,90 @@
- + + +
+ + +
+
+
+
+
+ +
+
+

Samsung Galaxy S8 Plus 64GB Android Phone

+
Manufacturer Samsung ยท + (5054 reviews) +
+ +
+ PRICE +
+

US $899

+ +
+
+ COLOR +
+
+
+
+
+
+
+
+ CAPACITY +
+
+
16 GB
+
32 GB
+
+
+
+
+ QUANTITY +
+
+
+ +
+
+
+ +
+ +
+ Like
+
+
+
+
+
+
+ +
+
+
+ +
+
+ + +
+ +
+
+
+
+
+ \ No newline at end of file diff --git a/webgoat-lessons/challenge/src/main/resources/images/samsung-black.jpg b/webgoat-lessons/challenge/src/main/resources/images/samsung-black.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b0c1f809f8822b3f63d0cfafc325c9c47a9b3b0 GIT binary patch literal 12078 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 UOc-4XG?&x^zSIL|=losyKcD{;1ONa4 literal 0 HcmV?d00001 diff --git a/webgoat-lessons/challenge/src/main/resources/js/challenge2.js b/webgoat-lessons/challenge/src/main/resources/js/challenge2.js new file mode 100644 index 000000000..a9e649e8c --- /dev/null +++ b/webgoat-lessons/challenge/src/main/resources/js/challenge2.js @@ -0,0 +1,33 @@ +$(document).ready(function(){ + //-- Click on detail + $("ul.menu-items > li").on("click",function(){ + $("ul.menu-items > li").removeClass("active"); + $(this).addClass("active"); + }) + + $(".attr,.attr2").on("click",function(){ + var clase = $(this).attr("class"); + + $("." + clase).removeClass("active"); + $(this).addClass("active"); + }) + + //-- Click on QUANTITY + $(".btn-minus").on("click",function(){ + var now = $(".section > div > input").val(); + if ($.isNumeric(now)){ + if (parseInt(now) -1 > 0){ now--;} + $(".section > div > input").val(now); + }else{ + $(".section > div > input").val("1"); + } + }) + $(".btn-plus").on("click",function(){ + var now = $(".section > div > input").val(); + if ($.isNumeric(now)){ + $(".section > div > input").val(parseInt(now)+1); + }else{ + $(".section > div > input").val("1"); + } + }) +}) \ No newline at end of file From 08f0c94a57cfbbbdfd7eea905f4eca5a5b6b31bd Mon Sep 17 00:00:00 2001 From: Nanne Baars Date: Thu, 23 Mar 2017 21:03:20 +0100 Subject: [PATCH 05/22] Fixed logout --- webgoat-container/src/main/resources/templates/main_new.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webgoat-container/src/main/resources/templates/main_new.html b/webgoat-container/src/main/resources/templates/main_new.html index a791f2026..925781ffa 100644 --- a/webgoat-container/src/main/resources/templates/main_new.html +++ b/webgoat-container/src/main/resources/templates/main_new.html @@ -62,7 +62,7 @@