diff --git a/Dockerfile b/Dockerfile index fdc0f4ff2..5d530644c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,6 +27,8 @@ ENTRYPOINT [ "java", \ "--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", \ "-Dwebgoat.host=0.0.0.0", \ "-Dwebwolf.host=0.0.0.0", \ diff --git a/FAQ.md b/FAQ.md new file mode 100644 index 000000000..3e2968344 --- /dev/null +++ b/FAQ.md @@ -0,0 +1,8 @@ +# 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. + diff --git a/pom.xml b/pom.xml index 299853095..10e64c12a 100644 --- a/pom.xml +++ b/pom.xml @@ -1,13 +1,13 @@ - - + 4.0.0 org.springframework.boot spring-boot-starter-parent - 2.7.1 + 3.0.5 + org.owasp.webgoat webgoat 2023.5-SNAPSHOT @@ -27,6 +27,7 @@ https://www.gnu.org/licenses/gpl-2.0.txt + mayhew64 @@ -94,7 +95,6 @@ http://lists.owasp.org/pipermail/owasp-webgoat/ - scm:git:git@github.com:WebGoat/WebGoat.git scm:git:git@github.com:WebGoat/WebGoat.git @@ -110,7 +110,8 @@ 2.5.3 - 5.2.3 + + 3.3.7 3.3.0 3.2.1 @@ -121,6 +122,7 @@ 31.1-jre 0.8.10 17 + 2.3.1 0.9.1 0.9.3 3.5.1 @@ -137,7 +139,7 @@ UTF-8 UTF-8 - 3.0.15.RELEASE + 3.1.1.RELEASE 5.3.2 8080 9090 @@ -250,7 +252,6 @@ - org.apache.commons @@ -269,6 +270,7 @@ javax.xml.bind jaxb-api + ${jaxb.version} org.springframework.boot @@ -310,7 +312,11 @@ org.thymeleaf.extras - thymeleaf-extras-springsecurity5 + thymeleaf-extras-springsecurity6 + + + jakarta.servlet + jakarta.servlet-api org.hsqldb @@ -369,8 +375,13 @@ jquery - org.glassfish.jaxb - jaxb-runtime + jakarta.xml.bind + jakarta.xml.bind-api + + + com.sun.xml.bind + jaxb-impl + runtime @@ -386,6 +397,7 @@ com.github.tomakehurst wiremock + 3.0.0-beta-2 test @@ -393,6 +405,11 @@ rest-assured test + + org.springframework.boot + spring-boot-properties-migrator + runtime + @@ -490,7 +507,8 @@ --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.io=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/java.lang.reflect=ALL-UNNAMED - --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED + --add-opens java.base/java.text=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 **/*IntegrationTest.java src/it/java @@ -678,6 +696,10 @@ 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 ${project.build.directory}/webgoat-${project.version}.jar false diff --git a/src/it/java/org/owasp/webgoat/PasswordResetLessonIntegrationTest.java b/src/it/java/org/owasp/webgoat/PasswordResetLessonIntegrationTest.java index e791634ea..c53be61f8 100644 --- a/src/it/java/org/owasp/webgoat/PasswordResetLessonIntegrationTest.java +++ b/src/it/java/org/owasp/webgoat/PasswordResetLessonIntegrationTest.java @@ -5,7 +5,6 @@ import static org.junit.jupiter.api.DynamicTest.dynamicTest; import io.restassured.RestAssured; import java.util.Arrays; import java.util.Map; -import lombok.SneakyThrows; import org.apache.commons.lang3.StringUtils; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; @@ -16,7 +15,6 @@ import org.junit.jupiter.api.TestFactory; public class PasswordResetLessonIntegrationTest extends IntegrationTest { @BeforeEach - @SneakyThrows public void init() { startLesson("/PasswordReset"); } diff --git a/src/it/java/org/owasp/webgoat/ProgressRaceConditionIntegrationTest.java b/src/it/java/org/owasp/webgoat/ProgressRaceConditionIntegrationTest.java index 016f6b35d..1228f913c 100644 --- a/src/it/java/org/owasp/webgoat/ProgressRaceConditionIntegrationTest.java +++ b/src/it/java/org/owasp/webgoat/ProgressRaceConditionIntegrationTest.java @@ -29,9 +29,9 @@ public class ProgressRaceConditionIntegrationTest extends IntegrationTest { .relaxedHTTPSValidation() .cookie("JSESSIONID", getWebGoatCookie()) .formParams(Map.of("flag", "test")) - .post(url("/challenge/flag/")); + .post(url("/challenge/flag")); }; - ExecutorService executorService = Executors.newWorkStealingPool(NUMBER_OF_PARALLEL_THREADS); + ExecutorService executorService = Executors.newFixedThreadPool(NUMBER_OF_PARALLEL_THREADS); List> flagCalls = IntStream.range(0, NUMBER_OF_CALLS).mapToObj(i -> call).collect(Collectors.toList()); var responses = executorService.invokeAll(flagCalls); diff --git a/src/main/java/org/owasp/webgoat/container/AjaxAuthenticationEntryPoint.java b/src/main/java/org/owasp/webgoat/container/AjaxAuthenticationEntryPoint.java index 1ed96e146..98a3eab0f 100644 --- a/src/main/java/org/owasp/webgoat/container/AjaxAuthenticationEntryPoint.java +++ b/src/main/java/org/owasp/webgoat/container/AjaxAuthenticationEntryPoint.java @@ -27,10 +27,10 @@ */ package org.owasp.webgoat.container; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint; diff --git a/src/main/java/org/owasp/webgoat/container/AsciiDoctorTemplateResolver.java b/src/main/java/org/owasp/webgoat/container/AsciiDoctorTemplateResolver.java index 723e8cb7c..a496a0acb 100644 --- a/src/main/java/org/owasp/webgoat/container/AsciiDoctorTemplateResolver.java +++ b/src/main/java/org/owasp/webgoat/container/AsciiDoctorTemplateResolver.java @@ -33,6 +33,7 @@ package org.owasp.webgoat.container; import static org.asciidoctor.Asciidoctor.Factory.create; import io.undertow.util.Headers; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -41,7 +42,6 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Set; -import javax.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.asciidoctor.Asciidoctor; import org.asciidoctor.extension.JavaExtensionRegistry; @@ -60,7 +60,7 @@ import org.thymeleaf.templateresource.StringTemplateResource; * Thymeleaf resolver for AsciiDoc used in the lesson, can be used as follows inside a lesson file: * *

- *

+ *
*
*/ @Slf4j diff --git a/src/main/java/org/owasp/webgoat/container/DatabaseConfiguration.java b/src/main/java/org/owasp/webgoat/container/DatabaseConfiguration.java index ef54ff007..65d0b144e 100644 --- a/src/main/java/org/owasp/webgoat/container/DatabaseConfiguration.java +++ b/src/main/java/org/owasp/webgoat/container/DatabaseConfiguration.java @@ -50,12 +50,13 @@ public class DatabaseConfiguration { } @Bean - public Function flywayLessons(LessonDataSource lessonDataSource) { + public Function flywayLessons() { return schema -> Flyway.configure() .configuration(Map.of("driver", properties.getDriverClassName())) .schemas(schema) - .dataSource(lessonDataSource) + .cleanDisabled(false) + .dataSource(dataSource()) .locations("lessons") .load(); } diff --git a/src/main/java/org/owasp/webgoat/container/MvcConfiguration.java b/src/main/java/org/owasp/webgoat/container/MvcConfiguration.java index 114157a90..94353be2f 100644 --- a/src/main/java/org/owasp/webgoat/container/MvcConfiguration.java +++ b/src/main/java/org/owasp/webgoat/container/MvcConfiguration.java @@ -56,10 +56,10 @@ 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.springsecurity5.dialect.SpringSecurityDialect; -import org.thymeleaf.spring5.SpringTemplateEngine; -import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver; -import org.thymeleaf.spring5.view.ThymeleafViewResolver; +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; diff --git a/src/main/java/org/owasp/webgoat/container/WebSecurityConfig.java b/src/main/java/org/owasp/webgoat/container/WebSecurityConfig.java index 59084aa2f..3621ce707 100644 --- a/src/main/java/org/owasp/webgoat/container/WebSecurityConfig.java +++ b/src/main/java/org/owasp/webgoat/container/WebSecurityConfig.java @@ -37,50 +37,49 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; 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.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; 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 extends WebSecurityConfigurerAdapter { +public class WebSecurityConfig { private final UserService userDetailsService; - @Override - protected void configure(HttpSecurity http) throws Exception { - ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry security = - http.authorizeRequests() - .antMatchers( - "/css/**", - "/images/**", - "/js/**", - "fonts/**", - "/plugins/**", - "/registration", - "/register.mvc", - "/actuator/**") - .permitAll() - .anyRequest() - .authenticated(); - security - .and() - .formLogin() + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http.authorizeHttpRequests( + auth -> + auth.requestMatchers( + "/css/**", + "/images/**", + "/js/**", + "fonts/**", + "/plugins/**", + "/registration", + "/register.mvc", + "/actuator/**") + .permitAll() + .anyRequest() + .authenticated()); + http.formLogin() .loginPage("/login") .defaultSuccessUrl("/welcome.mvc", true) .usernameParameter("username") .passwordParameter("password") .permitAll(); - security.and().logout().deleteCookies("JSESSIONID").invalidateHttpSession(true); - security.and().csrf().disable(); + http.logout().deleteCookies("JSESSIONID").invalidateHttpSession(true); + http.csrf().disable(); http.headers().cacheControl().disable(); http.exceptionHandling().authenticationEntryPoint(new AjaxAuthenticationEntryPoint("/login")); + return http.build(); } @Autowired @@ -89,15 +88,14 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { } @Bean - @Override - public UserDetailsService userDetailsServiceBean() throws Exception { + public UserDetailsService userDetailsServiceBean() { return userDetailsService; } - @Override @Bean - protected AuthenticationManager authenticationManager() throws Exception { - return super.authenticationManager(); + public AuthenticationManager authenticationManager( + AuthenticationConfiguration authenticationConfiguration) throws Exception { + return authenticationConfiguration.getAuthenticationManager(); } @SuppressWarnings("deprecation") diff --git a/src/main/java/org/owasp/webgoat/container/asciidoc/WebWolfMacro.java b/src/main/java/org/owasp/webgoat/container/asciidoc/WebWolfMacro.java index 9ab0fac86..8456d6dbe 100644 --- a/src/main/java/org/owasp/webgoat/container/asciidoc/WebWolfMacro.java +++ b/src/main/java/org/owasp/webgoat/container/asciidoc/WebWolfMacro.java @@ -1,8 +1,8 @@ package org.owasp.webgoat.container.asciidoc; +import jakarta.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; import org.asciidoctor.ast.ContentNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.springframework.web.context.request.RequestContextHolder; diff --git a/src/main/java/org/owasp/webgoat/container/assignments/LessonTrackerInterceptor.java b/src/main/java/org/owasp/webgoat/container/assignments/LessonTrackerInterceptor.java index 4e76af9d6..aa3cd40ce 100644 --- a/src/main/java/org/owasp/webgoat/container/assignments/LessonTrackerInterceptor.java +++ b/src/main/java/org/owasp/webgoat/container/assignments/LessonTrackerInterceptor.java @@ -75,7 +75,8 @@ public class LessonTrackerInterceptor implements ResponseBodyAdvice { } else { userTracker.assignmentFailed(webSession.getCurrentLesson()); } - userTrackerRepository.saveAndFlush(userTracker); + userTrackerRepository.save(userTracker); + return attackResult; } } diff --git a/src/main/java/org/owasp/webgoat/container/controller/StartLesson.java b/src/main/java/org/owasp/webgoat/container/controller/StartLesson.java index 7d94f6044..3cdd5e8d6 100644 --- a/src/main/java/org/owasp/webgoat/container/controller/StartLesson.java +++ b/src/main/java/org/owasp/webgoat/container/controller/StartLesson.java @@ -31,7 +31,7 @@ */ package org.owasp.webgoat.container.controller; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.owasp.webgoat.container.session.Course; import org.owasp.webgoat.container.session.WebSession; import org.springframework.stereotype.Controller; diff --git a/src/main/java/org/owasp/webgoat/container/controller/Welcome.java b/src/main/java/org/owasp/webgoat/container/controller/Welcome.java index fddc5f640..0bebc9e70 100644 --- a/src/main/java/org/owasp/webgoat/container/controller/Welcome.java +++ b/src/main/java/org/owasp/webgoat/container/controller/Welcome.java @@ -29,8 +29,8 @@ */ package org.owasp.webgoat.container.controller; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.servlet.ModelAndView; @@ -49,7 +49,7 @@ public class Welcome { /** * welcome. * - * @param request a {@link javax.servlet.http.HttpServletRequest} object. + * @param request a {@link jakarta.servlet.http.HttpServletRequest} object. * @return a {@link org.springframework.web.servlet.ModelAndView} object. */ @GetMapping(path = {"welcome.mvc"}) diff --git a/src/main/java/org/owasp/webgoat/container/lessons/Assignment.java b/src/main/java/org/owasp/webgoat/container/lessons/Assignment.java index 92e8d0e9e..3c3c89d6d 100644 --- a/src/main/java/org/owasp/webgoat/container/lessons/Assignment.java +++ b/src/main/java/org/owasp/webgoat/container/lessons/Assignment.java @@ -1,9 +1,14 @@ package org.owasp.webgoat.container.lessons; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Transient; import java.util.ArrayList; import java.util.List; -import javax.persistence.*; -import lombok.*; +import lombok.EqualsAndHashCode; +import lombok.Getter; /** * ************************************************************************************************ @@ -41,7 +46,7 @@ import lombok.*; public class Assignment { @Id - @GeneratedValue(strategy = GenerationType.AUTO) + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; diff --git a/src/main/java/org/owasp/webgoat/container/lessons/LessonConnectionInvocationHandler.java b/src/main/java/org/owasp/webgoat/container/lessons/LessonConnectionInvocationHandler.java index 3b90c963d..a8f586d56 100644 --- a/src/main/java/org/owasp/webgoat/container/lessons/LessonConnectionInvocationHandler.java +++ b/src/main/java/org/owasp/webgoat/container/lessons/LessonConnectionInvocationHandler.java @@ -4,15 +4,13 @@ import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.Connection; -import lombok.extern.slf4j.Slf4j; import org.owasp.webgoat.container.users.WebGoatUser; import org.springframework.security.core.context.SecurityContextHolder; /** * Handler which sets the correct schema for the currently bounded user. This way users are not - * seeing each other data and we can reset data for just one particular user. + * seeing each other data, and we can reset data for just one particular user. */ -@Slf4j public class LessonConnectionInvocationHandler implements InvocationHandler { private final Connection targetConnection; diff --git a/src/main/java/org/owasp/webgoat/container/users/LessonTracker.java b/src/main/java/org/owasp/webgoat/container/users/LessonTracker.java index 2cc0c58af..fd9af4dcf 100644 --- a/src/main/java/org/owasp/webgoat/container/users/LessonTracker.java +++ b/src/main/java/org/owasp/webgoat/container/users/LessonTracker.java @@ -1,8 +1,20 @@ package org.owasp.webgoat.container.users; -import java.util.*; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Version; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; -import javax.persistence.*; +import lombok.EqualsAndHashCode; import lombok.Getter; import org.owasp.webgoat.container.lessons.Assignment; import org.owasp.webgoat.container.lessons.Lesson; @@ -39,10 +51,11 @@ import org.owasp.webgoat.container.lessons.Lesson; * @since October 29, 2003 */ @Entity +@EqualsAndHashCode public class LessonTracker { @Id - @GeneratedValue(strategy = GenerationType.AUTO) + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Getter private String lessonName; diff --git a/src/main/java/org/owasp/webgoat/container/users/RegistrationController.java b/src/main/java/org/owasp/webgoat/container/users/RegistrationController.java index 4dc628f86..1678385de 100644 --- a/src/main/java/org/owasp/webgoat/container/users/RegistrationController.java +++ b/src/main/java/org/owasp/webgoat/container/users/RegistrationController.java @@ -1,11 +1,10 @@ package org.owasp.webgoat.container.users; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.security.authentication.AuthenticationManager; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; @@ -23,7 +22,6 @@ public class RegistrationController { private UserValidator userValidator; private UserService userService; - private AuthenticationManager authenticationManager; @GetMapping("/registration") public String showForm(UserForm userForm) { diff --git a/src/main/java/org/owasp/webgoat/container/users/UserForm.java b/src/main/java/org/owasp/webgoat/container/users/UserForm.java index 416bba094..d0fad3626 100644 --- a/src/main/java/org/owasp/webgoat/container/users/UserForm.java +++ b/src/main/java/org/owasp/webgoat/container/users/UserForm.java @@ -1,8 +1,8 @@ package org.owasp.webgoat.container.users; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/org/owasp/webgoat/container/users/UserTracker.java b/src/main/java/org/owasp/webgoat/container/users/UserTracker.java index 86bdf4c14..72450f69e 100644 --- a/src/main/java/org/owasp/webgoat/container/users/UserTracker.java +++ b/src/main/java/org/owasp/webgoat/container/users/UserTracker.java @@ -1,11 +1,19 @@ package org.owasp.webgoat.container.users; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; import java.util.HashSet; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import javax.persistence.*; +import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.owasp.webgoat.container.lessons.Assignment; import org.owasp.webgoat.container.lessons.Lesson; @@ -43,10 +51,11 @@ import org.owasp.webgoat.container.lessons.Lesson; */ @Slf4j @Entity +@EqualsAndHashCode public class UserTracker { @Id - @GeneratedValue(strategy = GenerationType.AUTO) + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "username") diff --git a/src/main/java/org/owasp/webgoat/container/users/WebGoatUser.java b/src/main/java/org/owasp/webgoat/container/users/WebGoatUser.java index 517e50a60..bbeec3b98 100644 --- a/src/main/java/org/owasp/webgoat/container/users/WebGoatUser.java +++ b/src/main/java/org/owasp/webgoat/container/users/WebGoatUser.java @@ -1,10 +1,10 @@ package org.owasp.webgoat.container.users; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Transient; import java.util.Collection; import java.util.Collections; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Transient; import lombok.Getter; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; diff --git a/src/main/java/org/owasp/webgoat/lessons/authbypass/VerifyAccount.java b/src/main/java/org/owasp/webgoat/lessons/authbypass/VerifyAccount.java index ed7988b13..761d40aa0 100644 --- a/src/main/java/org/owasp/webgoat/lessons/authbypass/VerifyAccount.java +++ b/src/main/java/org/owasp/webgoat/lessons/authbypass/VerifyAccount.java @@ -22,13 +22,13 @@ package org.owasp.webgoat.lessons.authbypass; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AssignmentHints; import org.owasp.webgoat.container.assignments.AttackResult; diff --git a/src/main/java/org/owasp/webgoat/lessons/challenges/FlagController.java b/src/main/java/org/owasp/webgoat/lessons/challenges/FlagController.java index 1b2c497bd..5e423cecd 100644 --- a/src/main/java/org/owasp/webgoat/lessons/challenges/FlagController.java +++ b/src/main/java/org/owasp/webgoat/lessons/challenges/FlagController.java @@ -26,8 +26,6 @@ import lombok.AllArgsConstructor; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AttackResult; import org.owasp.webgoat.container.session.WebSession; -import org.owasp.webgoat.container.users.UserTracker; -import org.owasp.webgoat.container.users.UserTrackerRepository; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -38,25 +36,17 @@ import org.springframework.web.bind.annotation.RestController; @AllArgsConstructor public class FlagController extends AssignmentEndpoint { - private final UserTrackerRepository userTrackerRepository; private final WebSession webSession; private final Flags flags; @PostMapping(path = "/challenge/flag", produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public AttackResult postFlag(@RequestParam String flag) { - UserTracker userTracker = userTrackerRepository.findByUser(webSession.getUserName()); Flag expectedFlag = flags.getFlag(webSession.getCurrentLesson()); - final AttackResult attackResult; if (expectedFlag.isCorrect(flag)) { - userTracker.assignmentSolved( - webSession.getCurrentLesson(), "Assignment" + expectedFlag.number()); - attackResult = success(this).feedback("challenge.flag.correct").build(); + return success(this).feedback("challenge.flag.correct").build(); } else { - userTracker.assignmentFailed(webSession.getCurrentLesson()); - attackResult = failed(this).feedback("challenge.flag.incorrect").build(); + return failed(this).feedback("challenge.flag.incorrect").build(); } - userTrackerRepository.save(userTracker); - return attackResult; } } diff --git a/src/main/java/org/owasp/webgoat/lessons/challenges/challenge7/Assignment7.java b/src/main/java/org/owasp/webgoat/lessons/challenges/challenge7/Assignment7.java index 31260e8e1..a641bff28 100644 --- a/src/main/java/org/owasp/webgoat/lessons/challenges/challenge7/Assignment7.java +++ b/src/main/java/org/owasp/webgoat/lessons/challenges/challenge7/Assignment7.java @@ -1,9 +1,9 @@ package org.owasp.webgoat.lessons.challenges.challenge7; +import jakarta.servlet.http.HttpServletRequest; import java.net.URI; import java.net.URISyntaxException; import java.time.LocalDateTime; -import javax.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AttackResult; diff --git a/src/main/java/org/owasp/webgoat/lessons/challenges/challenge8/Assignment8.java b/src/main/java/org/owasp/webgoat/lessons/challenges/challenge8/Assignment8.java index 507b7b4bd..6623ea1a0 100644 --- a/src/main/java/org/owasp/webgoat/lessons/challenges/challenge8/Assignment8.java +++ b/src/main/java/org/owasp/webgoat/lessons/challenges/challenge8/Assignment8.java @@ -1,9 +1,9 @@ package org.owasp.webgoat.lessons.challenges.challenge8; +import jakarta.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; -import javax.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; diff --git a/src/main/java/org/owasp/webgoat/lessons/clientsidefiltering/Salaries.java b/src/main/java/org/owasp/webgoat/lessons/clientsidefiltering/Salaries.java index bd4de62fc..9f5b42b32 100644 --- a/src/main/java/org/owasp/webgoat/lessons/clientsidefiltering/Salaries.java +++ b/src/main/java/org/owasp/webgoat/lessons/clientsidefiltering/Salaries.java @@ -22,6 +22,7 @@ package org.owasp.webgoat.lessons.clientsidefiltering; +import jakarta.annotation.PostConstruct; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -31,7 +32,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.annotation.PostConstruct; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; diff --git a/src/main/java/org/owasp/webgoat/lessons/cryptography/EncodingAssignment.java b/src/main/java/org/owasp/webgoat/lessons/cryptography/EncodingAssignment.java index 65c115c41..437e89959 100644 --- a/src/main/java/org/owasp/webgoat/lessons/cryptography/EncodingAssignment.java +++ b/src/main/java/org/owasp/webgoat/lessons/cryptography/EncodingAssignment.java @@ -22,9 +22,9 @@ package org.owasp.webgoat.lessons.cryptography; +import jakarta.servlet.http.HttpServletRequest; import java.util.Base64; import java.util.Random; -import javax.servlet.http.HttpServletRequest; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AttackResult; import org.springframework.http.MediaType; diff --git a/src/main/java/org/owasp/webgoat/lessons/cryptography/HashingAssignment.java b/src/main/java/org/owasp/webgoat/lessons/cryptography/HashingAssignment.java index b83f931a8..266c53ffa 100644 --- a/src/main/java/org/owasp/webgoat/lessons/cryptography/HashingAssignment.java +++ b/src/main/java/org/owasp/webgoat/lessons/cryptography/HashingAssignment.java @@ -22,10 +22,10 @@ package org.owasp.webgoat.lessons.cryptography; +import jakarta.servlet.http.HttpServletRequest; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Random; -import javax.servlet.http.HttpServletRequest; import javax.xml.bind.DatatypeConverter; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AssignmentHints; diff --git a/src/main/java/org/owasp/webgoat/lessons/cryptography/SigningAssignment.java b/src/main/java/org/owasp/webgoat/lessons/cryptography/SigningAssignment.java index 382ee3b16..ffcb739a5 100644 --- a/src/main/java/org/owasp/webgoat/lessons/cryptography/SigningAssignment.java +++ b/src/main/java/org/owasp/webgoat/lessons/cryptography/SigningAssignment.java @@ -22,11 +22,11 @@ package org.owasp.webgoat.lessons.cryptography; +import jakarta.servlet.http.HttpServletRequest; import java.security.InvalidAlgorithmParameterException; import java.security.KeyPair; import java.security.NoSuchAlgorithmException; import java.security.interfaces.RSAPublicKey; -import javax.servlet.http.HttpServletRequest; import javax.xml.bind.DatatypeConverter; import lombok.extern.slf4j.Slf4j; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; diff --git a/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFFeedback.java b/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFFeedback.java index a5387efd0..4f4beb91a 100644 --- a/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFFeedback.java +++ b/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFFeedback.java @@ -24,11 +24,11 @@ package org.owasp.webgoat.lessons.csrf; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Map; import java.util.UUID; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.exception.ExceptionUtils; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AssignmentHints; diff --git a/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFGetFlag.java b/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFGetFlag.java index e2cbc90c7..2a929817b 100644 --- a/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFGetFlag.java +++ b/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFGetFlag.java @@ -22,10 +22,10 @@ package org.owasp.webgoat.lessons.csrf; +import jakarta.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; import java.util.Random; -import javax.servlet.http.HttpServletRequest; import org.owasp.webgoat.container.i18n.PluginMessages; import org.owasp.webgoat.container.session.UserSessionData; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFLogin.java b/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFLogin.java index 08d226245..e41409457 100644 --- a/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFLogin.java +++ b/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFLogin.java @@ -22,7 +22,7 @@ package org.owasp.webgoat.lessons.csrf; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AssignmentHints; import org.owasp.webgoat.container.assignments.AttackResult; diff --git a/src/main/java/org/owasp/webgoat/lessons/csrf/ForgedReviews.java b/src/main/java/org/owasp/webgoat/lessons/csrf/ForgedReviews.java index c11d43c5e..e82a46cc7 100644 --- a/src/main/java/org/owasp/webgoat/lessons/csrf/ForgedReviews.java +++ b/src/main/java/org/owasp/webgoat/lessons/csrf/ForgedReviews.java @@ -25,6 +25,7 @@ package org.owasp.webgoat.lessons.csrf; import static org.springframework.http.MediaType.ALL_VALUE; import com.google.common.collect.Lists; +import jakarta.servlet.http.HttpServletRequest; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -32,7 +33,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AssignmentHints; import org.owasp.webgoat.container.assignments.AttackResult; diff --git a/src/main/java/org/owasp/webgoat/lessons/hijacksession/HijackSessionAssignment.java b/src/main/java/org/owasp/webgoat/lessons/hijacksession/HijackSessionAssignment.java index 00416b964..8fae4e89d 100644 --- a/src/main/java/org/owasp/webgoat/lessons/hijacksession/HijackSessionAssignment.java +++ b/src/main/java/org/owasp/webgoat/lessons/hijacksession/HijackSessionAssignment.java @@ -22,8 +22,8 @@ package org.owasp.webgoat.lessons.hijacksession; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AssignmentHints; diff --git a/src/main/java/org/owasp/webgoat/lessons/httpproxies/HttpBasicsInterceptRequest.java b/src/main/java/org/owasp/webgoat/lessons/httpproxies/HttpBasicsInterceptRequest.java index b3ad85e95..7330c747b 100644 --- a/src/main/java/org/owasp/webgoat/lessons/httpproxies/HttpBasicsInterceptRequest.java +++ b/src/main/java/org/owasp/webgoat/lessons/httpproxies/HttpBasicsInterceptRequest.java @@ -22,7 +22,7 @@ package org.owasp.webgoat.lessons.httpproxies; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AttackResult; import org.springframework.http.HttpMethod; diff --git a/src/main/java/org/owasp/webgoat/lessons/idor/IDORViewOtherProfile.java b/src/main/java/org/owasp/webgoat/lessons/idor/IDORViewOtherProfile.java index f216cb580..b4e8a3cbd 100644 --- a/src/main/java/org/owasp/webgoat/lessons/idor/IDORViewOtherProfile.java +++ b/src/main/java/org/owasp/webgoat/lessons/idor/IDORViewOtherProfile.java @@ -22,9 +22,9 @@ package org.owasp.webgoat.lessons.idor; +import jakarta.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletResponse; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AssignmentHints; import org.owasp.webgoat.container.assignments.AttackResult; diff --git a/src/main/java/org/owasp/webgoat/lessons/jwt/JWTVotesEndpoint.java b/src/main/java/org/owasp/webgoat/lessons/jwt/JWTVotesEndpoint.java index 02a935498..e1ac1a0d2 100644 --- a/src/main/java/org/owasp/webgoat/lessons/jwt/JWTVotesEndpoint.java +++ b/src/main/java/org/owasp/webgoat/lessons/jwt/JWTVotesEndpoint.java @@ -31,14 +31,14 @@ import io.jsonwebtoken.Jwt; import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.impl.TextCodec; +import jakarta.annotation.PostConstruct; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; import java.time.Duration; import java.time.Instant; import java.util.Date; import java.util.HashMap; import java.util.Map; -import javax.annotation.PostConstruct; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AssignmentHints; diff --git a/src/main/java/org/owasp/webgoat/lessons/logging/LogBleedingTask.java b/src/main/java/org/owasp/webgoat/lessons/logging/LogBleedingTask.java index 710f22f1a..a338407bf 100644 --- a/src/main/java/org/owasp/webgoat/lessons/logging/LogBleedingTask.java +++ b/src/main/java/org/owasp/webgoat/lessons/logging/LogBleedingTask.java @@ -22,10 +22,10 @@ package org.owasp.webgoat.lessons.logging; +import jakarta.annotation.PostConstruct; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.UUID; -import javax.annotation.PostConstruct; import org.apache.logging.log4j.util.Strings; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AttackResult; diff --git a/src/main/java/org/owasp/webgoat/lessons/passwordreset/ResetLinkAssignmentForgotPassword.java b/src/main/java/org/owasp/webgoat/lessons/passwordreset/ResetLinkAssignmentForgotPassword.java index 34b8ee856..c53931418 100644 --- a/src/main/java/org/owasp/webgoat/lessons/passwordreset/ResetLinkAssignmentForgotPassword.java +++ b/src/main/java/org/owasp/webgoat/lessons/passwordreset/ResetLinkAssignmentForgotPassword.java @@ -22,8 +22,8 @@ package org.owasp.webgoat.lessons.passwordreset; +import jakarta.servlet.http.HttpServletRequest; import java.util.UUID; -import javax.servlet.http.HttpServletRequest; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AttackResult; import org.springframework.beans.factory.annotation.Value; diff --git a/src/main/java/org/owasp/webgoat/lessons/passwordreset/resetlink/PasswordChangeForm.java b/src/main/java/org/owasp/webgoat/lessons/passwordreset/resetlink/PasswordChangeForm.java index 604c51fd3..4601cc78a 100644 --- a/src/main/java/org/owasp/webgoat/lessons/passwordreset/resetlink/PasswordChangeForm.java +++ b/src/main/java/org/owasp/webgoat/lessons/passwordreset/resetlink/PasswordChangeForm.java @@ -1,7 +1,7 @@ package org.owasp.webgoat.lessons.passwordreset.resetlink; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/org/owasp/webgoat/lessons/pathtraversal/ProfileUploadRetrieval.java b/src/main/java/org/owasp/webgoat/lessons/pathtraversal/ProfileUploadRetrieval.java index f52bed34a..402945f12 100644 --- a/src/main/java/org/owasp/webgoat/lessons/pathtraversal/ProfileUploadRetrieval.java +++ b/src/main/java/org/owasp/webgoat/lessons/pathtraversal/ProfileUploadRetrieval.java @@ -1,5 +1,7 @@ package org.owasp.webgoat.lessons.pathtraversal; +import jakarta.annotation.PostConstruct; +import jakarta.servlet.http.HttpServletRequest; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -8,8 +10,6 @@ import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Files; import java.util.Base64; -import javax.annotation.PostConstruct; -import javax.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.RandomUtils; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; diff --git a/src/main/java/org/owasp/webgoat/lessons/spoofcookie/SpoofCookieAssignment.java b/src/main/java/org/owasp/webgoat/lessons/spoofcookie/SpoofCookieAssignment.java index 2efc739f6..a943cc7b5 100644 --- a/src/main/java/org/owasp/webgoat/lessons/spoofcookie/SpoofCookieAssignment.java +++ b/src/main/java/org/owasp/webgoat/lessons/spoofcookie/SpoofCookieAssignment.java @@ -22,9 +22,9 @@ package org.owasp.webgoat.lessons.spoofcookie; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; import java.util.Map; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AttackResult; diff --git a/src/main/java/org/owasp/webgoat/lessons/sqlinjection/introduction/SqlInjectionLesson5.java b/src/main/java/org/owasp/webgoat/lessons/sqlinjection/introduction/SqlInjectionLesson5.java index 32db401fa..9678a2f9d 100644 --- a/src/main/java/org/owasp/webgoat/lessons/sqlinjection/introduction/SqlInjectionLesson5.java +++ b/src/main/java/org/owasp/webgoat/lessons/sqlinjection/introduction/SqlInjectionLesson5.java @@ -22,11 +22,11 @@ package org.owasp.webgoat.lessons.sqlinjection.introduction; +import jakarta.annotation.PostConstruct; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import javax.annotation.PostConstruct; import org.owasp.webgoat.container.LessonDataSource; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AssignmentHints; diff --git a/src/main/java/org/owasp/webgoat/lessons/sqlinjection/introduction/SqlInjectionLesson5b.java b/src/main/java/org/owasp/webgoat/lessons/sqlinjection/introduction/SqlInjectionLesson5b.java index 20225384f..d8cecf291 100644 --- a/src/main/java/org/owasp/webgoat/lessons/sqlinjection/introduction/SqlInjectionLesson5b.java +++ b/src/main/java/org/owasp/webgoat/lessons/sqlinjection/introduction/SqlInjectionLesson5b.java @@ -22,9 +22,9 @@ package org.owasp.webgoat.lessons.sqlinjection.introduction; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.sql.*; -import javax.servlet.http.HttpServletRequest; import org.owasp.webgoat.container.LessonDataSource; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AssignmentHints; diff --git a/src/main/java/org/owasp/webgoat/lessons/webwolfintroduction/LandingAssignment.java b/src/main/java/org/owasp/webgoat/lessons/webwolfintroduction/LandingAssignment.java index c6e9e0493..63764adea 100644 --- a/src/main/java/org/owasp/webgoat/lessons/webwolfintroduction/LandingAssignment.java +++ b/src/main/java/org/owasp/webgoat/lessons/webwolfintroduction/LandingAssignment.java @@ -22,9 +22,9 @@ package org.owasp.webgoat.lessons.webwolfintroduction; +import jakarta.servlet.http.HttpServletRequest; import java.net.URI; import java.net.URISyntaxException; -import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AttackResult; diff --git a/src/main/java/org/owasp/webgoat/lessons/xss/DOMCrossSiteScripting.java b/src/main/java/org/owasp/webgoat/lessons/xss/DOMCrossSiteScripting.java index 11da6ea19..e7df0a4ed 100644 --- a/src/main/java/org/owasp/webgoat/lessons/xss/DOMCrossSiteScripting.java +++ b/src/main/java/org/owasp/webgoat/lessons/xss/DOMCrossSiteScripting.java @@ -22,8 +22,8 @@ package org.owasp.webgoat.lessons.xss; +import jakarta.servlet.http.HttpServletRequest; import java.security.SecureRandom; -import javax.servlet.http.HttpServletRequest; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; import org.owasp.webgoat.container.assignments.AttackResult; import org.owasp.webgoat.container.session.UserSessionData; diff --git a/src/main/java/org/owasp/webgoat/lessons/xxe/Comment.java b/src/main/java/org/owasp/webgoat/lessons/xxe/Comment.java index 90d06fdd1..12b7516b5 100644 --- a/src/main/java/org/owasp/webgoat/lessons/xxe/Comment.java +++ b/src/main/java/org/owasp/webgoat/lessons/xxe/Comment.java @@ -22,7 +22,8 @@ package org.owasp.webgoat.lessons.xxe; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -37,7 +38,8 @@ import lombok.ToString; @Setter @AllArgsConstructor @NoArgsConstructor -@XmlRootElement +@XmlRootElement(name = "comment") +@XmlType @ToString public class Comment { private String user; diff --git a/src/main/java/org/owasp/webgoat/lessons/xxe/CommentsCache.java b/src/main/java/org/owasp/webgoat/lessons/xxe/CommentsCache.java index b949f0abe..e8abf3bd3 100644 --- a/src/main/java/org/owasp/webgoat/lessons/xxe/CommentsCache.java +++ b/src/main/java/org/owasp/webgoat/lessons/xxe/CommentsCache.java @@ -26,6 +26,8 @@ import static java.util.Optional.empty; import static java.util.Optional.of; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; import java.io.IOException; import java.io.StringReader; import java.time.LocalDateTime; @@ -36,8 +38,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; import javax.xml.XMLConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import org.owasp.webgoat.container.session.WebSession; @@ -93,7 +93,7 @@ public class CommentsCache { * progress etc). In real life the XmlMapper bean defined above will be used automatically and the * Comment class can be directly used in the controller method (instead of a String) */ - protected Comment parseXml(String xml) throws JAXBException, XMLStreamException { + protected Comment parseXml(String xml) throws XMLStreamException, JAXBException { var jc = JAXBContext.newInstance(Comment.class); var xif = XMLInputFactory.newInstance(); diff --git a/src/main/java/org/owasp/webgoat/lessons/xxe/ContentTypeAssignment.java b/src/main/java/org/owasp/webgoat/lessons/xxe/ContentTypeAssignment.java index 2e54dc1d8..4555fcd72 100644 --- a/src/main/java/org/owasp/webgoat/lessons/xxe/ContentTypeAssignment.java +++ b/src/main/java/org/owasp/webgoat/lessons/xxe/ContentTypeAssignment.java @@ -24,7 +24,7 @@ package org.owasp.webgoat.lessons.xxe; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.exec.OS; import org.apache.commons.lang3.exception.ExceptionUtils; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; @@ -60,8 +60,7 @@ public class ContentTypeAssignment extends AssignmentEndpoint { public AttackResult createNewUser( HttpServletRequest request, @RequestBody String commentStr, - @RequestHeader("Content-Type") String contentType) - throws Exception { + @RequestHeader("Content-Type") String contentType) { AttackResult attackResult = failed(this).build(); if (APPLICATION_JSON_VALUE.equals(contentType)) { diff --git a/src/main/java/org/owasp/webgoat/lessons/xxe/SimpleXXE.java b/src/main/java/org/owasp/webgoat/lessons/xxe/SimpleXXE.java index d51712cd4..53638e0d8 100644 --- a/src/main/java/org/owasp/webgoat/lessons/xxe/SimpleXXE.java +++ b/src/main/java/org/owasp/webgoat/lessons/xxe/SimpleXXE.java @@ -25,7 +25,7 @@ package org.owasp.webgoat.lessons.xxe; import static org.springframework.http.MediaType.ALL_VALUE; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.exec.OS; import org.apache.commons.lang3.exception.ExceptionUtils; import org.owasp.webgoat.container.assignments.AssignmentEndpoint; diff --git a/src/main/java/org/owasp/webgoat/webwolf/FileServer.java b/src/main/java/org/owasp/webgoat/webwolf/FileServer.java index a23af4ce7..5eda1ca2b 100644 --- a/src/main/java/org/owasp/webgoat/webwolf/FileServer.java +++ b/src/main/java/org/owasp/webgoat/webwolf/FileServer.java @@ -24,10 +24,10 @@ package org.owasp.webgoat.webwolf; import static org.springframework.http.MediaType.ALL_VALUE; +import jakarta.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.util.ArrayList; -import javax.servlet.http.HttpServletRequest; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/org/owasp/webgoat/webwolf/MvcConfiguration.java b/src/main/java/org/owasp/webgoat/webwolf/MvcConfiguration.java index f5fec0777..3c267bd32 100644 --- a/src/main/java/org/owasp/webgoat/webwolf/MvcConfiguration.java +++ b/src/main/java/org/owasp/webgoat/webwolf/MvcConfiguration.java @@ -22,8 +22,8 @@ package org.owasp.webgoat.webwolf; +import jakarta.annotation.PostConstruct; import java.io.File; -import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; diff --git a/src/main/java/org/owasp/webgoat/webwolf/WebSecurityConfig.java b/src/main/java/org/owasp/webgoat/webwolf/WebSecurityConfig.java index 740a34856..64f6758c7 100644 --- a/src/main/java/org/owasp/webgoat/webwolf/WebSecurityConfig.java +++ b/src/main/java/org/owasp/webgoat/webwolf/WebSecurityConfig.java @@ -29,54 +29,49 @@ import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; 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.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.password.NoOpPasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; -/** Security configuration for WebGoat. */ +/** Security configuration for WebWolf. */ @Configuration @AllArgsConstructor @EnableWebSecurity -public class WebSecurityConfig extends WebSecurityConfigurerAdapter { +public class WebSecurityConfig { private final UserService userDetailsService; - @Override - protected void configure(HttpSecurity http) throws Exception { - ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry security = - http.authorizeRequests() - .antMatchers(HttpMethod.POST, "/fileupload") - .authenticated() - .antMatchers(HttpMethod.GET, "/files", "/mail", "/requests") - .authenticated() - .and() - .authorizeRequests() - .anyRequest() - .permitAll(); - - security.and().csrf().disable().formLogin().loginPage("/login").failureUrl("/login?error=true"); - security.and().formLogin().loginPage("/login").defaultSuccessUrl("/home", true).permitAll(); - security.and().logout().permitAll(); + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http.authorizeHttpRequests( + auth -> auth.requestMatchers(HttpMethod.POST, "/fileupload").authenticated()); + http.authorizeHttpRequests( + auth -> + auth.requestMatchers(HttpMethod.GET, "/files", "/mail", "/requests").authenticated()); + http.authorizeHttpRequests().anyRequest().permitAll(); + http.csrf().disable().formLogin().loginPage("/login").failureUrl("/login?error=true"); + http.formLogin().loginPage("/login").defaultSuccessUrl("/home", true).permitAll(); + http.logout().permitAll(); + return http.build(); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { - auth.userDetailsService(userDetailsService); // .passwordEncoder(bCryptPasswordEncoder()); + auth.userDetailsService(userDetailsService); } @Bean - @Override - public UserDetailsService userDetailsServiceBean() throws Exception { + public UserDetailsService userDetailsServiceBean() { return userDetailsService; } - @Override @Bean - protected AuthenticationManager authenticationManager() throws Exception { - return super.authenticationManager(); + public AuthenticationManager authenticationManager( + AuthenticationConfiguration authenticationConfiguration) throws Exception { + return authenticationConfiguration.getAuthenticationManager(); } @Bean diff --git a/src/main/java/org/owasp/webgoat/webwolf/WebWolf.java b/src/main/java/org/owasp/webgoat/webwolf/WebWolf.java index fa5d488a3..395f69d36 100644 --- a/src/main/java/org/owasp/webgoat/webwolf/WebWolf.java +++ b/src/main/java/org/owasp/webgoat/webwolf/WebWolf.java @@ -23,7 +23,7 @@ package org.owasp.webgoat.webwolf; import org.owasp.webgoat.webwolf.requests.WebWolfTraceRepository; -import org.springframework.boot.actuate.trace.http.HttpTraceRepository; +import org.springframework.boot.actuate.web.exchanges.HttpExchangeRepository; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -37,7 +37,7 @@ import org.springframework.context.annotation.PropertySource; public class WebWolf { @Bean - public HttpTraceRepository traceRepository() { + public HttpExchangeRepository traceRepository() { return new WebWolfTraceRepository(); } } diff --git a/src/main/java/org/owasp/webgoat/webwolf/mailbox/Email.java b/src/main/java/org/owasp/webgoat/webwolf/mailbox/Email.java index 4cca7856b..dac61e427 100644 --- a/src/main/java/org/owasp/webgoat/webwolf/mailbox/Email.java +++ b/src/main/java/org/owasp/webgoat/webwolf/mailbox/Email.java @@ -23,10 +23,14 @@ package org.owasp.webgoat.webwolf.mailbox; import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; import java.io.Serializable; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import javax.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/src/main/java/org/owasp/webgoat/webwolf/mailbox/MailboxController.java b/src/main/java/org/owasp/webgoat/webwolf/mailbox/MailboxController.java index e7a42214f..fb1bde0e5 100644 --- a/src/main/java/org/owasp/webgoat/webwolf/mailbox/MailboxController.java +++ b/src/main/java/org/owasp/webgoat/webwolf/mailbox/MailboxController.java @@ -24,7 +24,6 @@ package org.owasp.webgoat.webwolf.mailbox; import java.util.List; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; @@ -38,7 +37,6 @@ import org.springframework.web.servlet.ModelAndView; @RestController @RequiredArgsConstructor -@Slf4j public class MailboxController { private final MailboxRepository mailboxRepository; diff --git a/src/main/java/org/owasp/webgoat/webwolf/requests/LandingPage.java b/src/main/java/org/owasp/webgoat/webwolf/requests/LandingPage.java index 6d46c014f..7bdcc1006 100644 --- a/src/main/java/org/owasp/webgoat/webwolf/requests/LandingPage.java +++ b/src/main/java/org/owasp/webgoat/webwolf/requests/LandingPage.java @@ -22,8 +22,8 @@ package org.owasp.webgoat.webwolf.requests; +import jakarta.servlet.http.HttpServletRequest; import java.util.concurrent.Callable; -import javax.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; diff --git a/src/main/java/org/owasp/webgoat/webwolf/requests/Requests.java b/src/main/java/org/owasp/webgoat/webwolf/requests/Requests.java index f510ed7e9..5effa524e 100644 --- a/src/main/java/org/owasp/webgoat/webwolf/requests/Requests.java +++ b/src/main/java/org/owasp/webgoat/webwolf/requests/Requests.java @@ -32,8 +32,7 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.springframework.boot.actuate.trace.http.HttpTrace; -import org.springframework.boot.actuate.trace.http.HttpTrace.Request; +import org.springframework.boot.actuate.web.exchanges.HttpExchange; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Controller; @@ -78,8 +77,8 @@ public class Requests { return model; } - private boolean allowedTrace(HttpTrace t, UserDetails user) { - Request req = t.getRequest(); + private boolean allowedTrace(HttpExchange t, UserDetails user) { + HttpExchange.Request req = t.getRequest(); boolean allowed = true; /* do not show certain traces to other users in a classroom setup */ if (req.getUri().getPath().contains("/files") @@ -95,11 +94,11 @@ public class Requests { return allowed; } - private String path(HttpTrace t) { + private String path(HttpExchange t) { return (String) t.getRequest().getUri().getPath(); } - private String toJsonString(HttpTrace t) { + private String toJsonString(HttpExchange t) { try { return objectMapper.writeValueAsString(t); } catch (JsonProcessingException e) { diff --git a/src/main/java/org/owasp/webgoat/webwolf/requests/WebWolfTraceRepository.java b/src/main/java/org/owasp/webgoat/webwolf/requests/WebWolfTraceRepository.java index bba73a890..ceff13923 100644 --- a/src/main/java/org/owasp/webgoat/webwolf/requests/WebWolfTraceRepository.java +++ b/src/main/java/org/owasp/webgoat/webwolf/requests/WebWolfTraceRepository.java @@ -26,8 +26,8 @@ import com.google.common.collect.EvictingQueue; import java.util.ArrayList; import java.util.List; import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.actuate.trace.http.HttpTrace; -import org.springframework.boot.actuate.trace.http.HttpTraceRepository; +import org.springframework.boot.actuate.web.exchanges.HttpExchange; +import org.springframework.boot.actuate.web.exchanges.HttpExchangeRepository; /** * Keep track of all the incoming requests, we are only keeping track of request originating from @@ -37,9 +37,9 @@ import org.springframework.boot.actuate.trace.http.HttpTraceRepository; * @since 8/13/17. */ @Slf4j -public class WebWolfTraceRepository implements HttpTraceRepository { +public class WebWolfTraceRepository implements HttpExchangeRepository { - private final EvictingQueue traces = EvictingQueue.create(10000); + private final EvictingQueue traces = EvictingQueue.create(10000); private final List exclusionList = List.of( "/tmpdir", @@ -54,11 +54,11 @@ public class WebWolfTraceRepository implements HttpTraceRepository { "/mail"); @Override - public List findAll() { + public List findAll() { return List.of(); } - public List findAllTraces() { + public List findAllTraces() { return new ArrayList<>(traces); } @@ -67,7 +67,7 @@ public class WebWolfTraceRepository implements HttpTraceRepository { } @Override - public void add(HttpTrace httpTrace) { + public void add(HttpExchange httpTrace) { var path = httpTrace.getRequest().getUri().getPath(); if (!isInExclusionList(path)) { traces.add(httpTrace); diff --git a/src/main/java/org/owasp/webgoat/webwolf/user/WebGoatUser.java b/src/main/java/org/owasp/webgoat/webwolf/user/WebGoatUser.java index d432ff925..35f7dd92f 100644 --- a/src/main/java/org/owasp/webgoat/webwolf/user/WebGoatUser.java +++ b/src/main/java/org/owasp/webgoat/webwolf/user/WebGoatUser.java @@ -22,11 +22,11 @@ package org.owasp.webgoat.webwolf.user; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Transient; import java.util.Collection; import java.util.Collections; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Transient; import lombok.Getter; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.User; diff --git a/src/main/resources/application-webgoat.properties b/src/main/resources/application-webgoat.properties index cd217395c..186c62690 100644 --- a/src/main/resources/application-webgoat.properties +++ b/src/main/resources/application-webgoat.properties @@ -13,11 +13,12 @@ server.ssl.key-store-password=${WEBGOAT_KEYSTORE_PASSWORD:password} server.ssl.key-alias=${WEBGOAT_KEY_ALIAS:goat} server.ssl.enabled=${WEBGOAT_SSLENABLED:false} -spring.datasource.url=jdbc:hsqldb:file:${webgoat.server.directory}/webgoat -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.HSQLDialect -spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver -spring.jpa.properties.hibernate.default_schema=CONTAINER spring.banner.location=classpath:banner.txt +spring.datasource.url=jdbc:hsqldb:file:${webgoat.server.directory}/webgoat +spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver +spring.jpa.open-in-view=false +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.HSQLDialect +spring.jpa.properties.hibernate.default_schema=CONTAINER logging.level.org.thymeleaf=INFO logging.level.org.thymeleaf.TemplateEngine.CONFIG=INFO @@ -28,6 +29,7 @@ logging.level.org.springframework=INFO logging.level.org.springframework.boot.devtools=INFO logging.level.org.owasp=DEBUG logging.level.org.owasp.webgoat=DEBUG +logging.level.org.hidbernate.SQL=DEBUG webgoat.server.directory=${user.home}/.webgoat-${webgoat.build.version}/ webgoat.user.directory=${user.home}/.webgoat-${webgoat.build.version}/ @@ -51,11 +53,11 @@ spring.jackson.serialization.write-dates-as-timestamps=false #For static file refresh ... and faster dev :D spring.devtools.restart.additional-paths=webgoat-container/src/main/resources/static/js,webgoat-container/src/main/resources/static/css -exclude.categories=${EXCLUDE_CATEGORIES:none,none} #exclude based on the enum of the Category +exclude.categories=${EXCLUDE_CATEGORIES:none,none} -exclude.lessons=${EXCLUDE_LESSONS:none,none} #exclude based on the class name of a lesson e.g.: LessonTemplate +exclude.lessons=${EXCLUDE_LESSONS:none,none} management.health.db.enabled=true management.endpoint.health.show-details=always diff --git a/src/main/resources/application-webwolf.properties b/src/main/resources/application-webwolf.properties index eedc0599b..7d7bef3d1 100644 --- a/src/main/resources/application-webwolf.properties +++ b/src/main/resources/application-webwolf.properties @@ -18,6 +18,7 @@ spring.datasource.url=jdbc:hsqldb:file:${webgoat.server.directory}/webgoat spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.HSQLDialect spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver spring.jpa.properties.hibernate.default_schema=CONTAINER +spring.jpa.open-in-view=false spring.messages.basename=i18n/messages spring.jmx.enabled=false @@ -26,7 +27,7 @@ logging.level.org.springframework.boot.devtools=WARN logging.level.org.owasp=DEBUG logging.level.org.owasp.webwolf=TRACE -management.trace.http.include=REQUEST_HEADERS,RESPONSE_HEADERS,COOKIE_HEADERS,TIME_TAKEN +management.httpexchanges.recording.include=REQUEST_HEADERS,RESPONSE_HEADERS,COOKIE_HEADERS,TIME_TAKEN management.endpoint.httptrace.enabled=true spring.thymeleaf.cache=false diff --git a/src/main/resources/db/container/V3__id.sql b/src/main/resources/db/container/V3__id.sql new file mode 100644 index 000000000..2787eed56 --- /dev/null +++ b/src/main/resources/db/container/V3__id.sql @@ -0,0 +1,4 @@ +ALTER TABLE CONTAINER.ASSIGNMENT ALTER COLUMN ID SET GENERATED BY DEFAULT AS IDENTITY(START WITH 1); +ALTER TABLE CONTAINER.LESSON_TRACKER ALTER COLUMN ID SET GENERATED BY DEFAULT AS IDENTITY(START WITH 1); +ALTER TABLE CONTAINER.USER_TRACKER ALTER COLUMN ID SET GENERATED BY DEFAULT AS IDENTITY(START WITH 1); + diff --git a/src/main/resources/lessons/authbypass/html/AuthBypass.html b/src/main/resources/lessons/authbypass/html/AuthBypass.html index 914bd2064..1630a5981 100644 --- a/src/main/resources/lessons/authbypass/html/AuthBypass.html +++ b/src/main/resources/lessons/authbypass/html/AuthBypass.html @@ -4,14 +4,14 @@ -
+
-
+
@@ -72,9 +72,9 @@ - + - + diff --git a/src/main/resources/lessons/bypassrestrictions/html/BypassRestrictions.html b/src/main/resources/lessons/bypassrestrictions/html/BypassRestrictions.html index 4c506a09f..de38da671 100755 --- a/src/main/resources/lessons/bypassrestrictions/html/BypassRestrictions.html +++ b/src/main/resources/lessons/bypassrestrictions/html/BypassRestrictions.html @@ -6,12 +6,12 @@ -
+
-
+
@@ -59,7 +59,7 @@
-
+
diff --git a/src/main/resources/lessons/challenges/html/Challenge.html b/src/main/resources/lessons/challenges/html/Challenge.html index 713d902f3..5a03f3da8 100644 --- a/src/main/resources/lessons/challenges/html/Challenge.html +++ b/src/main/resources/lessons/challenges/html/Challenge.html @@ -3,7 +3,7 @@
-
+
diff --git a/src/main/resources/lessons/challenges/html/Challenge1.html b/src/main/resources/lessons/challenges/html/Challenge1.html index f69942f38..2d9e95114 100644 --- a/src/main/resources/lessons/challenges/html/Challenge1.html +++ b/src/main/resources/lessons/challenges/html/Challenge1.html @@ -3,7 +3,7 @@
-
+
diff --git a/src/main/resources/lessons/challenges/html/Challenge5.html b/src/main/resources/lessons/challenges/html/Challenge5.html index 9a6f42348..25ace8fc6 100644 --- a/src/main/resources/lessons/challenges/html/Challenge5.html +++ b/src/main/resources/lessons/challenges/html/Challenge5.html @@ -4,7 +4,7 @@
-
+
diff --git a/src/main/resources/lessons/challenges/html/Challenge6.html b/src/main/resources/lessons/challenges/html/Challenge6.html index 1a906c0a6..018857871 100644 --- a/src/main/resources/lessons/challenges/html/Challenge6.html +++ b/src/main/resources/lessons/challenges/html/Challenge6.html @@ -4,7 +4,7 @@
-
+
diff --git a/src/main/resources/lessons/challenges/html/Challenge7.html b/src/main/resources/lessons/challenges/html/Challenge7.html index dec4331b1..618db5817 100644 --- a/src/main/resources/lessons/challenges/html/Challenge7.html +++ b/src/main/resources/lessons/challenges/html/Challenge7.html @@ -12,7 +12,7 @@ f94008f801fceb8833a30fe56a8b26976347edcf First version of WebGoat Cloud website
-
+
diff --git a/src/main/resources/lessons/challenges/html/Challenge8.html b/src/main/resources/lessons/challenges/html/Challenge8.html index 989977d2d..c79bcc833 100644 --- a/src/main/resources/lessons/challenges/html/Challenge8.html +++ b/src/main/resources/lessons/challenges/html/Challenge8.html @@ -3,7 +3,7 @@
-
+
diff --git a/src/main/resources/lessons/chromedevtools/html/ChromeDevTools.html b/src/main/resources/lessons/chromedevtools/html/ChromeDevTools.html index c83603964..1ce04f190 100644 --- a/src/main/resources/lessons/chromedevtools/html/ChromeDevTools.html +++ b/src/main/resources/lessons/chromedevtools/html/ChromeDevTools.html @@ -4,22 +4,22 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -23,7 +23,7 @@ -
+
diff --git a/src/main/resources/lessons/clientsidefiltering/html/ClientSideFiltering.html b/src/main/resources/lessons/clientsidefiltering/html/ClientSideFiltering.html index 18d965c66..a863a0edc 100644 --- a/src/main/resources/lessons/clientsidefiltering/html/ClientSideFiltering.html +++ b/src/main/resources/lessons/clientsidefiltering/html/ClientSideFiltering.html @@ -2,10 +2,10 @@
-
+
-
+

@@ -74,7 +74,7 @@
-
+
diff --git a/src/main/resources/lessons/cryptography/html/Cryptography.html b/src/main/resources/lessons/cryptography/html/Cryptography.html index 6e6f32767..19438ef6c 100644 --- a/src/main/resources/lessons/cryptography/html/Cryptography.html +++ b/src/main/resources/lessons/cryptography/html/Cryptography.html @@ -18,11 +18,11 @@ $(document).ready(initialise);
-
+
-
+
@@ -41,7 +41,7 @@ $(document).ready(initialise);
-
+
@@ -58,7 +58,7 @@ $(document).ready(initialise);
-
+
@@ -76,12 +76,12 @@ $(document).ready(initialise);
-
+
-
+
@@ -101,12 +101,12 @@ $(document).ready(initialise);
-
+
-
+
@@ -123,7 +123,7 @@ $(document).ready(initialise);
-
+
diff --git a/src/main/resources/lessons/csrf/html/CSRF.html b/src/main/resources/lessons/csrf/html/CSRF.html index 01fdb696c..61a6029b3 100644 --- a/src/main/resources/lessons/csrf/html/CSRF.html +++ b/src/main/resources/lessons/csrf/html/CSRF.html @@ -3,15 +3,15 @@
-
+
-
+
-
+
-
+
@@ -54,7 +54,7 @@
-
+
@@ -121,15 +121,15 @@
-
+
-
+
-
+
-
+
@@ -251,7 +251,7 @@
-
+
diff --git a/src/main/resources/lessons/deserialization/html/InsecureDeserialization.html b/src/main/resources/lessons/deserialization/html/InsecureDeserialization.html index 1b64172f4..43b58e9dd 100755 --- a/src/main/resources/lessons/deserialization/html/InsecureDeserialization.html +++ b/src/main/resources/lessons/deserialization/html/InsecureDeserialization.html @@ -3,24 +3,24 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/src/main/resources/lessons/hijacksession/lessonSolutions/html/HijackSession.html b/src/main/resources/lessons/hijacksession/lessonSolutions/html/HijackSession.html index ac8ab94d5..4d5022d0a 100644 --- a/src/main/resources/lessons/hijacksession/lessonSolutions/html/HijackSession.html +++ b/src/main/resources/lessons/hijacksession/lessonSolutions/html/HijackSession.html @@ -7,7 +7,7 @@
-
+
diff --git a/src/main/resources/lessons/htmltampering/html/HtmlTampering.html b/src/main/resources/lessons/htmltampering/html/HtmlTampering.html index c40fdd68c..859de642c 100755 --- a/src/main/resources/lessons/htmltampering/html/HtmlTampering.html +++ b/src/main/resources/lessons/htmltampering/html/HtmlTampering.html @@ -3,12 +3,12 @@
-
+
-
+
-
+
diff --git a/src/main/resources/lessons/httpbasics/html/HttpBasics.html b/src/main/resources/lessons/httpbasics/html/HttpBasics.html index e3dcc79c0..2171590e4 100644 --- a/src/main/resources/lessons/httpbasics/html/HttpBasics.html +++ b/src/main/resources/lessons/httpbasics/html/HttpBasics.html @@ -6,13 +6,13 @@ -
+
-
+
@@ -42,7 +42,7 @@ -
+
diff --git a/src/main/resources/lessons/httpproxies/html/HttpProxies.html b/src/main/resources/lessons/httpproxies/html/HttpProxies.html index 3b96be434..25ba2cc70 100644 --- a/src/main/resources/lessons/httpproxies/html/HttpProxies.html +++ b/src/main/resources/lessons/httpproxies/html/HttpProxies.html @@ -3,23 +3,23 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/src/main/resources/lessons/idor/html/IDOR.html b/src/main/resources/lessons/idor/html/IDOR.html index b4b7f530f..9547fb00f 100644 --- a/src/main/resources/lessons/idor/html/IDOR.html +++ b/src/main/resources/lessons/idor/html/IDOR.html @@ -4,14 +4,14 @@ -
+
-
+
@@ -46,7 +46,7 @@ -
+
@@ -76,7 +76,7 @@ -
+
-
+
@@ -108,7 +108,7 @@ -
+
@@ -123,7 +123,7 @@ -
+
@@ -147,7 +147,7 @@
-
+
@@ -176,7 +176,7 @@ -
+
diff --git a/src/main/resources/lessons/insecurelogin/html/InsecureLogin.html b/src/main/resources/lessons/insecurelogin/html/InsecureLogin.html index a150a2f1c..30e04e4c7 100755 --- a/src/main/resources/lessons/insecurelogin/html/InsecureLogin.html +++ b/src/main/resources/lessons/insecurelogin/html/InsecureLogin.html @@ -6,12 +6,12 @@ -
+
-
+
diff --git a/src/main/resources/lessons/jwt/html/JWT.html b/src/main/resources/lessons/jwt/html/JWT.html index fdf7a5fa6..c210971a2 100644 --- a/src/main/resources/lessons/jwt/html/JWT.html +++ b/src/main/resources/lessons/jwt/html/JWT.html @@ -3,14 +3,14 @@
-
+
-
+
-
+
@@ -35,10 +35,10 @@
-
+
-
+
@@ -102,7 +102,7 @@
-
+
@@ -112,7 +112,7 @@ -
+
@@ -134,18 +134,18 @@
-
+
-
+
-
+

 
@@ -173,11 +173,11 @@
 
-
+
-
+
@@ -299,7 +299,7 @@
-
+
@@ -359,7 +359,7 @@
-
+
diff --git a/src/main/resources/lessons/lessontemplate/documentation/lesson-template-attack.adoc b/src/main/resources/lessons/lessontemplate/documentation/lesson-template-attack.adoc index 2be501c4f..8342ffd9f 100644 --- a/src/main/resources/lessons/lessontemplate/documentation/lesson-template-attack.adoc +++ b/src/main/resources/lessons/lessontemplate/documentation/lesson-template-attack.adoc @@ -82,7 +82,7 @@ green when the user solves the assignment. To make this work we need to add to t [source] ----
-
+
-
+
-
+
-
+
---- diff --git a/src/main/resources/lessons/lessontemplate/documentation/lesson-template-video-more.adoc b/src/main/resources/lessons/lessontemplate/documentation/lesson-template-video-more.adoc index eb6502f36..b3c1fa7a5 100644 --- a/src/main/resources/lessons/lessontemplate/documentation/lesson-template-video-more.adoc +++ b/src/main/resources/lessons/lessontemplate/documentation/lesson-template-video-more.adoc @@ -5,7 +5,7 @@ You can include multiple adoc files in one page, by including them in the same ` [source] ----
-
-
+
+
----- \ No newline at end of file +---- diff --git a/src/main/resources/lessons/lessontemplate/html/LessonTemplate.html b/src/main/resources/lessons/lessontemplate/html/LessonTemplate.html index 9b1c7557a..c6f49d651 100644 --- a/src/main/resources/lessons/lessontemplate/html/LessonTemplate.html +++ b/src/main/resources/lessons/lessontemplate/html/LessonTemplate.html @@ -4,38 +4,38 @@ -
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -71,7 +71,7 @@ see other lessons for other more complex examples -->
-
+
diff --git a/src/main/resources/lessons/logging/html/LogSpoofing.html b/src/main/resources/lessons/logging/html/LogSpoofing.html index 68e49a064..13071ada3 100755 --- a/src/main/resources/lessons/logging/html/LogSpoofing.html +++ b/src/main/resources/lessons/logging/html/LogSpoofing.html @@ -6,12 +6,12 @@ -
+
-
+
-
+
-
+
-
+
diff --git a/src/main/resources/lessons/missingac/html/MissingFunctionAC.html b/src/main/resources/lessons/missingac/html/MissingFunctionAC.html index bb0d1d248..8fdd8bbf8 100644 --- a/src/main/resources/lessons/missingac/html/MissingFunctionAC.html +++ b/src/main/resources/lessons/missingac/html/MissingFunctionAC.html @@ -1,12 +1,12 @@
-
+
-
+