From d1bf80a67007c1062ff25d10a384ec40d0f60fea Mon Sep 17 00:00:00 2001 From: Nanne Baars Date: Sat, 8 Apr 2017 08:04:16 +0200 Subject: [PATCH] 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