Compare commits
12 Commits
nbaars/bui
...
nbaars/187
Author | SHA1 | Date | |
---|---|---|---|
bf02077427 | |||
e1e00bca73 | |||
d59153d6d7 | |||
87fae00f03 | |||
3f6a74ad86 | |||
1d37ee0877 | |||
4f6ab25ebd | |||
af687e71fe | |||
83ed4c3d5c | |||
62cdfd0824 | |||
e7457f4821 | |||
4efaf87c7e |
5
.github/workflows/build.yml
vendored
5
.github/workflows/build.yml
vendored
@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout git repository
|
- name: Checkout git repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4.1.6
|
||||||
- name: Setup python
|
- name: Setup python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
@ -26,12 +26,13 @@ jobs:
|
|||||||
distribution: 'temurin'
|
distribution: 'temurin'
|
||||||
java-version: '21'
|
java-version: '21'
|
||||||
- name: Pre-commit checks
|
- name: Pre-commit checks
|
||||||
uses: pre-commit/action@v3.0.0
|
uses: pre-commit/action@v3.0.1
|
||||||
- name: pre-commit-ci-lite
|
- name: pre-commit-ci-lite
|
||||||
uses: pre-commit-ci/lite-action@v1.1.0
|
uses: pre-commit-ci/lite-action@v1.1.0
|
||||||
if: always()
|
if: always()
|
||||||
build:
|
build:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
needs: [ pre-commit ]
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: true
|
fail-fast: true
|
||||||
matrix:
|
matrix:
|
||||||
|
14
pom.xml
14
pom.xml
@ -66,13 +66,13 @@
|
|||||||
<bootstrap.version>5.3.3</bootstrap.version>
|
<bootstrap.version>5.3.3</bootstrap.version>
|
||||||
<cglib.version>3.3.0</cglib.version>
|
<cglib.version>3.3.0</cglib.version>
|
||||||
<!-- do not update necessary for lesson -->
|
<!-- do not update necessary for lesson -->
|
||||||
<checkstyle.version>3.4.0</checkstyle.version>
|
<checkstyle.version>3.6.0</checkstyle.version>
|
||||||
<commons-collections.version>3.2.1</commons-collections.version>
|
<commons-collections.version>3.2.1</commons-collections.version>
|
||||||
<commons-compress.version>1.27.1</commons-compress.version>
|
<commons-compress.version>1.27.1</commons-compress.version>
|
||||||
<commons-io.version>2.16.1</commons-io.version>
|
<commons-io.version>2.17.0</commons-io.version>
|
||||||
<commons-lang3.version>3.14.0</commons-lang3.version>
|
<commons-lang3.version>3.14.0</commons-lang3.version>
|
||||||
<commons-text.version>1.12.0</commons-text.version>
|
<commons-text.version>1.12.0</commons-text.version>
|
||||||
<guava.version>33.3.0-jre</guava.version>
|
<guava.version>33.3.1-jre</guava.version>
|
||||||
<jacoco.version>0.8.11</jacoco.version>
|
<jacoco.version>0.8.11</jacoco.version>
|
||||||
<java.version>21</java.version>
|
<java.version>21</java.version>
|
||||||
<jaxb.version>2.3.1</jaxb.version>
|
<jaxb.version>2.3.1</jaxb.version>
|
||||||
@ -93,13 +93,13 @@
|
|||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
<thymeleaf.version>3.1.2.RELEASE</thymeleaf.version>
|
<thymeleaf.version>3.1.2.RELEASE</thymeleaf.version>
|
||||||
<waittimeForServerStart>30</waittimeForServerStart>
|
<waittimeForServerStart>60</waittimeForServerStart>
|
||||||
<webdriver.version>5.9.2</webdriver.version>
|
<webdriver.version>5.9.2</webdriver.version>
|
||||||
<webgoat.context>/</webgoat.context>
|
<webgoat.context>/</webgoat.context>
|
||||||
<webgoat.sslenabled>false</webgoat.sslenabled>
|
<webgoat.sslenabled>false</webgoat.sslenabled>
|
||||||
<webjars-locator-core.version>0.59</webjars-locator-core.version>
|
<webjars-locator-core.version>0.59</webjars-locator-core.version>
|
||||||
<webwolf.context>/</webwolf.context>
|
<webwolf.context>/</webwolf.context>
|
||||||
<wiremock.version>3.9.1</wiremock.version>
|
<wiremock.version>3.9.2</wiremock.version>
|
||||||
<xml-resolver.version>1.2</xml-resolver.version>
|
<xml-resolver.version>1.2</xml-resolver.version>
|
||||||
<xstream.version>1.4.5</xstream.version>
|
<xstream.version>1.4.5</xstream.version>
|
||||||
<!-- do not update necessary for lesson -->
|
<!-- do not update necessary for lesson -->
|
||||||
@ -235,7 +235,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.testcontainers</groupId>
|
<groupId>org.testcontainers</groupId>
|
||||||
<artifactId>testcontainers</artifactId>
|
<artifactId>testcontainers</artifactId>
|
||||||
<version>1.20.1</version>
|
<version>1.20.3</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -374,7 +374,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.terma</groupId>
|
<groupId>com.github.terma</groupId>
|
||||||
<artifactId>javaniotcpproxy</artifactId>
|
<artifactId>javaniotcpproxy</artifactId>
|
||||||
<version>1.5</version>
|
<version>1.6</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.RequestParam;
|
|||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
@RequestMapping("/JWT/jku")
|
@RequestMapping("/JWT/")
|
||||||
@RestController
|
@RestController
|
||||||
@AssignmentHints({
|
@AssignmentHints({
|
||||||
"jwt-jku-hint1",
|
"jwt-jku-hint1",
|
||||||
@ -30,7 +30,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
})
|
})
|
||||||
public class JWTHeaderJKUEndpoint extends AssignmentEndpoint {
|
public class JWTHeaderJKUEndpoint extends AssignmentEndpoint {
|
||||||
|
|
||||||
@PostMapping("/follow/{user}")
|
@PostMapping("jku/follow/{user}")
|
||||||
public @ResponseBody String follow(@PathVariable("user") String user) {
|
public @ResponseBody String follow(@PathVariable("user") String user) {
|
||||||
if ("Jerry".equals(user)) {
|
if ("Jerry".equals(user)) {
|
||||||
return "Following yourself seems redundant";
|
return "Following yourself seems redundant";
|
||||||
@ -39,7 +39,7 @@ public class JWTHeaderJKUEndpoint extends AssignmentEndpoint {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/delete")
|
@PostMapping("jku/delete")
|
||||||
public @ResponseBody AttackResult resetVotes(@RequestParam("token") String token) {
|
public @ResponseBody AttackResult resetVotes(@RequestParam("token") String token) {
|
||||||
if (StringUtils.isEmpty(token)) {
|
if (StringUtils.isEmpty(token)) {
|
||||||
return failed(this).feedback("jwt-invalid-token").build();
|
return failed(this).feedback("jwt-invalid-token").build();
|
||||||
|
@ -52,7 +52,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
"jwt-kid-hint5",
|
"jwt-kid-hint5",
|
||||||
"jwt-kid-hint6"
|
"jwt-kid-hint6"
|
||||||
})
|
})
|
||||||
@RequestMapping("/JWT/kid")
|
@RequestMapping("/JWT/")
|
||||||
public class JWTHeaderKIDEndpoint extends AssignmentEndpoint {
|
public class JWTHeaderKIDEndpoint extends AssignmentEndpoint {
|
||||||
|
|
||||||
private final LessonDataSource dataSource;
|
private final LessonDataSource dataSource;
|
||||||
@ -61,7 +61,7 @@ public class JWTHeaderKIDEndpoint extends AssignmentEndpoint {
|
|||||||
this.dataSource = dataSource;
|
this.dataSource = dataSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/follow/{user}")
|
@PostMapping("kid/follow/{user}")
|
||||||
public @ResponseBody String follow(@PathVariable("user") String user) {
|
public @ResponseBody String follow(@PathVariable("user") String user) {
|
||||||
if ("Jerry".equals(user)) {
|
if ("Jerry".equals(user)) {
|
||||||
return "Following yourself seems redundant";
|
return "Following yourself seems redundant";
|
||||||
@ -70,7 +70,7 @@ public class JWTHeaderKIDEndpoint extends AssignmentEndpoint {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/delete")
|
@PostMapping("kid/delete")
|
||||||
public @ResponseBody AttackResult resetVotes(@RequestParam("token") String token) {
|
public @ResponseBody AttackResult resetVotes(@RequestParam("token") String token) {
|
||||||
if (StringUtils.isEmpty(token)) {
|
if (StringUtils.isEmpty(token)) {
|
||||||
return failed(this).feedback("jwt-invalid-token").build();
|
return failed(this).feedback("jwt-invalid-token").build();
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
package org.owasp.webgoat.lessons.passwordreset;
|
package org.owasp.webgoat.lessons.passwordreset;
|
||||||
|
|
||||||
|
import static org.springframework.util.StringUtils.hasText;
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -117,7 +119,7 @@ public class ResetLinkAssignment extends AssignmentEndpoint {
|
|||||||
BindingResult bindingResult,
|
BindingResult bindingResult,
|
||||||
@CurrentUsername String username) {
|
@CurrentUsername String username) {
|
||||||
ModelAndView modelAndView = new ModelAndView();
|
ModelAndView modelAndView = new ModelAndView();
|
||||||
if (!org.springframework.util.StringUtils.hasText(form.getPassword())) {
|
if (!hasText(form.getPassword())) {
|
||||||
bindingResult.rejectValue("password", "not.empty");
|
bindingResult.rejectValue("password", "not.empty");
|
||||||
}
|
}
|
||||||
if (bindingResult.hasErrors()) {
|
if (bindingResult.hasErrors()) {
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
<form class="attack-form" accept-charset="UNKNOWN" id="verify-account-form"
|
<form class="attack-form" accept-charset="UNKNOWN" id="verify-account-form"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
successCallback="onBypassResponse"
|
successCallback="onBypassResponse"
|
||||||
action="auth-bypass/verify-account">
|
th:action="@{/auth-bypass/verify-account}">
|
||||||
<p>Verify Your Account by answering the questions below:</p>
|
<p>Verify Your Account by answering the questions below:</p>
|
||||||
|
|
||||||
<p>What is the name of your favorite teacher?</p>
|
<p>What is the name of your favorite teacher?</p>
|
||||||
@ -43,7 +43,7 @@
|
|||||||
<form class="attack-form" accept-charset="UNKNOWN" id="change-password-form"
|
<form class="attack-form" accept-charset="UNKNOWN" id="change-password-form"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
successCallback="onBypassResponse"
|
successCallback="onBypassResponse"
|
||||||
action="auth-bypass/verify-account"
|
th:action="@{/auth-bypass/verify-account}"
|
||||||
style="display:none"><!-- start off hidden -->
|
style="display:none"><!-- start off hidden -->
|
||||||
<p>Please provide a new password for your account</p>
|
<p>Please provide a new password for your account</p>
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" name="fieldRestrictions"
|
<form class="attack-form" accept-charset="UNKNOWN" name="fieldRestrictions"
|
||||||
method="POST"
|
method="POST"
|
||||||
action="BypassRestrictions/FieldRestrictions">
|
th:action="@{/BypassRestrictions/FieldRestrictions}">
|
||||||
|
|
||||||
<div class="bypass-input-container"><b>Select field with two possible value</b>
|
<div class="bypass-input-container"><b>Select field with two possible value</b>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="challenge/1"
|
th:action="@{/challenge/1}"
|
||||||
style="width: 200px;">
|
style="width: 200px;">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
@ -37,7 +37,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form class="attack-form" method="POST" name="form" action="challenge/flag/1">
|
<form class="attack-form" method="POST" name="form" th:action="@{/challenge/flag/1}">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-addon"><i class="fa fa-flag-checkered" aria-hidden="true"
|
<div class="input-group-addon"><i class="fa fa-flag-checkered" aria-hidden="true"
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<form id="login-form" class="attack-form" accept-charset="UNKNOWN"
|
<form id="login-form" class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="challenge/5" role="form">
|
th:action="@{/challenge/5}" role="form">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="text" name="username_login" id="username4" tabindex="1"
|
<input type="text" name="username_login" id="username4" tabindex="1"
|
||||||
class="form-control" placeholder="Username" value=""/>
|
class="form-control" placeholder="Username" value=""/>
|
||||||
@ -66,7 +66,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
<br/>
|
||||||
<form class="attack-form" method="POST" name="form" action="challenge/flag/5">
|
<form class="attack-form" method="POST" name="form" th:action="@{/challenge/flag/5}">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-addon"><i class="fa fa-flag-checkered" aria-hidden="true"
|
<div class="input-group-addon"><i class="fa fa-flag-checkered" aria-hidden="true"
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<form id="login-form" class="attack-form" accept-charset="UNKNOWN"
|
<form id="login-form" class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="challenge/6" role="form">
|
th:action="@{/challenge/6}" role="form">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="text" name="username_login" id="username4" tabindex="1"
|
<input type="text" name="username_login" id="username4" tabindex="1"
|
||||||
class="form-control" placeholder="Username" value=""/>
|
class="form-control" placeholder="Username" value=""/>
|
||||||
@ -64,7 +64,7 @@
|
|||||||
</form>
|
</form>
|
||||||
<form id="register-form" class="attack-form" accept-charset="UNKNOWN"
|
<form id="register-form" class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="PUT" name="form"
|
method="PUT" name="form"
|
||||||
action="challenge/6" style="display: none;" role="form">
|
th:action="@{/challenge/6}" style="display: none;" role="form">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="text" name="username_reg" id="username" tabindex="1"
|
<input type="text" name="username_reg" id="username" tabindex="1"
|
||||||
class="form-control" placeholder="Username" value=""/>
|
class="form-control" placeholder="Username" value=""/>
|
||||||
@ -99,7 +99,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
<br/>
|
||||||
<form class="attack-form" method="POST" name="form" action="challenge/flag/6">
|
<form class="attack-form" method="POST" name="form" th:action="@{/challenge/flag/6}">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-addon"><i class="fa fa-flag-checkered" aria-hidden="true"
|
<div class="input-group-addon"><i class="fa fa-flag-checkered" aria-hidden="true"
|
||||||
|
@ -28,7 +28,7 @@ f94008f801fceb8833a30fe56a8b26976347edcf First version of WebGoat Cloud website
|
|||||||
|
|
||||||
<form id="login-form" class="attack-form" accept-charset="UNKNOWN"
|
<form id="login-form" class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="challenge/7" role="form">
|
th:action="@{/challenge/7}" role="form">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
@ -57,7 +57,7 @@ f94008f801fceb8833a30fe56a8b26976347edcf First version of WebGoat Cloud website
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
<br/>
|
||||||
<form class="attack-form" method="POST" name="form" action="challenge/flag/7">
|
<form class="attack-form" method="POST" name="form" th:action="@{/challenge/flag/7}">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-addon"><i class="fa fa-flag-checkered" aria-hidden="true"
|
<div class="input-group-addon"><i class="fa fa-flag-checkered" aria-hidden="true"
|
||||||
|
@ -231,7 +231,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
<form class="attack-form" method="POST" name="form" action="challenge/flag/8">
|
<form class="attack-form" method="POST" name="form" th:action="@{/challenge/flag/8}">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-addon"><i class="fa fa-flag-checkered" aria-hidden="true"
|
<div class="input-group-addon"><i class="fa fa-flag-checkered" aria-hidden="true"
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="DOMFollowUp"
|
method="POST" name="DOMFollowUp"
|
||||||
action="ChromeDevTools/dummy">
|
th:action="@{/ChromeDevTools/dummy}">
|
||||||
<input name="successMessage" value="" type="TEXT" />
|
<input name="successMessage" value="" type="TEXT" />
|
||||||
<input name="submitMessage" value="Submit" type="SUBMIT"/>
|
<input name="submitMessage" value="Submit" type="SUBMIT"/>
|
||||||
</form>
|
</form>
|
||||||
@ -45,7 +45,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="ChromeDevTools/network">
|
th:action="@{/chromeDevTools/network}">
|
||||||
<script>
|
<script>
|
||||||
// sample custom javascript in the recommended way ...
|
// sample custom javascript in the recommended way ...
|
||||||
// a namespace has been assigned for it, but you can roll your own if you prefer
|
// a namespace has been assigned for it, but you can roll your own if you prefer
|
||||||
@ -66,7 +66,7 @@
|
|||||||
|
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="ChromeDevTools/network">
|
th:action="@{/chromeDevTools/network}">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>What is the number you found: </td>
|
<td>What is the number you found: </td>
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<form id="quiz-form" class="attack-form" accept-charset="UNKNOWN"
|
<form id="quiz-form" class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="cia/quiz" role="form">
|
th:action="@{/cia/quiz}" role="form">
|
||||||
<div id="q_container"></div>
|
<div id="q_container"></div>
|
||||||
<br />
|
<br />
|
||||||
<input name="Quiz_solutions" value="Submit answers" type="SUBMIT"/>
|
<input name="Quiz_solutions" value="Submit answers" type="SUBMIT"/>
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
<input type="hidden" id="user_id" value="102"/>
|
<input type="hidden" id="user_id" value="102"/>
|
||||||
<!-- using attack-form class on your form, will allow your request to be ajaxified and stay within the display framework for webgoat -->
|
<!-- using attack-form class on your form, will allow your request to be ajaxified and stay within the display framework for webgoat -->
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" method="POST" name="form"
|
<form class="attack-form" accept-charset="UNKNOWN" method="POST" name="form"
|
||||||
action="clientSideFiltering/attack1">
|
th:action="@{/clientSideFiltering/attack1}">
|
||||||
<link rel="stylesheet" type="text/css"
|
<link rel="stylesheet" type="text/css"
|
||||||
th:href="@{/lesson_css/clientSideFiltering-stage1.css}"/>
|
th:href="@{/lesson_css/clientSideFiltering-stage1.css}"/>
|
||||||
<script th:src="@{/lesson_js/clientSideFiltering.js}"
|
<script th:src="@{/lesson_js/clientSideFiltering.js}"
|
||||||
|
@ -28,7 +28,7 @@ $(document).ready(initialise);
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
Now suppose you have intercepted the following header:<br/>
|
Now suppose you have intercepted the following header:<br/>
|
||||||
<div id="basicauthtoken" ></div><br/>
|
<div id="basicauthtoken" ></div><br/>
|
||||||
<form class="attack-form" method="POST" name="form" action="crypto/encoding/basic-auth">
|
<form class="attack-form" method="POST" name="form" th:action="@{/crypto/encoding/basic-auth}">
|
||||||
Then what was the username
|
Then what was the username
|
||||||
<input name="answer_user" value="" type="TEXT"/>
|
<input name="answer_user" value="" type="TEXT"/>
|
||||||
and what was the password:
|
and what was the password:
|
||||||
@ -45,7 +45,7 @@ $(document).ready(initialise);
|
|||||||
<!-- 3. assignment xor -->
|
<!-- 3. assignment xor -->
|
||||||
<div class="attack-container">
|
<div class="attack-container">
|
||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" method="POST" name="form" action="crypto/encoding/xor">
|
<form class="attack-form" method="POST" name="form" th:action="@{/crypto/encoding/xor}">
|
||||||
Suppose you found the database password encoded as {xor}Oz4rPj0+LDovPiwsKDAtOw==<br/>
|
Suppose you found the database password encoded as {xor}Oz4rPj0+LDovPiwsKDAtOw==<br/>
|
||||||
What would be the actual password
|
What would be the actual password
|
||||||
<input name="answer_pwd1" value="" type="TEXT"/><br/>
|
<input name="answer_pwd1" value="" type="TEXT"/><br/>
|
||||||
@ -62,7 +62,7 @@ $(document).ready(initialise);
|
|||||||
<!-- 4. weak hashing exercise -->
|
<!-- 4. weak hashing exercise -->
|
||||||
<div class="attack-container">
|
<div class="attack-container">
|
||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" method="POST" name="form" action="crypto/hashing">
|
<form class="attack-form" method="POST" name="form" th:action="@{/crypto/hashing}">
|
||||||
Which password belongs to this hash: <div id="md5token" ></div>
|
Which password belongs to this hash: <div id="md5token" ></div>
|
||||||
<input name="answer_pwd1" value="" type="TEXT"/><br/>
|
<input name="answer_pwd1" value="" type="TEXT"/><br/>
|
||||||
Which password belongs to this hash: <div id="sha256token" ></div>
|
Which password belongs to this hash: <div id="sha256token" ></div>
|
||||||
@ -87,7 +87,7 @@ $(document).ready(initialise);
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
Now suppose you have the following private key:<br/>
|
Now suppose you have the following private key:<br/>
|
||||||
<pre><div id="privatekey" ></div></pre><br/>
|
<pre><div id="privatekey" ></div></pre><br/>
|
||||||
<form class="attack-form" method="POST" name="form" action="crypto/signing/verify">
|
<form class="attack-form" method="POST" name="form" th:action="@{/crypto/signing/verify}">
|
||||||
Then what was the modulus of the public key
|
Then what was the modulus of the public key
|
||||||
<input name="modulus" value="" type="TEXT"/>
|
<input name="modulus" value="" type="TEXT"/>
|
||||||
and now provide a signature for us based on that modulus
|
and now provide a signature for us based on that modulus
|
||||||
@ -110,7 +110,7 @@ $(document).ready(initialise);
|
|||||||
<!-- 8. assignment -->
|
<!-- 8. assignment -->
|
||||||
<div class="attack-container">
|
<div class="attack-container">
|
||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" method="POST" name="form" action="crypto/secure/defaults">
|
<form class="attack-form" method="POST" name="form" th:action="@{/crypto/secure/defaults}">
|
||||||
What is the unencrypted message<br/>
|
What is the unencrypted message<br/>
|
||||||
<input name="secretText" value="" type="TEXT"/><br/>
|
<input name="secretText" value="" type="TEXT"/><br/>
|
||||||
and what is the name of the file that stored the password <br/>
|
and what is the name of the file that stored the password <br/>
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
method="POST" name="form1"
|
method="POST" name="form1"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
successCallback=""
|
successCallback=""
|
||||||
action="csrf/basic-get-flag">
|
th:action="@{/csrf/basic-get-flag}">
|
||||||
<input name="csrf" type="hidden" value="false"/>
|
<input name="csrf" type="hidden" value="false"/>
|
||||||
<input type="submit" name="submit"/>
|
<input type="submit" name="submit"/>
|
||||||
|
|
||||||
@ -35,7 +35,7 @@
|
|||||||
<form class="attack-form" accept-charset="UNKNOWN" id="confirm-flag-1"
|
<form class="attack-form" accept-charset="UNKNOWN" id="confirm-flag-1"
|
||||||
method="POST" name="form2"
|
method="POST" name="form2"
|
||||||
successCallback=""
|
successCallback=""
|
||||||
action="csrf/confirm-flag-1">
|
th:action="@{/csrf/confirm-flag-1}">
|
||||||
|
|
||||||
Confirm Flag Value:
|
Confirm Flag Value:
|
||||||
<input type="text" length="6" name="confirmFlagVal" value=""/>
|
<input type="text" length="6" name="confirmFlagVal" value=""/>
|
||||||
@ -93,7 +93,7 @@
|
|||||||
<form class="attack-form" accept-charset="UNKNOWN" id="csrf-review"
|
<form class="attack-form" accept-charset="UNKNOWN" id="csrf-review"
|
||||||
method="POST" name="review-form"
|
method="POST" name="review-form"
|
||||||
successCallback=""
|
successCallback=""
|
||||||
action="csrf/review">
|
th:action="@{/csrf/review}">
|
||||||
<input class="form-control" id="reviewText" name="reviewText" placeholder="Add a Review"
|
<input class="form-control" id="reviewText" name="reviewText" placeholder="Add a Review"
|
||||||
type="text"/>
|
type="text"/>
|
||||||
<input class="form-control" id="reviewStars" name="stars" type="text"/>
|
<input class="form-control" id="reviewStars" name="stars" type="text"/>
|
||||||
@ -146,7 +146,7 @@
|
|||||||
<form class="attack-form" accept-charset="UNKNOWN" id="csrf-feedback"
|
<form class="attack-form" accept-charset="UNKNOWN" id="csrf-feedback"
|
||||||
method="POST"
|
method="POST"
|
||||||
prepareData="feedback"
|
prepareData="feedback"
|
||||||
action="csrf/feedback/message"
|
th:action="@{/csrf/feedback/message}"
|
||||||
contentType="application/json">
|
contentType="application/json">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
@ -212,7 +212,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" id="confirm-flag-feedback"
|
<form class="attack-form" accept-charset="UNKNOWN" id="confirm-flag-feedback"
|
||||||
method="POST" name="form2"
|
method="POST" name="form2"
|
||||||
action="csrf/feedback">
|
th:action="@{/csrf/feedback}">
|
||||||
|
|
||||||
Confirm Flag Value:
|
Confirm Flag Value:
|
||||||
<input type="text" length="6" name="confirmFlagVal" value=""/>
|
<input type="text" length="6" name="confirmFlagVal" value=""/>
|
||||||
@ -236,7 +236,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" id="confirm-flag-login"
|
<form class="attack-form" accept-charset="UNKNOWN" id="confirm-flag-login"
|
||||||
method="POST" name="form2"
|
method="POST" name="form2"
|
||||||
action="csrf/login">
|
th:action="@{/csrf/login}">
|
||||||
|
|
||||||
Press the button below when your are logged in as the other user<br/>
|
Press the button below when your are logged in as the other user<br/>
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" name="task"
|
<form class="attack-form" accept-charset="UNKNOWN" name="task"
|
||||||
method="POST"
|
method="POST"
|
||||||
action="InsecureDeserialization/task">
|
th:action="@{/InsecureDeserialization/task}">
|
||||||
|
|
||||||
<input type="textarea" rows="4" cols="40" value="" name="token" placeholder="token"/>
|
<input type="textarea" rows="4" cols="40" value="" name="token" placeholder="token"/>
|
||||||
<input type="submit" value="Submit" />
|
<input type="submit" value="Submit" />
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" method="POST"
|
<form class="attack-form" accept-charset="UNKNOWN" method="POST"
|
||||||
action="HijackSession/login">
|
th:action="@{/HijackSession/login}">
|
||||||
<div style="padding: 20px;" id="password-login">
|
<div style="padding: 20px;" id="password-login">
|
||||||
<h4 style="border-bottom: 1px solid #c5c5c5;">Account Access</h4>
|
<h4 style="border-bottom: 1px solid #c5c5c5;">Account Access</h4>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" id="task" name="task"
|
<form class="attack-form" accept-charset="UNKNOWN" id="task" name="task"
|
||||||
method="POST"
|
method="POST"
|
||||||
action="HtmlTampering/task">
|
th:action="@{/HtmlTampering/task}">
|
||||||
<script>
|
<script>
|
||||||
var regex = /^2999.99$/;
|
var regex = /^2999.99$/;
|
||||||
var price = 2999.99;
|
var price = 2999.99;
|
||||||
|
@ -21,10 +21,10 @@
|
|||||||
<!-- of course, you can write your own ajax submission /handling in your own javascript if you like -->
|
<!-- of course, you can write your own ajax submission /handling in your own javascript if you like -->
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="HttpBasics/attack1">
|
th:action="@{/HttpBasics/attack1}">
|
||||||
<div id="lessonContent">
|
<div id="lessonContent">
|
||||||
<form accept-charset="UNKNOWN" method="POST" name="form"
|
<form accept-charset="UNKNOWN" method="POST" name="form"
|
||||||
action="#attack/307/100">
|
th:action="@{/#attack/307/100}">
|
||||||
Enter Your Name: <input name="person" value="" type="TEXT"/><input
|
Enter Your Name: <input name="person" value="" type="TEXT"/><input
|
||||||
name="SUBMIT" value="Go!" type="SUBMIT"/>
|
name="SUBMIT" value="Go!" type="SUBMIT"/>
|
||||||
</form>
|
</form>
|
||||||
@ -51,7 +51,7 @@
|
|||||||
<!-- of course, you can write your own ajax submission /handling in your own javascript if you like -->
|
<!-- of course, you can write your own ajax submission /handling in your own javascript if you like -->
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="HttpBasics/attack2">
|
th:action="@{/HttpBasics/attack2}">
|
||||||
<script>
|
<script>
|
||||||
// sample custom javascript in the recommended way ...
|
// sample custom javascript in the recommended way ...
|
||||||
// a namespace has been assigned for it, but you can roll your own if you prefer
|
// a namespace has been assigned for it, but you can roll your own if you prefer
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" name="intercept-request"
|
<form class="attack-form" accept-charset="UNKNOWN" name="intercept-request"
|
||||||
method="POST"
|
method="POST"
|
||||||
action="HttpProxies/intercept-request">
|
th:action="@{/HttpProxies/intercept-request}">
|
||||||
|
|
||||||
<input type="text" value="doesn't matter really" name="changeMe" />
|
<input type="text" value="doesn't matter really" name="changeMe" />
|
||||||
<input type="submit" value="Submit" />
|
<input type="submit" value="Submit" />
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
<!-- modify the action to point to the intended endpoint -->
|
<!-- modify the action to point to the intended endpoint -->
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="IDOR/login">
|
th:action="@{/IDOR/login}">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>user/pass</td>
|
<td>user/pass</td>
|
||||||
@ -57,7 +57,7 @@
|
|||||||
<!-- modify the action to point to the intended endpoint -->
|
<!-- modify the action to point to the intended endpoint -->
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="GET" name="form"
|
method="GET" name="form"
|
||||||
action="IDOR/profile">
|
th:action="@{/IDOR/profile}">
|
||||||
<script th:src="@{/lesson_js/idor.js}" />
|
<script th:src="@{/lesson_js/idor.js}" />
|
||||||
|
|
||||||
<input name="View Profile" value="View Profile" type="button" onclick="onViewProfile();" />
|
<input name="View Profile" value="View Profile" type="button" onclick="onViewProfile();" />
|
||||||
@ -80,7 +80,7 @@
|
|||||||
<!-- modify the action to point to the intended endpoint -->
|
<!-- modify the action to point to the intended endpoint -->
|
||||||
<form class="attack-form"
|
<form class="attack-form"
|
||||||
method="POST" name="diff-form"
|
method="POST" name="diff-form"
|
||||||
action="IDOR/diff-attributes">
|
th:action="@{/IDOR/diff-attributes}">
|
||||||
<input name="attributes" type="text" />
|
<input name="attributes" type="text" />
|
||||||
<input name="Submit Diffs" value="Submit Diffs" type="submit" />
|
<input name="Submit Diffs" value="Submit Diffs" type="submit" />
|
||||||
</form>
|
</form>
|
||||||
@ -107,7 +107,7 @@
|
|||||||
<!-- modify the action to point to the intended endpoint -->
|
<!-- modify the action to point to the intended endpoint -->
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="IDOR/profile/alt-path">
|
th:action="@{/IDOR/profile/alt-path}">
|
||||||
<div class="adoc-content" th:replace="~{doc:lessons/idor/documentation/IDOR_inputAltPath.adoc}"></div>
|
<div class="adoc-content" th:replace="~{doc:lessons/idor/documentation/IDOR_inputAltPath.adoc}"></div>
|
||||||
<input name="url" value="WebGoat/" type="text"/>
|
<input name="url" value="WebGoat/" type="text"/>
|
||||||
<input name="submit" value="Submit" type="SUBMIT"/>
|
<input name="submit" value="Submit" type="SUBMIT"/>
|
||||||
@ -134,7 +134,7 @@
|
|||||||
<!-- modify the action to point to the intended endpoint -->
|
<!-- modify the action to point to the intended endpoint -->
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" id="view-other"
|
<form class="attack-form" accept-charset="UNKNOWN" id="view-other"
|
||||||
method="GET" name="view-other-profile"
|
method="GET" name="view-other-profile"
|
||||||
action="IDOR/profile/{userId}">
|
th:action="@{/IDOR/profile/{userId}}">
|
||||||
<script th:src="@{/lesson_js/idor.js}" />
|
<script th:src="@{/lesson_js/idor.js}" />
|
||||||
|
|
||||||
<input name="View Profile" value="View Profile" type="submit" />
|
<input name="View Profile" value="View Profile" type="submit" />
|
||||||
@ -158,7 +158,7 @@
|
|||||||
<!-- modify the action to point to the intended endpoint -->
|
<!-- modify the action to point to the intended endpoint -->
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" id="edit-other"
|
<form class="attack-form" accept-charset="UNKNOWN" id="edit-other"
|
||||||
method="GET" name="edit-other-profile"
|
method="GET" name="edit-other-profile"
|
||||||
action="IDOR/profile/{userId}">
|
th:action="@{/IDOR/profile/{userId}}">
|
||||||
<script th:src="@{/lesson_js/idor.js}" />
|
<script th:src="@{/lesson_js/idor.js}" />
|
||||||
|
|
||||||
<input name="View Profile" value="View Profile" type="submit" />
|
<input name="View Profile" value="View Profile" type="submit" />
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<script th:src="@{/lesson_js/credentials.js}"></script>
|
<script th:src="@{/lesson_js/credentials.js}"></script>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" name="task"
|
<form class="attack-form" accept-charset="UNKNOWN" name="task"
|
||||||
method="POST"
|
method="POST"
|
||||||
action="InsecureLogin/task">
|
th:action="@{/InsecureLogin/task}">
|
||||||
|
|
||||||
<button onclick="javascript:submit_secret_credentials();return false;">Log in</button>
|
<button onclick="javascript:submit_secret_credentials();return false;">Log in</button>
|
||||||
|
|
||||||
@ -25,7 +25,7 @@
|
|||||||
<br></br>
|
<br></br>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" name="task"
|
<form class="attack-form" accept-charset="UNKNOWN" name="task"
|
||||||
method="POST"
|
method="POST"
|
||||||
action="InsecureLogin/task">
|
th:action="@{/InsecureLogin/task}">
|
||||||
|
|
||||||
<input type="text" value="" name="username" placeholder="username"/>
|
<input type="text" value="" name="username" placeholder="username"/>
|
||||||
<input type="password" value="" name="password" placeholder="password" />
|
<input type="password" value="" name="password" placeholder="password" />
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<div class="adoc-content" th:replace="~{doc:lessons/jwt/documentation/JWT_decode.adoc}"></div>
|
<div class="adoc-content" th:replace="~{doc:lessons/jwt/documentation/JWT_decode.adoc}"></div>
|
||||||
<div class="attack-container">
|
<div class="attack-container">
|
||||||
<img th:src="@{/images/wolf-enabled.png}" class="webwolf-enabled"/>
|
<img th:src="@{/images/wolf-enabled.png}" class="webwolf-enabled"/>
|
||||||
<form id="decode" class="attack-form" method="POST" name="form" action="JWT/decode">
|
<form id="decode" class="attack-form" method="POST" name="form" th:action="@{/JWT/decode}">
|
||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<br>
|
<br>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -53,7 +53,7 @@
|
|||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST"
|
method="POST"
|
||||||
successCallback="jwtSigningCallback"
|
successCallback="jwtSigningCallback"
|
||||||
action="JWT/votings">
|
th:action="@{/JWT/votings}">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -124,7 +124,7 @@
|
|||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<form id="quiz-form" class="attack-form" accept-charset="UNKNOWN"
|
<form id="quiz-form" class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="JWT/quiz"
|
th:action="@{/JWT/quiz}"
|
||||||
role="form">
|
role="form">
|
||||||
<div id="q_container"></div>
|
<div id="q_container"></div>
|
||||||
<br/>
|
<br/>
|
||||||
@ -155,7 +155,7 @@
|
|||||||
|
|
||||||
<div class="attack-container">
|
<div class="attack-container">
|
||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" method="POST" name="form" action="JWT/secret">
|
<form class="attack-form" method="POST" name="form" th:action="@{/JWT/secret}">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-addon"><i class="fa fa-flag-checkered" aria-hidden="true"
|
<div class="input-group-addon"><i class="fa fa-flag-checkered" aria-hidden="true"
|
||||||
@ -192,7 +192,7 @@
|
|||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST"
|
method="POST"
|
||||||
additionalHeaders="addBearerToken"
|
additionalHeaders="addBearerToken"
|
||||||
action="JWT/refresh/checkout">
|
th:action="@{/JWT/refresh/checkout}">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-10 col-md-offset-1">
|
<div class="col-sm-12 col-md-10 col-md-offset-1">
|
||||||
@ -314,12 +314,13 @@
|
|||||||
<div class="adoc-content" th:replace="~{doc:lessons/jwt/documentation/JWT_claim_misuse_jku_assignment.adoc}"></div>
|
<div class="adoc-content" th:replace="~{doc:lessons/jwt/documentation/JWT_claim_misuse_jku_assignment.adoc}"></div>
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" th:href="@{/lesson_css/jwt.css}"/>
|
<link rel="stylesheet" type="text/css" th:href="@{/lesson_css/jwt.css}"/>
|
||||||
<script th:src="@{/lesson_js/bootstrap.min.js}" language="JavaScript"></script>
|
<script th:src="@{/lesson_js/jwt-jku.js}"></script>
|
||||||
|
|
||||||
<div class="attack-container">
|
<div class="attack-container">
|
||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST"
|
method="POST"
|
||||||
action="JWT/final/delete?token=eyJ0eXAiOiJKV1QiLCJqa3UiOiJodHRwczovL2NvZ25pdG8taWRwLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL3dlYmdvYXQvLndlbGwta25vd24vandrcy5qc29uIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJpYXQiOjE1MjQyMTA5MDQsImV4cCI6MTYxODkwNTMwNCwiYXVkIjoid2ViZ29hdC5vcmciLCJzdWIiOiJqZXJyeUB3ZWJnb2F0LmNvbSIsInVzZXJuYW1lIjoiSmVycnkiLCJFbWFpbCI6ImplcnJ5QHdlYmdvYXQuY29tIiwiUm9sZSI6WyJDYXQiXX0.SabvRaYSCW7xI0ueca19TL1e66cJIJaxRiydK2G5lgFMIbL5gQQjE6022HEha9HcprqFXyHbtXrQWRXAp6Gjaf5zs8LUMBMARWjEr8TS43ihguarmLLmvBCoqjiZY39o4EcEjEH9xAoyIYR_Trh7kXn6JVU-8MM76l9IOcYIJ9c8LqT1ERNmbCqtI4PP0tdqCy99nHhqlxSCVXaGDF0jMHV5kjCDSHNYib9riy9xZ63Sztify-bwPqRvxmaShPYtG4BBM_wOGlg-BYTTuws-6yISMfTB5U1WBDwLr6dLU123TGO26wCVBgTKbA0KKG94-ToOcneWLOTEacEfQQOlIQ">
|
th:action="@{/JWT/jku/delete?token=eyJ0eXAiOiJKV1QiLCJqa3UiOiJodHRwczovL2NvZ25pdG8taWRwLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL3dlYmdvYXQvLndlbGwta25vd24vandrcy5qc29uIiwiYWxnIjoiUlMyNTYifQ.ewogICJpc3MiOiAiV2ViR29hdCBUb2tlbiBCdWlsZGVyIiwKICAiaWF0IjogMTUyNDIxMDkwNCwKICAiZXhwIjogMTYxODkwNTMwNCwKICAiYXVkIjogIndlYmdvYXQub3JnIiwKICAic3ViIjogImplcnJ5QHdlYmdvYXQuY29tIiwKICAidXNlcm5hbWUiOiAiSmVycnkiLAogICJFbWFpbCI6ICJqZXJyeUB3ZWJnb2F0LmNvbSIsCiAgIlJvbGUiOiBbCiAgICAiQ2F0IgogIF0KfQ.SabvRaYSCW7xI0ueca19TL1e66cJIJaxRiydK2G5lgFMIbL5gQQjE6022HEha9HcprqFXyHbtXrQWRXAp6Gjaf5zs8LUMBMARWjEr8TS43ihguarmLLmvBCoqjiZY39o4EcEjEH9xAoyIYR_Trh7kXn6JVU-8MM76l9IOcYIJ9c8LqT1ERNmbCqtI4PP0tdqCy99nHhqlxSCVXaGDF0jMHV5kjCDSHNYib9riy9xZ63Sztify-bwPqRvxmaShPYtG4BBM_WOGlg-bYTTuws-6yISMfTB5U1WBDwLr6dLU123TGO26wCVBgTKbA0KKG94-ToOcneWLOTEacEfQQOlIQ}">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div id="toast"></div>
|
<div id="toast"></div>
|
||||||
<div class="col-sm-6 col-md-4 col-lg-3 mt-4">
|
<div class="col-sm-6 col-md-4 col-lg-3 mt-4">
|
||||||
@ -380,12 +381,12 @@
|
|||||||
<div class="adoc-content" th:replace="~{doc:lessons/jwt/documentation/JWT_claim_misuse_kid_assignment.adoc}"></div>
|
<div class="adoc-content" th:replace="~{doc:lessons/jwt/documentation/JWT_claim_misuse_kid_assignment.adoc}"></div>
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" th:href="@{/lesson_css/jwt.css}"/>
|
<link rel="stylesheet" type="text/css" th:href="@{/lesson_css/jwt.css}"/>
|
||||||
<script th:src="@{/lesson_js/bootstrap.min.js}" language="JavaScript"></script>
|
<script th:src="@{/lesson_js/jwt-kid.js}"></script>
|
||||||
<div class="attack-container">
|
<div class="attack-container">
|
||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST"
|
method="POST"
|
||||||
action="JWT/kid/delete?token=eyJ0eXAiOiJKV1QiLCJraWQiOiJ3ZWJnb2F0X2tleSIsImFsZyI6IkhTMjU2In0.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJpYXQiOjE1MjQyMTA5MDQsImV4cCI6MTYxODkwNTMwNCwiYXVkIjoid2ViZ29hdC5vcmciLCJzdWIiOiJqZXJyeUB3ZWJnb2F0LmNvbSIsInVzZXJuYW1lIjoiSmVycnkiLCJFbWFpbCI6ImplcnJ5QHdlYmdvYXQuY29tIiwiUm9sZSI6WyJDYXQiXX0.CgZ27DzgVW8gzc0n6izOU638uUCi6UhiOJKYzoEZGE8">
|
th:action="@{/JWT/kid/delete?token=eyJ0eXAiOiJKV1QiLCJraWQiOiJ3ZWJnb2F0X2tleSIsImFsZyI6IkhTMjU2In0.ewogICJpc3MiOiAiV2ViR29hdCBUb2tlbiBCdWlsZGVyIiwKICAiaWF0IjogMTUyNDIxMDkwNCwKICAiZXhwIjogMTYxODkwNTMwNCwKICAiYXVkIjogIndlYmdvYXQub3JnIiwKICAic3ViIjogImplcnJ5QHdlYmdvYXQuY29tIiwKICAidXNlcm5hbWUiOiAiSmVycnkiLAogICJFbWFpbCI6ICJqZXJyeUB3ZWJnb2F0LmNvbSIsCiAgIlJvbGUiOiBbCiAgICAiQ2F0IgogIF0KfQ.CgZ27DzgVW8gzc0n6izOU638uUCi6UhiOJKYzoEZGE8}">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div id="toast"></div>
|
<div id="toast"></div>
|
||||||
<div class="col-sm-6 col-md-4 col-lg-3 mt-4">
|
<div class="col-sm-6 col-md-4 col-lg-3 mt-4">
|
||||||
@ -421,7 +422,7 @@
|
|||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
<small>Last updated 12 days ago</small>
|
<small>Last updated 12 days ago</small>
|
||||||
<button type="button" class="btn btn-info float-right btn-sm"
|
<button type="button" class="btn btn-info float-right btn-sm"
|
||||||
onclick="javascript:follow('Tom')">Follow
|
onclick="javascript:startFollowing('Tom')">Follow
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-info float-right btn-sm">Delete</button>
|
<button class="btn btn-info float-right btn-sm">Delete</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -26,15 +26,15 @@ jwt-refresh-alg-none=Nicely found! You solved the assignment with 'alg: none' ca
|
|||||||
jwt-final-jerry-account=Yikes, you are removing Jerry's account, try to delete the account of Tom
|
jwt-final-jerry-account=Yikes, you are removing Jerry's account, try to delete the account of Tom
|
||||||
jwt-final-not-tom=Username is not Tom try to pass a token for Tom
|
jwt-final-not-tom=Username is not Tom try to pass a token for Tom
|
||||||
|
|
||||||
jwt-jku-hint1=Take a look at the token and specifically and the header
|
jwt-jku-hint1=Take a look at the token and specifically at the headers
|
||||||
jwt-jku-hint2=The 'jku' (key ID) header parameter is a hint indicating which key is used to verify the JWS
|
jwt-jku-hint2=The 'jku' header parameter hints a URL pointing to a set of keys used by the server to sign the JWT.
|
||||||
jwt-jku-hint3=Could you use WebWolf to host the public key as a JWKS?
|
jwt-jku-hint3=Could you use WebWolf to host the public key as a JWKS?
|
||||||
jwt-jku-hint4=Create a key pair and sign the token with the private key
|
jwt-jku-hint4=Create a key pair and sign the token with the private key
|
||||||
jwt-jku-hint5=Change the JKU header claim and point it to a URL which hosts the public key in JWKS format.
|
jwt-jku-hint5=Change the JKU header claim and point it to a URL that hosts the public key in JWKS format.
|
||||||
|
|
||||||
jwt-kid-hint1=Take a look at the token and specifically and the header
|
jwt-kid-hint1=Take a look at the token and specifically at the headers
|
||||||
jwt-kid-hint2=The 'kid' (key ID) header parameter is a hint indicating which key was used to secure the JWS
|
jwt-kid-hint2=The 'kid' (key ID) header parameter hints at the key was used to secure the JWS
|
||||||
jwt-kid-hint3=The key can be located on the filesystem in memory or even reside in the database
|
jwt-kid-hint3=The key resides can for example, either in the filesystem in memory or the database.
|
||||||
jwt-kid-hint4=The key is stored in the database and loaded while verifying a token
|
jwt-kid-hint4=The key is stored in the database and loaded while verifying a token
|
||||||
jwt-kid-hint5=Using a SQL injection you might be able to manipulate the key to something you know and create a new token.
|
jwt-kid-hint5=Using an SQL injection, you might be able to manipulate the key to a known object and create a new token.
|
||||||
jwt-kid-hint6=Use: hacked' UNION select 'deletingTom' from INFORMATION_SCHEMA.SYSTEM_USERS -- as the kid in the header and change the contents of the token to Tom and hit the endpoint with the new token
|
jwt-kid-hint6=Use: hacked' UNION select 'deletingTom' from INFORMATION_SCHEMA.SYSTEM_USERS -- as the kid in the header change the contents of the token to Tom and hit the endpoint with the new token
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
function follow(user) {
|
function follow(user) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: 'JWT/final/follow/' + user
|
url: 'JWT/kid/follow/' + user
|
||||||
}).then(function (result) {
|
}).then(function (result) {
|
||||||
$("#toast").append(result);
|
$("#toast").append(result);
|
||||||
})
|
})
|
8
src/main/resources/lessons/jwt/js/jwt-kid.js
Normal file
8
src/main/resources/lessons/jwt/js/jwt-kid.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
function startFollowing(user) {
|
||||||
|
$.ajax({
|
||||||
|
type: 'POST',
|
||||||
|
url: 'JWT/kid/follow/' + user
|
||||||
|
}).then(function (result) {
|
||||||
|
$("#toast").append(result);
|
||||||
|
})
|
||||||
|
}
|
@ -47,7 +47,7 @@
|
|||||||
<!-- modify the action to point to the intended endpoint and set other attributes as desired -->
|
<!-- modify the action to point to the intended endpoint and set other attributes as desired -->
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="lesson-template/sample-attack">
|
th:action="@{/lesson-template/sample-attack}">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>two random params</td>
|
<td>two random params</td>
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" name="task"
|
<form class="attack-form" accept-charset="UNKNOWN" name="task"
|
||||||
method="POST"
|
method="POST"
|
||||||
action="LogSpoofing/log-spoofing">
|
th:action="@{/LogSpoofing/log-spoofing}">
|
||||||
|
|
||||||
<input type="text" value="" name="username" placeholder="username"/>
|
<input type="text" value="" name="username" placeholder="username"/>
|
||||||
<input type="password" value="" name="password" placeholder="password"/>
|
<input type="password" value="" name="password" placeholder="password"/>
|
||||||
@ -38,7 +38,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" name="task"
|
<form class="attack-form" accept-charset="UNKNOWN" name="task"
|
||||||
method="POST"
|
method="POST"
|
||||||
action="LogSpoofing/log-bleeding">
|
th:action="@{/LogSpoofing/log-bleeding}">
|
||||||
|
|
||||||
<input type="text" value="" name="username" placeholder="username"/>
|
<input type="text" value="" name="username" placeholder="username"/>
|
||||||
<input type="password" value="" name="password" placeholder="password"/>
|
<input type="password" value="" name="password" placeholder="password"/>
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="access-control/hidden-menu">
|
th:action="@{/access-control/hidden-menu}">
|
||||||
|
|
||||||
<p>Hidden item 1 <input name="hiddenMenu1" value="" type="TEXT"/></p>
|
<p>Hidden item 1 <input name="hiddenMenu1" value="" type="TEXT"/></p>
|
||||||
<p>Hidden item 2 <input name="hiddenMenu2" value="" type="TEXT"/></p>
|
<p>Hidden item 2 <input name="hiddenMenu2" value="" type="TEXT"/></p>
|
||||||
@ -75,7 +75,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="access-control/user-hash">
|
th:action="@{/access-control/user-hash}">
|
||||||
|
|
||||||
<p>Your Hash: <input name="userHash" value="" type="TEXT"/></p>
|
<p>Your Hash: <input name="userHash" value="" type="TEXT"/></p>
|
||||||
<br/>
|
<br/>
|
||||||
@ -97,7 +97,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="access-control/user-hash-fix">
|
th:action="@{/access-control/user-hash-fix}">
|
||||||
|
|
||||||
<p>Your Hash: <input name="userHash" value="" type="TEXT"/></p>
|
<p>Your Hash: <input name="userHash" value="" type="TEXT"/></p>
|
||||||
<br/>
|
<br/>
|
||||||
|
@ -3,17 +3,13 @@
|
|||||||
When creating a password reset link you need to make sure:
|
When creating a password reset link you need to make sure:
|
||||||
|
|
||||||
- It is a unique link with a random token
|
- It is a unique link with a random token
|
||||||
- It can only be used once
|
- You can use it only once
|
||||||
- The link is only valid for a limited amount of time.
|
- The link is only valid for a limited amount of time.
|
||||||
|
|
||||||
Sending a link with a random token means an attacker cannot start a simple DOS attack to your website by starting to
|
Sending a link with a random token means an attacker cannot start a simple DOS attack to your website by starting to block users. The link should not be usable more than once, which makes it impossible to change the password again. The time-out is necessary to restrict the attack window. Having a link opens up a lot of possibilities for the attacker.
|
||||||
block users. The link should not be usable more than once which makes it impossible to change the password again.
|
|
||||||
The time out is necessary to restrict the attack window, having a link opens up a lot of possibilities for the attacker.
|
|
||||||
|
|
||||||
== Assignment
|
== Assignment
|
||||||
|
|
||||||
Try to reset the password of Tom (tom@webgoat-cloud.org) to your own choice and login as Tom with
|
Try to reset Tom's password (tom@webgoat-cloud.org) to your own choice and log in as Tom with that password. Note: it is impossible to use OWASP ZAP for this lesson. Also, browsers might not work; command line tools like `curl` and the like will be more successful for this attack.
|
||||||
that password. Note: it is not possible to use OWASP ZAP for this lesson, also browsers might not work, command line
|
|
||||||
tools like `curl` and the like will be more successful for this attack.
|
|
||||||
|
|
||||||
Tom always resets his password immediately after receiving the email with the link.
|
Tom is quick to act when it comes to his password. He always resets it immediately after receiving the email with the link.
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" novalidate="novalidate"
|
<form class="attack-form" accept-charset="UNKNOWN" novalidate="novalidate"
|
||||||
method="POST"
|
method="POST"
|
||||||
action="PasswordReset/simple-mail/reset">
|
th:action="@{/PasswordReset/simple-mail/reset}">
|
||||||
<div style="display: none;" id="password-reset-2">
|
<div style="display: none;" id="password-reset-2">
|
||||||
<h4 class="">Forgot your password?</h4>
|
<h4 class="">Forgot your password?</h4>
|
||||||
|
|
||||||
@ -47,7 +47,7 @@
|
|||||||
</form>
|
</form>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" novalidate="novalidate"
|
<form class="attack-form" accept-charset="UNKNOWN" novalidate="novalidate"
|
||||||
method="POST"
|
method="POST"
|
||||||
action="PasswordReset/simple-mail">
|
th:action="@{/PasswordReset/simple-mail}">
|
||||||
<div style="padding: 20px;" id="password-login-2">
|
<div style="padding: 20px;" id="password-login-2">
|
||||||
<h4 style="border-bottom: 1px solid #c5c5c5;"><i class="glyphicon glyphicon-user"></i>
|
<h4 style="border-bottom: 1px solid #c5c5c5;"><i class="glyphicon glyphicon-user"></i>
|
||||||
Account
|
Account
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3">
|
<div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3">
|
||||||
<form role="form" method="POST" action="PasswordReset/reset/change-password" th:object="${form}" novalidate="novalidate">
|
<form role="form" method="POST" th:action="@{/PasswordReset/reset/change-password}" th:object="${form}" novalidate="novalidate">
|
||||||
<h2 class="sign_up_title">Reset your password</h2>
|
<h2 class="sign_up_title">Reset your password</h2>
|
||||||
<div class="form-group" th:classappend="${#fields.hasErrors('password')}? 'has-error'">
|
<div class="form-group" th:classappend="${#fields.hasErrors('password')}? 'has-error'">
|
||||||
<input type="hidden" name="resetLink" th:field="*{resetLink}" />
|
<input type="hidden" name="resetLink" th:field="*{resetLink}" />
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
informationalCallback="profileUploadCallback"
|
informationalCallback="profileUploadCallback"
|
||||||
prepareData="profileUpload"
|
prepareData="profileUpload"
|
||||||
enctype="multipart/form-data"
|
enctype="multipart/form-data"
|
||||||
action="PathTraversal/profile-upload">
|
th:action="@{/PathTraversal/profile-upload}">
|
||||||
<div class="preview text-center">
|
<div class="preview text-center">
|
||||||
<img class="preview-img" th:src="@{/images/account.png}" alt="Preview Image" width="200"
|
<img class="preview-img" th:src="@{/images/account.png}" alt="Preview Image" width="200"
|
||||||
height="200" id="preview"/>
|
height="200" id="preview"/>
|
||||||
@ -76,7 +76,7 @@
|
|||||||
informationalCallback="profileUploadCallbackFix"
|
informationalCallback="profileUploadCallbackFix"
|
||||||
prepareData="profileUploadFix"
|
prepareData="profileUploadFix"
|
||||||
enctype="multipart/form-data"
|
enctype="multipart/form-data"
|
||||||
action="PathTraversal/profile-upload-fix">
|
th:action="@{/PathTraversal/profile-upload-fix}">
|
||||||
<div class="preview text-center">
|
<div class="preview text-center">
|
||||||
<img class="preview-img" th:src="@{/images/account.png}" alt="Preview Image" width="200"
|
<img class="preview-img" th:src="@{/images/account.png}" alt="Preview Image" width="200"
|
||||||
height="200" id="previewFix"/>
|
height="200" id="previewFix"/>
|
||||||
@ -131,7 +131,7 @@
|
|||||||
informationalCallback="profileUploadCallbackRemoveUserInput"
|
informationalCallback="profileUploadCallbackRemoveUserInput"
|
||||||
prepareData="profileUploadRemoveUserInput"
|
prepareData="profileUploadRemoveUserInput"
|
||||||
enctype="multipart/form-data"
|
enctype="multipart/form-data"
|
||||||
action="PathTraversal/profile-upload-remove-user-input">
|
th:action="@{/PathTraversal/profile-upload-remove-user-input}">
|
||||||
<div class="preview text-center">
|
<div class="preview text-center">
|
||||||
<img class="preview-img" th:src="@{/images/account.png}" alt="Preview Image" width="200"
|
<img class="preview-img" th:src="@{/images/account.png}" alt="Preview Image" width="200"
|
||||||
height="200" id="previewRemoveUserInput"/>
|
height="200" id="previewRemoveUserInput"/>
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SecurePasswords/assignment"
|
th:action="@{/SecurePasswords/assignment}"
|
||||||
autocomplete="off">
|
autocomplete="off">
|
||||||
|
|
||||||
<div class="input-group input-group">
|
<div class="input-group input-group">
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" method="POST"
|
<form class="attack-form" accept-charset="UNKNOWN" method="POST"
|
||||||
action="SpoofCookie/login">
|
th:action="@{/SpoofCookie/login}">
|
||||||
<div style="padding: 20px;" id="password-login">
|
<div style="padding: 20px;" id="password-login">
|
||||||
<h4 style="border-bottom: 1px solid #c5c5c5;">Account Access</h4>
|
<h4 style="border-bottom: 1px solid #c5c5c5;">Account Access</h4>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjection/attack2"
|
th:action="@{/SqlInjection/attack2}"
|
||||||
autocomplete="off">
|
autocomplete="off">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@ -39,7 +39,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjection/attack3"
|
th:action="@{/SqlInjection/attack3}"
|
||||||
autocomplete="off">
|
autocomplete="off">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@ -63,7 +63,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjection/attack4"
|
th:action="@{/SqlInjection/attack4}"
|
||||||
autocomplete="off">
|
autocomplete="off">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@ -87,7 +87,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjection/attack5"
|
th:action="@{/SqlInjection/attack5}"
|
||||||
autocomplete="off">
|
autocomplete="off">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@ -143,7 +143,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjection/assignment5a">
|
th:action="@{/SqlInjection/assignment5a}">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '</td>
|
<td>SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '</td>
|
||||||
@ -188,7 +188,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjection/assignment5b">
|
th:action="@{/SqlInjection/assignment5b}">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Login_Count:</td>
|
<td>Login_Count:</td>
|
||||||
@ -216,7 +216,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjection/attack8"
|
th:action="@{/SqlInjection/attack8}"
|
||||||
autocomplete="off">
|
autocomplete="off">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@ -244,7 +244,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjection/attack9"
|
th:action="@{/SqlInjection/attack9}"
|
||||||
autocomplete="off">
|
autocomplete="off">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@ -273,7 +273,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjection/attack10"
|
th:action="@{/SqlInjection/attack10}"
|
||||||
autocomplete="off">
|
autocomplete="off">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjectionAdvanced/attack6a">
|
th:action="@{/SqlInjectionAdvanced/attack6a}">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Name:</td>
|
<td>Name:</td>
|
||||||
@ -33,7 +33,7 @@
|
|||||||
</form>
|
</form>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjectionAdvanced/attack6b">
|
th:action="@{/SqlInjectionAdvanced/attack6b}">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Password:</td>
|
<td>Password:</td>
|
||||||
@ -79,7 +79,7 @@
|
|||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<form id="login-form" class="attack-form" accept-charset="UNKNOWN"
|
<form id="login-form" class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjectionAdvanced/challenge_Login"
|
th:action="@{/SqlInjectionAdvanced/Challenge_Login}"
|
||||||
role="form">
|
role="form">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="text" name="username_login" id="username4" tabindex="1"
|
<input type="text" name="username_login" id="username4" tabindex="1"
|
||||||
@ -115,7 +115,7 @@
|
|||||||
</form>
|
</form>
|
||||||
<form id="register-form" class="attack-form" accept-charset="UNKNOWN"
|
<form id="register-form" class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="PUT" name="form"
|
method="PUT" name="form"
|
||||||
action="SqlInjectionAdvanced/challenge"
|
th:action="@{/SqlInjectionAdvanced/challenge}"
|
||||||
style="display: none;" role="form">
|
style="display: none;" role="form">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="text" name="username_reg" id="username" tabindex="1"
|
<input type="text" name="username_reg" id="username" tabindex="1"
|
||||||
@ -168,7 +168,7 @@
|
|||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<form id="quiz-form" class="attack-form" accept-charset="UNKNOWN"
|
<form id="quiz-form" class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjectionAdvanced/quiz"
|
th:action="@{/SqlInjectionAdvanced/quiz}"
|
||||||
role="form">
|
role="form">
|
||||||
<div id="q_container"></div>
|
<div id="q_container"></div>
|
||||||
<br />
|
<br />
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
<div class="adoc-content" th:replace="~{doc:lessons/sqlinjection/documentation/SqlInjection_jdbc_completion.adoc}"></div>
|
<div class="adoc-content" th:replace="~{doc:lessons/sqlinjection/documentation/SqlInjection_jdbc_completion.adoc}"></div>
|
||||||
<div class="attack-container">
|
<div class="attack-container">
|
||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" method="POST" name="form" action="SqlInjectionMitigations/attack10a">
|
<form class="attack-form" accept-charset="UNKNOWN" method="POST" name="form" th:action="@{/SqlInjectionMitigations/attack10a}">
|
||||||
<div>
|
<div>
|
||||||
<p>Connection conn = DriverManager.<input type="text" name="field1" id="field1" />(DBURL, DBUSER, DBPW);</p>
|
<p>Connection conn = DriverManager.<input type="text" name="field1" id="field1" />(DBURL, DBUSER, DBPW);</p>
|
||||||
<p><input type="text" name="field2" id="field2" /> = conn.<input type="text" name="field3" id="field3" />("SELECT status FROM users WHERE name=<input type="text" name="field4" id="field4" /> AND mail=<input type="text" name="field5" id="field5" />");</p>
|
<p><input type="text" name="field2" id="field2" /> = conn.<input type="text" name="field3" id="field3" />("SELECT status FROM users WHERE name=<input type="text" name="field4" id="field4" /> AND mail=<input type="text" name="field5" id="field5" />");</p>
|
||||||
@ -42,7 +42,7 @@
|
|||||||
<div class="lesson-page-wrapper">
|
<div class="lesson-page-wrapper">
|
||||||
<div class="adoc-content" th:replace="~{doc:lessons/sqlinjection/documentation/SqlInjection_jdbc_newcode.adoc}"></div>
|
<div class="adoc-content" th:replace="~{doc:lessons/sqlinjection/documentation/SqlInjection_jdbc_newcode.adoc}"></div>
|
||||||
<div class="attack-container" style="border: none !important; height: 100%; min-height: 300px;">
|
<div class="attack-container" style="border: none !important; height: 100%; min-height: 300px;">
|
||||||
<form id="codesubmit" style="height: 100%; min-height: 300px;" class="attack-form" accept-charset="UNKNOWN" method="POST" name="form" action="SqlInjectionMitigations/attack10b">
|
<form id="codesubmit" style="height: 100%; min-height: 300px;" class="attack-form" accept-charset="UNKNOWN" method="POST" name="form" th:action="@{/SqlInjectionMitigations/attack10b}">
|
||||||
<div>
|
<div>
|
||||||
<div id="editor" style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; height: 300px;" name="editor"></div>
|
<div id="editor" style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; height: 300px;" name="editor"></div>
|
||||||
<script th:src="@{/js/libs/ace.js}" type="text/javascript" charset="utf-8"></script>
|
<script th:src="@{/js/libs/ace.js}" type="text/javascript" charset="utf-8"></script>
|
||||||
@ -72,7 +72,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlOnlyInputValidation/attack"
|
th:action="@{/SqlInjectionMitigations/attack}"
|
||||||
enctype="application/json;charset=UTF-8">
|
enctype="application/json;charset=UTF-8">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@ -95,7 +95,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlOnlyInputValidationOnKeywords/attack"
|
th:action="@{/SqlInjectionMitigations/attack}"
|
||||||
enctype="application/json;charset=UTF-8">
|
enctype="application/json;charset=UTF-8">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@ -124,7 +124,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SqlInjectionMitigations/attack12a">
|
th:action="@{/SqlInjectionMitigations/attack12a}">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="panel panel-primary">
|
<div class="panel panel-primary">
|
||||||
@ -173,7 +173,7 @@
|
|||||||
<br/>
|
<br/>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<form class="attack-form" method="POST" name="form" action="SqlInjectionMitigations/attack12a">
|
<form class="attack-form" method="POST" name="form" th:action="@{/SqlInjectionMitigations/attack12a}">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-addon">IP address webgoat-prd server:</div>
|
<div class="input-group-addon">IP address webgoat-prd server:</div>
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SSRF/task1">
|
th:action="@{/SSRF/task1}">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><input type="hidden" id="url1" name="url" value="images/tom.png"/></td>
|
<td><input type="hidden" id="url1" name="url" value="images/tom.png"/></td>
|
||||||
@ -34,7 +34,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="SSRF/task2">
|
th:action="@{/SSRF/task2}">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><input type="hidden" id="url2" name="url" value="images/cat.png"/></td>
|
<td><input type="hidden" id="url2" name="url" value="images/cat.png"/></td>
|
||||||
|
@ -15,9 +15,9 @@ image::images/requests.png[caption="Figure: ", style="lesson-image"]
|
|||||||
{nbsp}
|
{nbsp}
|
||||||
{nbsp}
|
{nbsp}
|
||||||
|
|
||||||
Suppose we tricked a user into clicking on a link he/she received in an email. This link will open up our crafted
|
Suppose we tricked a user into clicking on a link received in an email. This link will open up our crafted
|
||||||
password reset link page. The user does not notice any differences compared to the normal password reset page of the company.
|
password reset link page. The user notices no differences from the company's standard password reset page.
|
||||||
The user enters a new password and hits enter. The new password will be sent to your host. In this case, the new
|
The user enters a new password and hits enter. Your host will receive the new password. In this case, the new
|
||||||
password will be sent to WebWolf. Try to locate the unique code.
|
password ends up in WebWolf. Try to locate the unique code.
|
||||||
|
|
||||||
Please be aware that the user will receive an error page after resetting the password. In a real attack scenario the user would probably see a normal success page (this is due to a limit on what we can control with WebWolf)
|
Please be aware that the user will receive an error page after resetting the password. In an actual attack scenario, the user would probably see a standard success page (this is due to a limit on what we can control with WebWolf)
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" style="position:relative;top:150px"
|
<form class="attack-form" accept-charset="UNKNOWN" style="position:relative;top:150px"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="WebWolf/mail">
|
th:action="@{/WebWolf/mail}">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
@ -39,7 +39,7 @@
|
|||||||
<!-- <div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>-->
|
<!-- <div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>-->
|
||||||
<form class="attack-form" accept-charset="UNKNOWN" style="position:relative;top:-50px"
|
<form class="attack-form" accept-charset="UNKNOWN" style="position:relative;top:-50px"
|
||||||
method="POST" name="secondform"
|
method="POST" name="secondform"
|
||||||
action="WebWolf/mail/send">
|
th:action="@{/WebWolf/mail/send}">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
|
@ -7,4 +7,4 @@ Why is that?
|
|||||||
That is because no link triggers that XSS.
|
That is because no link triggers that XSS.
|
||||||
You can try it yourself to see what happens ... go to:
|
You can try it yourself to see what happens ... go to:
|
||||||
|
|
||||||
link:/WebGoat/CrossSiteScripting/attack5a?QTY1=1&QTY2=1&QTY3=1&QTY4=1&field1=<script>alert('my%20javascript%20here')</script>4128+3214+0002+1999&field2=111["/WebGoat/CrossSiteScripting/attack5a?QTY1=1&QTY2=1&QTY3=1&QTY4=1&field1=<script>alert('my%20javascript%20here')</script>4128+3214+0002+1999&field2=111",window=_blank]
|
link:CrossSiteScripting/attack5a?QTY1=1&QTY2=1&QTY3=1&QTY4=1&field1=<script>alert('my%20javascript%20here')</script>4128+3214+0002+1999&field2=111["CrossSiteScripting/attack5a?QTY1=1&QTY2=1&QTY3=1&QTY4=1&field1=<script>alert('my%20javascript%20here')</script>4128+3214+0002+1999&field2=111",window=_blank]
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
<div id="lessonContent">
|
<div id="lessonContent">
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="CrossSiteScripting/attack1">
|
th:action="@{/CrossSiteScripting/attack1}">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><input type="checkbox" name="checkboxAttack1"> The cookies are the same on each tab </td>
|
<td><input type="checkbox" name="checkboxAttack1"> The cookies are the same on each tab </td>
|
||||||
@ -46,7 +46,7 @@
|
|||||||
<div id="lessonContent">
|
<div id="lessonContent">
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="GET" name="xss-5a"
|
method="GET" name="xss-5a"
|
||||||
action="CrossSiteScripting/attack5a">
|
th:action="@{/CrossSiteScripting/attack5a}">
|
||||||
<center>
|
<center>
|
||||||
<h4>Shopping Cart</h4>
|
<h4>Shopping Cart</h4>
|
||||||
</center>
|
</center>
|
||||||
@ -133,7 +133,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="DOMTestRoute"
|
method="POST" name="DOMTestRoute"
|
||||||
action="CrossSiteScripting/attack6a">
|
th:action="@{/CrossSiteScripting/attack6a}">
|
||||||
<input name="DOMTestRoute" value="" type="TEXT" />
|
<input name="DOMTestRoute" value="" type="TEXT" />
|
||||||
<input name="SubmitTestRoute" value="Submit" type="SUBMIT"/>
|
<input name="SubmitTestRoute" value="Submit" type="SUBMIT"/>
|
||||||
</form>
|
</form>
|
||||||
@ -148,7 +148,7 @@
|
|||||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="DOMFollowUp"
|
method="POST" name="DOMFollowUp"
|
||||||
action="CrossSiteScripting/dom-follow-up">
|
th:action="@{/CrossSiteScripting/dom-follow-up}">
|
||||||
<input name="successMessage" value="" type="TEXT" />
|
<input name="successMessage" value="" type="TEXT" />
|
||||||
<input name="submitMessage" value="Submit" type="SUBMIT"/>
|
<input name="submitMessage" value="Submit" type="SUBMIT"/>
|
||||||
</form>
|
</form>
|
||||||
@ -168,7 +168,7 @@
|
|||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<form id="quiz-form" class="attack-form" accept-charset="UNKNOWN"
|
<form id="quiz-form" class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="form"
|
method="POST" name="form"
|
||||||
action="CrossSiteScripting/quiz" role="form">
|
th:action="@{/CrossSiteScripting/quiz}" role="form">
|
||||||
<div id="q_container"></div>
|
<div id="q_container"></div>
|
||||||
<br />
|
<br />
|
||||||
<input name="Quiz_solutions" value="Submit answers" type="SUBMIT"/>
|
<input name="Quiz_solutions" value="Submit answers" type="SUBMIT"/>
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
<div class="lesson-page-wrapper">
|
<div class="lesson-page-wrapper">
|
||||||
<div class="adoc-content" th:replace="~{doc:lessons/xss/documentation/CrossSiteScripting_content8b.adoc}"></div>
|
<div class="adoc-content" th:replace="~{doc:lessons/xss/documentation/CrossSiteScripting_content8b.adoc}"></div>
|
||||||
<div class="attack-container" style="height: 100%; border: none !important;min-height: 450px;">
|
<div class="attack-container" style="height: 100%; border: none !important;min-height: 450px;">
|
||||||
<form id="codesubmit" style="height: 100%; min-height: 350px;" class="attack-form" accept-charset="UNKNOWN" method="POST" name="form" action="CrossSiteScripting/attack3">
|
<form id="codesubmit" style="height: 100%; min-height: 350px;" class="attack-form" accept-charset="UNKNOWN" method="POST" name="form" th:action="@{/CrossSiteScripting/attack3}">
|
||||||
<div>
|
<div>
|
||||||
<div id="editor" style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; height: 350px;" name="editor"></div>
|
<div id="editor" style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; height: 350px;" name="editor"></div>
|
||||||
<script th:src="@{/js/libs/ace.js}" type="text/javascript" charset="utf-8"></script>
|
<script th:src="@{/js/libs/ace.js}" type="text/javascript" charset="utf-8"></script>
|
||||||
@ -41,7 +41,7 @@
|
|||||||
<div class="lesson-page-wrapper">
|
<div class="lesson-page-wrapper">
|
||||||
<div class="adoc-content" th:replace="~{doc:lessons/xss/documentation/CrossSiteScripting_content8c.adoc}"></div>
|
<div class="adoc-content" th:replace="~{doc:lessons/xss/documentation/CrossSiteScripting_content8c.adoc}"></div>
|
||||||
<div class="attack-container" style="height: 100%; border: none !important;min-height: 450px;">
|
<div class="attack-container" style="height: 100%; border: none !important;min-height: 450px;">
|
||||||
<form id="codesubmit2" style="height: 100%; min-height: 350px;" class="attack-form" accept-charset="UNKNOWN" method="POST" name="form" action="CrossSiteScripting/attack4">
|
<form id="codesubmit2" style="height: 100%; min-height: 350px;" class="attack-form" accept-charset="UNKNOWN" method="POST" name="form" th:action="@{/CrossSiteScripting/attack4}">
|
||||||
<div>
|
<div>
|
||||||
<div id="editor2" style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; height: 350px;" name="editor2"></div>
|
<div id="editor2" style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; height: 350px;" name="editor2"></div>
|
||||||
<script th:src="@{/js/libs/ace.js}" type="text/javascript" charset="utf-8"></script>
|
<script th:src="@{/js/libs/ace.js}" type="text/javascript" charset="utf-8"></script>
|
||||||
|
@ -67,7 +67,7 @@
|
|||||||
|
|
||||||
<form class="attack-form" accept-charset="UNKNOWN"
|
<form class="attack-form" accept-charset="UNKNOWN"
|
||||||
method="POST" name="DOMFollowUp"
|
method="POST" name="DOMFollowUp"
|
||||||
action="CrossSiteScriptingStored/stored-xss-follow-up">
|
th:action="@{/CrossSiteScriptingStored/stored-xss-follow-up}">
|
||||||
<input name="successMessage" value="" type="TEXT" />
|
<input name="successMessage" value="" type="TEXT" />
|
||||||
<input name="submitMessage" value="Submit" type="SUBMIT"/>
|
<input name="submitMessage" value="Submit" type="SUBMIT"/>
|
||||||
</form>
|
</form>
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
successCallback="simpleXXECallback"
|
successCallback="simpleXXECallback"
|
||||||
failureCallback="simpleXXECallback"
|
failureCallback="simpleXXECallback"
|
||||||
contentType="application/xml"
|
contentType="application/xml"
|
||||||
action="xxe/simple">
|
th:action="@{/xxe/simple}">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="panel post">
|
<div class="panel post">
|
||||||
<div class="post-heading">
|
<div class="post-heading">
|
||||||
@ -94,7 +94,7 @@
|
|||||||
prepareData="contentTypeXXE"
|
prepareData="contentTypeXXE"
|
||||||
successCallback="contentTypeXXECallback"
|
successCallback="contentTypeXXECallback"
|
||||||
failureCallback="contentTypeXXECallback"
|
failureCallback="contentTypeXXECallback"
|
||||||
action="xxe/content-type"
|
th:action="@{/xxe/content-type}"
|
||||||
contentType="application/json">
|
contentType="application/json">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="panel post">
|
<div class="panel post">
|
||||||
@ -166,7 +166,7 @@
|
|||||||
prepareData="blindXXE"
|
prepareData="blindXXE"
|
||||||
successCallback="blindXXECallback"
|
successCallback="blindXXECallback"
|
||||||
failureCallback="blindXXECallback"
|
failureCallback="blindXXECallback"
|
||||||
action="xxe/blind"
|
th:action="@{/xxe/blind}"
|
||||||
contentType="application/xml">
|
contentType="application/xml">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="panel post">
|
<div class="panel post">
|
||||||
|
Reference in New Issue
Block a user