diff --git a/lib/objects/local_string_encoder.rb b/lib/objects/local_string_encoder.rb
index 8702631a9..3d9650054 100644
--- a/lib/objects/local_string_encoder.rb
+++ b/lib/objects/local_string_encoder.rb
@@ -17,6 +17,7 @@ class StringEncoder
attr_accessor :strings_to_encode
attr_accessor :has_base64_inputs
attr_accessor :outputs
+ attr_accessor :iterations
# override this
def initialize
@@ -24,6 +25,7 @@ class StringEncoder
self.strings_to_encode = []
self.module_name = 'Null encoder'
self.has_base64_inputs = false
+ self.iterations = 1
self.outputs = []
end
@@ -79,7 +81,8 @@ class StringEncoder
def get_options_array
[['--help', '-h', GetoptLong::NO_ARGUMENT],
['--b64', GetoptLong::OPTIONAL_ARGUMENT],
- ['--strings_to_encode', '-s', GetoptLong::OPTIONAL_ARGUMENT]]
+ ['--strings_to_encode', '-s', GetoptLong::OPTIONAL_ARGUMENT],
+ ['--iterations', GetoptLong::OPTIONAL_ARGUMENT],]
end
# Override this when using read_fact's in your module. Always call super first.
@@ -97,6 +100,12 @@ class StringEncoder
self.strings_to_encode << arg;
when '--b64'
# do nothing
+ when '--iterations'
+ if not arg.to_i == 0
+ self.iterations = arg.to_i
+ else
+ self.iterations = 1
+ end
end
end
diff --git a/lib/objects/local_string_generator.rb b/lib/objects/local_string_generator.rb
index 58dae9dd4..a9bf03c18 100644
--- a/lib/objects/local_string_generator.rb
+++ b/lib/objects/local_string_generator.rb
@@ -14,12 +14,14 @@ class StringGenerator
attr_accessor :module_name
attr_accessor :has_base64_inputs
attr_accessor :outputs
+ attr_accessor :iterations
# override this
def initialize
# default values
self.module_name = 'Null generator'
self.has_base64_inputs = false
+ self.iterations = 1
self.outputs = []
end
@@ -66,7 +68,8 @@ class StringGenerator
def get_options_array
[['--help', '-h', GetoptLong::NO_ARGUMENT],
- ['--b64', GetoptLong::OPTIONAL_ARGUMENT]]
+ ['--b64', GetoptLong::OPTIONAL_ARGUMENT],
+ ['--iterations', GetoptLong::OPTIONAL_ARGUMENT]]
end
# Override this when using read_fact's in your module. Always call super first
@@ -82,6 +85,12 @@ class StringGenerator
usage
when '--b64'
# do nothing
+ when '--iterations'
+ if not arg.to_i == 0
+ self.iterations = arg.to_i
+ else
+ self.iterations = 1
+ end
end
end
@@ -91,6 +100,7 @@ class StringGenerator
OPTIONS:
--strings_to_encode [string]
+ --iterations [Integer]
"
exit
end
@@ -101,7 +111,9 @@ class StringGenerator
read_arguments
Print.local_verbose "Generating..."
- generate
+ self.iterations.times do
+ generate
+ end
# print the first 1000 chars to screen
output = self.outputs.to_s
diff --git a/modules/generators/config_files/filezilla_config/secgen_metadata.xml b/modules/generators/config_files/filezilla_config/secgen_metadata.xml
index 25cbcd5c0..1bf55ef05 100644
--- a/modules/generators/config_files/filezilla_config/secgen_metadata.xml
+++ b/modules/generators/config_files/filezilla_config/secgen_metadata.xml
@@ -8,15 +8,21 @@
Jack Biggs
MIT
Creates a Filezilla config file which includes a host, a port and a password
-
- string_generator
- local_calculation
- linux
-
- host
- port
- password
-
- config_file
-
-
\ No newline at end of file
+
+ string_generator
+ local_calculation
+ linux
+
+ host
+ port
+ password
+
+ 0.0.0.0
+
+
+ 21
+
+
+ Nothing to see here
+
+
diff --git a/modules/generators/content/password_file/secgen_metadata.xml b/modules/generators/content/password_file/secgen_metadata.xml
index 7c96cf702..d1e31dfcb 100644
--- a/modules/generators/content/password_file/secgen_metadata.xml
+++ b/modules/generators/content/password_file/secgen_metadata.xml
@@ -17,6 +17,19 @@
usernames
benign
malicious
+
+
+ password
+
+
+ root
+
+
+ Cars
+
+
+ world_domination
+
generated_strings
diff --git a/modules/generators/content/password_file/templates/password_file.md.erb b/modules/generators/content/password_file/templates/password_file.md.erb
index 8d565f67c..478185a07 100644
--- a/modules/generators/content/password_file/templates/password_file.md.erb
+++ b/modules/generators/content/password_file/templates/password_file.md.erb
@@ -1,13 +1,11 @@
# Password list
<%
- website_count = 0
- pass_list.each { |pass|
+ pass_list.each_with_index { |pass, index|
%>
-## <%= website_sample[website_count] %>
-### Username: <%= user_list[website_count] %>
+## <%= website_sample[index] %>
+### Username: <%= user_list[index] %>
### Password: <%= pass %>
-<% website_count += 1 %>
<%
}
%>
diff --git a/modules/generators/flag/flag_words/secgen_metadata.xml b/modules/generators/flag/flag_words/secgen_metadata.xml
index e9d7932ad..e87ab9b12 100644
--- a/modules/generators/flag/flag_words/secgen_metadata.xml
+++ b/modules/generators/flag/flag_words/secgen_metadata.xml
@@ -1,12 +1,13 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.github/cliffe/SecGen/generator">
Random Words Flag Generator
Z. Cliffe Schreuders
MIT
- Uses a wordlist (Ruby gem + a wordlist) to generate a list of random (mostly English) dictionary words. May include punctuation.
+ Uses a wordlist (Ruby gem + a wordlist) to generate a list of random (mostly English)
+ dictionary words. May include punctuation.
flag_generator
local_calculation
@@ -17,5 +18,5 @@
http://wordlist.sourceforge.net/
generated_strings
-
-
+
+
\ No newline at end of file
diff --git a/modules/generators/structured_content/ss_modules/manifests/.no_puppet b/modules/generators/structured_content/ss_modules/manifests/.no_puppet
new file mode 100644
index 000000000..e69de29bb
diff --git a/modules/generators/structured_content/ss_modules/secgen_local/local.rb b/modules/generators/structured_content/ss_modules/secgen_local/local.rb
new file mode 100644
index 000000000..d19969b17
--- /dev/null
+++ b/modules/generators/structured_content/ss_modules/secgen_local/local.rb
@@ -0,0 +1,58 @@
+#!/usr/bin/ruby
+require_relative '../../../../../lib/objects/local_string_generator.rb'
+require 'fileutils'
+
+class SSModuleListGenerator < StringGenerator
+ attr_accessor :filter
+
+ LOCAL_DIR = File.expand_path('../../',__FILE__)
+ TEMPLATE_PATH = "#{LOCAL_DIR}/templates/active-modules"
+
+ def initialize
+ super
+
+ self.module_name = 'Security Shepherd Module Generator'
+ self.filter = []
+ end
+
+ def generate
+ modules = File.new(TEMPLATE_PATH)
+ if not self.filter.empty?
+ self.filter.each { |criteria|
+ IO.foreach(modules) { |line|
+ # Very basic filter to capture matches based on a filter string
+ if "#{line}".match(criteria)
+ self.outputs << "#{line}".strip
+ end
+ }
+ }
+ else
+ modules.each { |line| self.outputs << "#{line}".strip}
+ end
+ end
+
+ def get_options_array
+ super + [['--filter', GetoptLong::OPTIONAL_ARGUMENT]]
+ end
+
+ def process_options(opt, arg)
+ super
+
+ case opt
+ when '--filter'
+ self.filter << arg
+ end
+ end
+
+ def usage
+ Print.err "Usage:
+ #{$0} [--options]
+
+ OPTIONS:
+ --filter [String]
+"
+ exit
+ end
+end
+
+SSModuleListGenerator.new.run
diff --git a/modules/generators/structured_content/ss_modules/secgen_metadata.xml b/modules/generators/structured_content/ss_modules/secgen_metadata.xml
new file mode 100644
index 000000000..e1d327902
--- /dev/null
+++ b/modules/generators/structured_content/ss_modules/secgen_metadata.xml
@@ -0,0 +1,20 @@
+
+
+
+ Security Shepherd module list Generator
+ James Davis
+ MIT
+ Generates a list of strings based on security shepherd modules
+
+
+ ss_modules
+ linux
+
+
+ filter
+
+ module_list
+
\ No newline at end of file
diff --git a/modules/generators/structured_content/ss_modules/ss_modules.pp b/modules/generators/structured_content/ss_modules/ss_modules.pp
new file mode 100644
index 000000000..e69de29bb
diff --git a/modules/generators/structured_content/ss_modules/templates/active-modules b/modules/generators/structured_content/ss_modules/templates/active-modules
new file mode 100644
index 000000000..52eb705d5
--- /dev/null
+++ b/modules/generators/structured_content/ss_modules/templates/active-modules
@@ -0,0 +1,55 @@
+Broken Session Management
+Session Management Challenge 1
+Session Management Challenge 2
+Session Management Challenge 3
+Session Management Challenge 4
+Session Management Challenge 5
+Session Management Challenge 6
+Session Management Challenge 7
+Session Management Challenge 8
+Failure to Restrict URL Access
+Failure to Restrict URL Access 1
+Failure to Restrict URL Access 2
+Failure to Restrict URL Access 3
+Security Misconfiguration
+Security Misconfig Cookie Flag
+Unvalidated Redirects and Forwards
+Poor Data Validation
+Poor Data Validation 1
+Poor Data Validation 2
+Insecure Direct Object References
+Insecure Direct Object Reference Bank
+Insecure Direct Object Reference Challenge 1
+Insecure Direct Object Reference Challenge 2
+Cross Site Scripting
+Cross Site Scripting 1
+Cross Site Scripting 2
+Cross Site Scripting 3
+Cross Site Scripting 4
+Cross Site Scripting 5
+Cross Site Scripting 6
+SQL Injection
+SQL Injection 1
+SQL Injection 2
+SQL Injection 3
+SQL Injection 4
+SQL Injection 5
+SQL Injection 6
+SQL Injection 7
+SQL Injection Escaping
+SQL Injection Stored Procedure
+Cross Site Request Forgery
+CSRF 1
+CSRF 2
+CSRF 3
+CSRF 4
+CSRF 5
+CSRF 6
+CSRF 7
+CSRF JSON
+Insecure Cryptographic Storage
+Insecure Cryptographic Storage Challenge 1
+Insecure Cryptographic Storage Challenge 2
+Insecure Cryptographic Storage Challenge 3
+Insecure Cryptographic Storage Challenge 4
+Insecure Cryptographic Storage Home Made Key
\ No newline at end of file
diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/files/stretch.list b/modules/vulnerabilities/unix/http/apache_druid_rce/files/stretch.list
index 927ab7e90..61e318bc0 100644
--- a/modules/vulnerabilities/unix/http/apache_druid_rce/files/stretch.list
+++ b/modules/vulnerabilities/unix/http/apache_druid_rce/files/stretch.list
@@ -1,2 +1,2 @@
-deb http://deb.debian.org/debian/ stretch main
-deb-src http://deb.debian.org/debian stretch main
\ No newline at end of file
+deb http://archive.debian.org/debian/ stretch main
+deb-src http://archive.debian.org/debian stretch main
\ No newline at end of file
diff --git a/modules/vulnerabilities/unix/http/jenkins_cli/files/stretch.list b/modules/vulnerabilities/unix/http/jenkins_cli/files/stretch.list
index 927ab7e90..61e318bc0 100644
--- a/modules/vulnerabilities/unix/http/jenkins_cli/files/stretch.list
+++ b/modules/vulnerabilities/unix/http/jenkins_cli/files/stretch.list
@@ -1,2 +1,2 @@
-deb http://deb.debian.org/debian/ stretch main
-deb-src http://deb.debian.org/debian stretch main
\ No newline at end of file
+deb http://archive.debian.org/debian/ stretch main
+deb-src http://archive.debian.org/debian stretch main
\ No newline at end of file
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/files/ROOT.war b/modules/vulnerabilities/unix/web_training/security_shepherd/files/ROOT.war
new file mode 100644
index 000000000..6d1af66a7
Binary files /dev/null and b/modules/vulnerabilities/unix/web_training/security_shepherd/files/ROOT.war differ
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/files/database.properties b/modules/vulnerabilities/unix/web_training/security_shepherd/files/database.properties
new file mode 100644
index 000000000..1fb8cb9df
--- /dev/null
+++ b/modules/vulnerabilities/unix/web_training/security_shepherd/files/database.properties
@@ -0,0 +1,6 @@
+databaseConnectionURL=jdbc:mariadb://localhost:3306/
+DriverType=org.mariadb.jdbc.Driver
+databaseSchema=core
+databaseUsername=root
+databasePassword=CowSaysMoo
+databaseOptions=useUnicode=true&character_set_server=utf8mb4
\ No newline at end of file
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/files/grant.sql b/modules/vulnerabilities/unix/web_training/security_shepherd/files/grant.sql
new file mode 100644
index 000000000..128b78115
--- /dev/null
+++ b/modules/vulnerabilities/unix/web_training/security_shepherd/files/grant.sql
@@ -0,0 +1 @@
+GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'CowSaysMoo' WITH GRANT OPTION;
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/files/moduleSchemas.sql b/modules/vulnerabilities/unix/web_training/security_shepherd/files/moduleSchemas.sql
new file mode 100644
index 000000000..a57c098cf
--- /dev/null
+++ b/modules/vulnerabilities/unix/web_training/security_shepherd/files/moduleSchemas.sql
@@ -0,0 +1,1381 @@
+/*
+ * This file is part of the Security Shepherd Project.
+ *
+ * The Security Shepherd project 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * The Security Shepherd project 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 the Security Shepherd project. If not, see .
+ */
+
+
+-- Script used to create all of the schemas on the vulnerable database server
+
+DELIMITER ;
+
+-- ======================================================
+-- SQL Lesson
+-- ======================================================
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+DROP SCHEMA IF EXISTS `SqlInjLesson`;
+CREATE SCHEMA IF NOT EXISTS `SqlInjLesson` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `SqlInjLesson` ;
+
+-- -----------------------------------------------------
+-- Table `SqlInjLesson`.`tb_users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `SqlInjLesson`.`tb_users` (
+ `usersId` INT NOT NULL AUTO_INCREMENT ,
+ `username` VARCHAR(64) NOT NULL ,
+ `comment` LONGTEXT NULL ,
+ PRIMARY KEY (`usersId`) )
+ENGINE = InnoDB;
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `SqlInjLesson`.`tb_users`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `SqlInjLesson`;
+INSERT INTO `SqlInjLesson`.`tb_users` (`usersId`, `username`, `comment`) VALUES (14232, 'Mark Denihan', 'This guy wrote this application');
+INSERT INTO `SqlInjLesson`.`tb_users` (`usersId`, `username`, `comment`) VALUES (61523, 'Cloud', 'Has a Big Sword');
+INSERT INTO `SqlInjLesson`.`tb_users` (`usersId`, `username`, `comment`) VALUES (12543, 'Fred Mtenzi', 'A lecturer in DIT Kevin Street');
+INSERT INTO `SqlInjLesson`.`tb_users` (`usersId`, `username`, `comment`) VALUES (82642, 'qw!dshs@ab', 'Lesson Completed. The result key is 3c17f6bf34080979e0cebda5672e989c07ceec9fa4ee7b7c17c9e3ce26bc63e0');
+INSERT INTO `SqlInjLesson`.`tb_users` (`usersId`, `username`, `comment`) VALUES (12345, 'user', 'Try Adding some SQL Code');
+INSERT INTO `SqlInjLesson`.`tb_users` (`usersId`, `username`, `comment`) VALUES (12346, 'OR 1 = 1', 'Your Close, You need to escape the string with an apostraphe so that your code is interpreted');
+
+COMMIT;
+
+-- ======================================================
+-- SQL Challenge Two (email)
+-- ======================================================
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+DROP SCHEMA IF EXISTS `SqlChalEmail` ;
+CREATE SCHEMA IF NOT EXISTS `SqlChalEmail` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `SqlChalEmail` ;
+
+-- -----------------------------------------------------
+-- Table `SqlChalEmail`.`customers`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `SqlChalEmail`.`customers` (
+ `customerId` VARCHAR(64) NOT NULL ,
+ `customerName` VARCHAR(32) NOT NULL ,
+ `customerAddress` VARCHAR(32) NOT NULL ,
+ `comment` LONGTEXT NULL ,
+ PRIMARY KEY (`customerId`) )
+ENGINE = InnoDB;
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `SqlChalEmail`.`customers`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `SqlChalEmail`;
+INSERT INTO `SqlChalEmail`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('019ce129ee8960a6b875b20095705d53f8c7b0ca', 'John Fits', 'crazycat@example.com', NULL);
+INSERT INTO `SqlChalEmail`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('44e2bdc1059903f464e5ba9a34b927614d7fee55', 'Rita Hanolan', 'thenightbefore@example.com', 'Well Done! The Result key is f62abebf5658a6a44c5c9babc7865110c62f5ecd9d0a7052db48c4dbee0200e3');
+INSERT INTO `SqlChalEmail`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('05159435826869ccfd76d77a2ed4ba7c2023f0cb', 'Rubix Man', 'manycolours@cube.com', NULL);
+INSERT INTO `SqlChalEmail`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('6c5c26a1deccf4a87059deb0a3fb463ff7d62fd5', 'Paul O Brien', 'sixshooter@deaf.com', NULL);
+
+COMMIT;
+
+-- ======================================================
+-- SQL Challenge 1
+-- ======================================================
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+CREATE SCHEMA IF NOT EXISTS `SqlChalOne` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `SqlChalOne` ;
+
+-- -----------------------------------------------------
+-- Table `SqlChalOne`.`customers`
+-- -----------------------------------------------------
+DROP TABLE IF EXISTS `SqlChalOne`.`customers` ;
+
+CREATE TABLE IF NOT EXISTS `SqlChalOne`.`customers` (
+ `customerId` VARCHAR(64) NOT NULL ,
+ `customerName` VARCHAR(32) NOT NULL ,
+ `customerAddress` VARCHAR(32) NOT NULL ,
+ `comment` LONGTEXT NULL ,
+ PRIMARY KEY (`customerId`) )
+ENGINE = InnoDB;
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `SqlChalOne`.`customers`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `SqlChalOne`;
+INSERT INTO `SqlChalOne`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('019ce129ee8960a6b875b20095705d53f8c7b0ca', 'John Fits', 'crazycat@example.com', NULL);
+INSERT INTO `SqlChalOne`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('44e2bdc1059903f464e5ba9a34b927614d7fee55', 'Rita Hanolan', 'thenightbefore@example.com', NULL);
+INSERT INTO `SqlChalOne`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('05159435826869ccfd76d77a2ed4ba7c2023f0cb', 'Rubix Man', 'manycolours@cube.com', NULL);
+INSERT INTO `SqlChalOne`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('6c5c26a1deccf4a87059deb0a3fb463ff7d62fd5', 'Paul O Brien', 'sixshooter@deaf.com', 'Well Done! The reuslt Key is fd8e9a29dab791197115b58061b215594211e72c1680f1eacc50b0394133a09f');
+
+COMMIT;
+
+-- ======================================================
+-- SQL Challenge 3
+-- ======================================================
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+CREATE SCHEMA IF NOT EXISTS `SqlChalThree` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `SqlChalThree` ;
+
+-- -----------------------------------------------------
+-- Table `SqlChalThree`.`customers`
+-- -----------------------------------------------------
+DROP TABLE IF EXISTS `SqlChalThree`.`customers` ;
+
+CREATE TABLE IF NOT EXISTS `SqlChalThree`.`customers` (
+ `customerId` VARCHAR(64) NOT NULL ,
+ `customerName` VARCHAR(32) NOT NULL ,
+ `creditCardNumber` VARCHAR(19) NOT NULL ,
+ `creditCardExp` VARCHAR(5) NOT NULL ,
+ `creditCardSecurityNumber` VARCHAR(3) NOT NULL ,
+ PRIMARY KEY (`customerId`) )
+ENGINE = InnoDB;
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `SqlChalThree`.`customers`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `SqlChalThree`;
+INSERT INTO `SqlChalThree`.`customers` (`customerId`, `customerName`, `creditCardNumber`, `creditCardExp`, `creditCardSecurityNumber`) VALUES ('ef322ce991de1a890470ad94001e2b83b9266334', 'John Doe', '8454 1244 4712 2144', '12/13', '452');
+INSERT INTO `SqlChalThree`.`customers` (`customerId`, `customerName`, `creditCardNumber`, `creditCardExp`, `creditCardSecurityNumber`) VALUES ('92cb640f60e2c9ea11cf89ef2c87d442dc3fa345', 'Jason McCoy', '5468 1763 1854 1451', '12/13', '285');
+INSERT INTO `SqlChalThree`.`customers` (`customerId`, `customerName`, `creditCardNumber`, `creditCardExp`, `creditCardSecurityNumber`) VALUES ('8d6588bbfe4ac5b52ebf452dfc5cefe934b788ae', 'Mark Denihan', '1245 2514 2315 2147', '09/20', '745');
+INSERT INTO `SqlChalThree`.`customers` (`customerId`, `customerName`, `creditCardNumber`, `creditCardExp`, `creditCardSecurityNumber`) VALUES ('b8811379df47b10b59b717942b8d2aaafeb8f0f8', 'Mary Martin', '9815 1547 3214 7569', '11/14', '987');
+INSERT INTO `SqlChalThree`.`customers` (`customerId`, `customerName`, `creditCardNumber`, `creditCardExp`, `creditCardSecurityNumber`) VALUES ('cef8433dc9f4e532999fd7767eaaf7ab620fd94d', 'Joseph McDonnell', '9175 1244 4758 8854', '12/13', '653');
+
+COMMIT;
+
+-- ======================================================
+-- Broken Authentication and Session Management Challenge 2
+-- ======================================================
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+DROP SCHEMA IF EXISTS `BrokenAuthAndSessMangChalTwo` ;
+CREATE SCHEMA IF NOT EXISTS `BrokenAuthAndSessMangChalTwo` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `BrokenAuthAndSessMangChalTwo` ;
+
+-- -----------------------------------------------------
+-- Table `BrokenAuthAndSessMangChalTwo`.`users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `BrokenAuthAndSessMangChalTwo`.`users` (
+ `userId` INT NOT NULL ,
+ `userName` VARCHAR(32) NOT NULL ,
+ `userPassword` VARCHAR(128) NOT NULL ,
+ `userAddress` VARCHAR(128) NOT NULL ,
+ PRIMARY KEY (`userId`) )
+ENGINE = InnoDB;
+
+
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `BrokenAuthAndSessMangChalTwo`.`users`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `BrokenAuthAndSessMangChalTwo`;
+INSERT INTO `BrokenAuthAndSessMangChalTwo`.`users` (`userId`, `userName`, `userPassword`, `userAddress`) VALUES (12, 'admin', 'default', 'zoidberg22@shepherd.com');
+INSERT INTO `BrokenAuthAndSessMangChalTwo`.`users` (`userId`, `userName`, `userPassword`, `userAddress`) VALUES (321, 'administrator', 'default', 'buzzthebald@shepherd.com');
+INSERT INTO `BrokenAuthAndSessMangChalTwo`.`users` (`userId`, `userName`, `userPassword`, `userAddress`) VALUES (3212, 'root', 'default', 'elitehacker@shepherd.com');
+INSERT INTO `BrokenAuthAndSessMangChalTwo`.`users` (`userId`, `userName`, `userPassword`, `userAddress`) VALUES (634, 'superuser', 'default', 'superman@security.com');
+INSERT INTO `BrokenAuthAndSessMangChalTwo`.`users` (`userId`, `userName`, `userPassword`, `userAddress`) VALUES (4524, 'privileged', 'default', 'spoiltbrat@security.com');
+
+COMMIT;
+
+-- ======================================================
+-- BrokenAuthAndSessMangChalThree
+-- ======================================================
+DROP SCHEMA IF EXISTS `BrokenAuthAndSessMangChalThree` ;
+CREATE SCHEMA IF NOT EXISTS `BrokenAuthAndSessMangChalThree` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `BrokenAuthAndSessMangChalThree`;
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+
+-- -----------------------------------------------------
+-- Table `BrokenAuthAndSessMangChalThree`.`users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `BrokenAuthAndSessMangChalThree`.`users` (
+ `userId` INT NOT NULL ,
+ `userName` VARCHAR(32) NOT NULL ,
+ `userPassword` VARCHAR(128) NOT NULL ,
+ `userAddress` VARCHAR(128) NOT NULL ,
+ `userRole` VARCHAR(8) NOT NULL DEFAULT 'guest' ,
+ PRIMARY KEY (`userId`) )
+ENGINE = InnoDB;
+
+
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `BrokenAuthAndSessMangChalThree`.`users`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `BrokenAuthAndSessMangChalThree`;
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (12, 'admin', 'default', 'zoidberg22@shepherd.com', 'admin');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (321, 'administrator', 'default', 'buzzthebald@shepherd.com', 'admin');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (3212, 'root', 'default', 'elitehacker@shepherd.com', 'admin');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (634, 'superuser', 'default', 'superman@security.com', 'admin');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (4524, 'privileged', 'default', 'spoiltbrat@security.com', 'admin');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (40, 'guest1', 'default', 'guest1@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (41, 'guest2', 'default', 'guest2@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (42, 'guest3', 'default', 'guest3@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (43, 'guest4', 'default', 'guest4@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (44, 'guest5', 'default', 'guest5@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (45, 'guest6', 'default', 'guest6@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (46, 'guest7', 'default', 'guest7@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (47, 'guest8', 'default', 'guest8@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (48, 'guest9', 'guest', 'guest9@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (49, 'guest11', 'guest', 'guest11@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (50, 'guest12', 'guest', 'guest12@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (51, 'guest13', 'guest', 'guest13@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (52, 'guest14', 'guest', 'guest14@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (53, 'guest15', 'guest', 'guest15@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (54, 'guest16', 'guest', 'guest16@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (55, 'guest17', 'guest', 'guest17@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (56, 'guest18', 'guest', 'guest18@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (57, 'guest19', 'guest', 'guest19@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (58, 'guest20', 'guest', 'guest20@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (59, 'guest21', 'guest', 'guest21@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (60, 'guest22', 'guest', 'guest22@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (61, 'guest23', 'guest', 'guest23@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (62, 'guest10', 'guest', 'guest10@guest.com', 'guest');
+
+COMMIT;
+
+-- ======================================================
+-- directObjectRefChalOne
+-- ======================================================
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+DROP SCHEMA IF EXISTS `directObjectRefChalOne` ;
+CREATE SCHEMA IF NOT EXISTS `directObjectRefChalOne` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `directObjectRefChalOne` ;
+
+-- -----------------------------------------------------
+-- Table `directObjectRefChalOne`.`users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `directObjectRefChalOne`.`users` (
+ `userId` VARCHAR(32) NOT NULL ,
+ `userName` VARCHAR(32) NOT NULL ,
+ `privateMessage` MEDIUMTEXT NOT NULL ,
+ PRIMARY KEY (`userId`) )
+ENGINE = InnoDB;
+
+
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `directObjectRefChalOne`.`users`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `directObjectRefChalOne`;
+INSERT INTO `directObjectRefChalOne`.`users` (`userId`, `userName`, `privateMessage`) VALUES ('1', 'Paul Bourke', 'No Message Set');
+INSERT INTO `directObjectRefChalOne`.`users` (`userId`, `userName`, `privateMessage`) VALUES ('3', 'Will Bailey', 'I love Go Karting');
+INSERT INTO `directObjectRefChalOne`.`users` (`userId`, `userName`, `privateMessage`) VALUES ('5', 'Orla Cleary', 'As if!');
+INSERT INTO `directObjectRefChalOne`.`users` (`userId`, `userName`, `privateMessage`) VALUES ('7', 'Ronan Fitzpatrick', 'I have retired');
+INSERT INTO `directObjectRefChalOne`.`users` (`userId`, `userName`, `privateMessage`) VALUES ('9', 'Pat McKenana', 'I have a car!');
+INSERT INTO `directObjectRefChalOne`.`users` (`userId`, `userName`, `privateMessage`) VALUES ('11', 'Hidden User', 'Result Key is dd6301b38b5ad9c54b85d07c087aebec89df8b8c769d4da084a55663e6186742');
+
+COMMIT;
+
+-- ======================================================
+-- directObjectRefChalTwo
+-- ======================================================
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+DROP SCHEMA IF EXISTS `directObjectRefChalTwo` ;
+CREATE SCHEMA IF NOT EXISTS `directObjectRefChalTwo` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `directObjectRefChalTwo` ;
+
+-- -----------------------------------------------------
+-- Table `directObjectRefChalTwo`.`users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `directObjectRefChalTwo`.`users` (
+ `userId` VARCHAR(32) NOT NULL ,
+ `userName` VARCHAR(32) NOT NULL ,
+ `privateMessage` MEDIUMTEXT NOT NULL ,
+ PRIMARY KEY (`userId`) )
+ENGINE = InnoDB;
+
+
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `directObjectRefChalTwo`.`users`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `directObjectRefChalTwo`;
+INSERT INTO `directObjectRefChalTwo`.`users` (`userId`, `userName`, `privateMessage`) VALUES ('c81e728d9d4c2f636f067f89cc14862c', 'Joe Sullivan', 'I was going to set a message, but then I decided not to.');
+INSERT INTO `directObjectRefChalTwo`.`users` (`userId`, `userName`, `privateMessage`) VALUES ('eccbc87e4b5ce2fe28308fd9f2a7baf3', 'Will Bailey', 'I love Go Karting');
+INSERT INTO `directObjectRefChalTwo`.`users` (`userId`, `userName`, `privateMessage`) VALUES ('e4da3b7fbbce2345d7772b0674a318d5', 'Orla Cleary', 'As if Im going to set a message. Who knows who could read it!');
+INSERT INTO `directObjectRefChalTwo`.`users` (`userId`, `userName`, `privateMessage`) VALUES ('8f14e45fceea167a5a36dedd4bea2543', 'Ronan Fitzpatrick', 'I have retired');
+INSERT INTO `directObjectRefChalTwo`.`users` (`userId`, `userName`, `privateMessage`) VALUES ('6512bd43d9caa6e02c990b0a82652dca', 'Pat McKenana', 'I have a car!');
+INSERT INTO `directObjectRefChalTwo`.`users` (`userId`, `userName`, `privateMessage`) VALUES ('c51ce410c124a10e0db5e4b97fc2af39', 'Hidden User', 'Result Key is 1f746b87a4e3628b90b1927de23f6077abdbbb64586d3ac9485625da21921a0f');
+
+COMMIT;
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
+
+DROP SCHEMA IF EXISTS `SQLiC5Shop` ;
+CREATE SCHEMA IF NOT EXISTS `SQLiC5Shop` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
+USE `SQLiC5Shop` ;
+
+-- -----------------------------------------------------
+-- Table `SQLiC5Shop`.`items`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `SQLiC5Shop`.`items` (
+ `itemId` INT NOT NULL,
+ `itemName` VARCHAR(45) NULL,
+ `itemCost` INT NULL,
+ PRIMARY KEY (`itemId`))
+ENGINE = InnoDB;
+
+-- -----------------------------------------------------
+-- Table `SQLiC5Shop`.`coupons`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `SQLiC5Shop`.`coupons` (
+ `couponId` INT NOT NULL,
+ `perCentOff` INT NULL,
+ `couponCode` VARCHAR(128) NULL,
+ `itemId` INT NOT NULL,
+ PRIMARY KEY (`couponId`),
+ INDEX `fk_coupons_items_idx` (`itemId` ASC),
+ CONSTRAINT `fk_coupons_items`
+ FOREIGN KEY (`itemId`)
+ REFERENCES `SQLiC5Shop`.`items` (`itemId`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION)
+ENGINE = InnoDB;
+
+-- -----------------------------------------------------
+-- Table `SQLiC5Shop`.`vipCoupons`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `SQLiC5Shop`.`vipCoupons` (
+ `vipCouponId` INT NOT NULL,
+ `perCentOff` INT NULL,
+ `couponCode` VARCHAR(128) NULL,
+ `itemId` INT NOT NULL,
+ PRIMARY KEY (`vipCouponId`),
+ INDEX `fk_vipCoupons_items1_idx` (`itemId` ASC),
+ CONSTRAINT `fk_vipCoupons_items1`
+ FOREIGN KEY (`itemId`)
+ REFERENCES `SQLiC5Shop`.`items` (`itemId`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION)
+ENGINE = InnoDB;
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `SQLiC5Shop`.`items`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `SQLiC5Shop`;
+INSERT INTO `SQLiC5Shop`.`items` (`itemId`, `itemName`, `itemCost`) VALUES (1, 'Pineapple', 30);
+INSERT INTO `SQLiC5Shop`.`items` (`itemId`, `itemName`, `itemCost`) VALUES (2, 'Orange', 3000);
+INSERT INTO `SQLiC5Shop`.`items` (`itemId`, `itemName`, `itemCost`) VALUES (3, 'Apple', 45);
+INSERT INTO `SQLiC5Shop`.`items` (`itemId`, `itemName`, `itemCost`) VALUES (4, 'Banana', 15);
+
+COMMIT;
+
+-- -----------------------------------------------------
+-- Data for table `SQLiC5Shop`.`coupons`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `SQLiC5Shop`;
+INSERT INTO `SQLiC5Shop`.`coupons` (`couponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (1, 100, 'PleaseTakeAFruit', 3);
+INSERT INTO `SQLiC5Shop`.`coupons` (`couponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (2, 100, 'FruitForFree', 3);
+INSERT INTO `SQLiC5Shop`.`coupons` (`couponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (3, 10, 'PleaseTakeAnOrange', 2);
+INSERT INTO `SQLiC5Shop`.`coupons` (`couponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (4, 50, 'HalfOffOranges', 2);
+INSERT INTO `SQLiC5Shop`.`coupons` (`couponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (5, 10, 'PleaseTakeABanana', 4);
+INSERT INTO `SQLiC5Shop`.`coupons` (`couponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (6, 50, 'HalfOffBananas', 4);
+
+COMMIT;
+
+-- -----------------------------------------------------
+-- Data for table `SQLiC5Shop`.`vipCoupons`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `SQLiC5Shop`;
+INSERT INTO `SQLiC5Shop`.`vipCoupons` (`vipCouponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (861267, 100, 'spcil\/|Pse3cr3etCouponStu.f4rU176', 2);
+
+COMMIT;
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
+
+DROP SCHEMA IF EXISTS `SqlChalFourSuperSecure` ;
+CREATE SCHEMA IF NOT EXISTS `SqlChalFourSuperSecure` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
+USE `SqlChalFourSuperSecure` ;
+
+-- ======================================================
+-- SQL Injection Challenge 4
+-- ======================================================
+
+-- -----------------------------------------------------
+-- Table `SqlChalFourSuperSecure`.`users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `SqlChalFourSuperSecure`.`users` (
+ `idusers` INT NOT NULL AUTO_INCREMENT,
+ `userName` VARCHAR(45) NOT NULL,
+ `userPassword` VARCHAR(45) NOT NULL,
+ PRIMARY KEY (`idusers`),
+ UNIQUE INDEX `userName_UNIQUE` (`userName` ASC))
+ENGINE = InnoDB;
+
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `SqlChalFourSuperSecure`.`users`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `SqlChalFourSuperSecure`;
+INSERT INTO `SqlChalFourSuperSecure`.`users` (`idusers`, `userName`, `userPassword`) VALUES (1, 'adam', '87i2ueeu2ndsedssda');
+INSERT INTO `SqlChalFourSuperSecure`.`users` (`idusers`, `userName`, `userPassword`) VALUES (2, 'player', '87iueeundsedssda');
+INSERT INTO `SqlChalFourSuperSecure`.`users` (`idusers`, `userName`, `userPassword`) VALUES (3, 'user', 'password');
+INSERT INTO `SqlChalFourSuperSecure`.`users` (`idusers`, `userName`, `userPassword`) VALUES (4, 'mark', 'password');
+INSERT INTO `SqlChalFourSuperSecure`.`users` (`idusers`, `userName`, `userPassword`) VALUES (5, 'sean', 'password');
+INSERT INTO `SqlChalFourSuperSecure`.`users` (`idusers`, `userName`, `userPassword`) VALUES (6, 'denihan', 'password');
+INSERT INTO `SqlChalFourSuperSecure`.`users` (`idusers`, `userName`, `userPassword`) VALUES (7, 'admin', "98y\'98hsadsoi!111,.,22ee");
+INSERT INTO `SqlChalFourSuperSecure`.`users` (`idusers`, `userName`, `userPassword`) VALUES (8, 'duggan', 'password');
+
+COMMIT;
+
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+-- SqlChalSix Schema
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
+
+DROP SCHEMA IF EXISTS `SqlChalSix` ;
+CREATE SCHEMA IF NOT EXISTS `SqlChalSix` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
+USE `SqlChalSix` ;
+
+-- -----------------------------------------------------
+-- Table `SqlChalSix`.`users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `SqlChalSix`.`users` (
+ `idusers` INT NOT NULL,
+ `userName` VARCHAR(45) NOT NULL,
+ `userPin` VARCHAR(16) NOT NULL,
+ `userQuestion` VARCHAR(128) NOT NULL,
+ `userAnswer` VARCHAR(191) NOT NULL,
+ `userAge` VARCHAR(16) NOT NULL,
+ PRIMARY KEY (`idusers`))
+ENGINE = InnoDB;
+
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `SqlChalSix`.`users`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `SqlChalSix`;
+INSERT INTO `SqlChalSix`.`users` (`idusers`, `userName`, `userPin`, `userQuestion`, `userAnswer`, `userAge`) VALUES (1, 'George', '8367', 'What is your favourite Flower', 'A Red Rose', '23');
+INSERT INTO `SqlChalSix`.`users` (`idusers`, `userName`, `userPin`, `userQuestion`, `userAnswer`, `userAge`) VALUES (2, 'Brendan', '4685', 'What is the answer to this level?', '17f999a8b3fbfde54124d6e94b256a264652e5087b14622e1644c884f8a33f82', '98');
+INSERT INTO `SqlChalSix`.`users` (`idusers`, `userName`, `userPin`, `userQuestion`, `userAnswer`, `userAge`) VALUES (3, 'Sean', '1254', 'Your favourite Viking', 'Thor', '25');
+INSERT INTO `SqlChalSix`.`users` (`idusers`, `userName`, `userPin`, `userQuestion`, `userAnswer`, `userAge`) VALUES (4, 'Anthony', '7844', 'What game do I suck at?', 'All of the games', '84');
+INSERT INTO `SqlChalSix`.`users` (`idusers`, `userName`, `userPin`, `userQuestion`, `userAnswer`, `userAge`) VALUES (5, 'Owen', '4648', 'Favourite Sandwhich Topping', 'Peanutbutter', '33');
+INSERT INTO `SqlChalSix`.`users` (`idusers`, `userName`, `userPin`, `userQuestion`, `userAnswer`, `userAge`) VALUES (6, 'Eoin', '2653', 'Where did I holiday in the summer of 69?', 'The Dark Side of the Moon', '12');
+INSERT INTO `SqlChalSix`.`users` (`idusers`, `userName`, `userPin`, `userQuestion`, `userAnswer`, `userAge`) VALUES (7, 'David', '3598', 'This is how we get ants', "Don\'t get me started", '6');
+
+COMMIT;
+
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+-- csrfChallengeEnumTokens Schema
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
+
+DROP SCHEMA IF EXISTS `csrfChallengeEnumTokens` ;
+CREATE SCHEMA IF NOT EXISTS `csrfChallengeEnumTokens` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
+USE `csrfChallengeEnumTokens` ;
+
+-- -----------------------------------------------------
+-- Table `csrfChallengeEnumTokens`.`csrfTokens`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `csrfChallengeEnumTokens`.`csrfTokens` (
+ `userId` VARCHAR(64) NOT NULL,
+ `csrfTokenscol` VARCHAR(191) NULL,
+ PRIMARY KEY (`userId`))
+ENGINE = InnoDB;
+
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+-- csrfChallengeFour Schema
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
+
+DROP SCHEMA IF EXISTS `csrfChallengeFour` ;
+CREATE SCHEMA IF NOT EXISTS `csrfChallengeFour` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
+USE `csrfChallengeFour` ;
+
+-- -----------------------------------------------------
+-- Table `csrfChallengeFour`.`csrfTokens`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `csrfChallengeFour`.`csrfTokens` (
+ `userId` VARCHAR(64) NOT NULL,
+ `csrfTokenscol` VARCHAR(191) NULL,
+ PRIMARY KEY (`userId`))
+ENGINE = InnoDB;
+
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+-- BrokenAuthAndSessMangChalFive Schema
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+
+DROP SCHEMA IF EXISTS `BrokenAuthAndSessMangChalFive` ;
+CREATE SCHEMA IF NOT EXISTS `BrokenAuthAndSessMangChalFive` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `BrokenAuthAndSessMangChalFive`;
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+
+-- -----------------------------------------------------
+-- Table `BrokenAuthAndSessMangChalFive`.`users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `BrokenAuthAndSessMangChalFive`.`users` (
+ `userId` INT NOT NULL ,
+ `userName` VARCHAR(32) NOT NULL ,
+ `userPassword` VARCHAR(128) NOT NULL ,
+ `userAddress` VARCHAR(128) NOT NULL ,
+ `userRole` VARCHAR(8) NOT NULL DEFAULT 'guest' ,
+ PRIMARY KEY (`userId`) )
+ENGINE = InnoDB;
+
+
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `BrokenAuthAndSessMangChalFive`.`users`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `BrokenAuthAndSessMangChalFive`;
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (12, 'admin', 'default', 'zoidberg22@shepherd.com', 'admin');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (321, 'administrator', 'default', 'buzzthebald@shepherd.com', 'admin');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (3212, 'root', 'default', 'elitehacker@shepherd.com', 'admin');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (634, 'superuser', 'default', 'superman@security.com', 'admin');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (4524, 'privileged', 'default', 'spoiltbrat@security.com', 'admin');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (40, 'guest1', 'default', 'guest1@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (41, 'guest2', 'default', 'guest2@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (42, 'guest3', 'default', 'guest3@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (43, 'guest4', 'default', 'guest4@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (44, 'guest5', 'default', 'guest5@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (45, 'guest6', 'default', 'guest6@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (46, 'guest7', 'default', 'guest7@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (47, 'guest8', 'default', 'guest8@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (48, 'guest9', 'guest', 'guest9@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (49, 'guest11', 'guest', 'guest11@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (50, 'guest12', 'guest', 'guest12@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (51, 'guest13', 'guest', 'guest13@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (52, 'guest14', 'guest', 'guest14@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (53, 'guest15', 'guest', 'guest15@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (54, 'guest16', 'guest', 'guest16@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (55, 'guest17', 'guest', 'guest17@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (56, 'guest18', 'guest', 'guest18@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (57, 'guest19', 'guest', 'guest19@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (58, 'guest20', 'guest', 'guest20@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (59, 'guest21', 'guest', 'guest21@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (60, 'guest22', 'guest', 'guest22@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (61, 'guest23', 'guest', 'guest23@guest.com', 'guest');
+INSERT INTO `BrokenAuthAndSessMangChalFive`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (62, 'guest10', 'guest', 'guest10@guest.com', 'guest');
+
+COMMIT;
+
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+-- Session Management Challenge Six Schema
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+DROP SCHEMA IF EXISTS `BrokenAuthAndSessMangChalSix` ;
+CREATE SCHEMA IF NOT EXISTS `BrokenAuthAndSessMangChalSix` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `BrokenAuthAndSessMangChalSix` ;
+
+-- -----------------------------------------------------
+-- Table `BrokenAuthAndSessMangChalSix`.`users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `BrokenAuthAndSessMangChalSix`.`users` (
+ `userId` INT NOT NULL ,
+ `userName` VARCHAR(32) NOT NULL ,
+ `userPassword` VARCHAR(128) NOT NULL ,
+ `userAddress` VARCHAR(128) NOT NULL ,
+ `secretQuestion` VARCHAR(191) NOT NULL ,
+ `secretAnswer` VARCHAR(128) NOT NULL,
+ PRIMARY KEY (`userId`) )
+ENGINE = InnoDB;
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `BrokenAuthAndSessMangChalSix`.`users`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `BrokenAuthAndSessMangChalSix`;
+INSERT INTO `BrokenAuthAndSessMangChalSix`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (1224, 'manager', '!148972hsfalkjlkfi381', 'zoidberg23@shepherd.com', 'What is the first name of the person you first kissed?', 'Lena Andrysiak');
+INSERT INTO `BrokenAuthAndSessMangChalSix`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (1225, 'sean', '!148972hsfalkjlkfi381', 'zoidberg24@shepherd.com', 'What is the first name of the person you first kissed?', 'Ronit Tornincasa');
+INSERT INTO `BrokenAuthAndSessMangChalSix`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (3214, 'administrator', '!148972hsfalkjlkfi381', 'buzzthebald@shepherd.com','What is the last name of the teacher who gave you your first failing grade?', 'Aran Keegan');
+INSERT INTO `BrokenAuthAndSessMangChalSix`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (3212, 'root', '!148972hsfalkjlkfi381', 'elitehacker@shepherd.com','What is the name of the place your wedding reception was held?', 'Deerburn Hotel');
+INSERT INTO `BrokenAuthAndSessMangChalSix`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6344, 'superuser', '!148972hsfalkjlkfi381', 'superman@security.com', 'Who was the first person to beat you up when you were 8 years old?', 'Lileas Lockwood');
+INSERT INTO `BrokenAuthAndSessMangChalSix`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (4524, 'privileged', '1489!72hsfalkjlkfi381', 'spoiltbrat@security.com', 'What was the name of the person who stole your TV the second time?', 'Olwen Sordi');
+INSERT INTO `BrokenAuthAndSessMangChalSix`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6343, 'mark', '148!972hsfalkjlkfi381', 'superman2@security.com', 'Who is your favourite Barista?', 'Buzz Fendall');
+INSERT INTO `BrokenAuthAndSessMangChalSix`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6342, 'markdenihan', '148!972hsfalkjlkfi381', 'superman3@security.com', 'Who is your most favourite person you have not met?', 'Etna Filippi');
+INSERT INTO `BrokenAuthAndSessMangChalSix`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6341, 'seanduggan', '148972!hsfalkjlkfi381', 'superman4@security.com', 'Who is your most favourite person you have not met?', 'Emily Fabian');
+INSERT INTO `BrokenAuthAndSessMangChalSix`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6551, 'rootuser', '14897!2hsfalkjlkfi381', 'superman6@security.com', 'Who is your most favourite person you have not met?', 'Leola Naggia');
+INSERT INTO `BrokenAuthAndSessMangChalSix`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6552, 'adminuser', '1489!72hsfalkjlkfi381', 'superman7@security.com', 'Who is your most favourite person you have not met?', 'Gladys Gabrielli');
+INSERT INTO `BrokenAuthAndSessMangChalSix`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6559, 'shepherd', '148972hsfalk!jlkfi381', 'superman8@security.com', 'Who is your most favourite person you have not met?', 'Morag Bristol');
+
+COMMIT;
+
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+-- Session Management Challenge Seven Schema
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+DROP SCHEMA IF EXISTS `BrokenAuthAndSessMangChalSeven` ;
+CREATE SCHEMA IF NOT EXISTS `BrokenAuthAndSessMangChalSeven` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `BrokenAuthAndSessMangChalSeven` ;
+
+-- -----------------------------------------------------
+-- Table `BrokenAuthAndSessMangChalSeven`.`users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `BrokenAuthAndSessMangChalSeven`.`users` (
+ `userId` INT NOT NULL ,
+ `userName` VARCHAR(32) NOT NULL ,
+ `userPassword` VARCHAR(128) NOT NULL ,
+ `userAddress` VARCHAR(128) NOT NULL ,
+ `secretQuestion` VARCHAR(191) NOT NULL ,
+ `secretAnswer` VARCHAR(128) NOT NULL,
+ PRIMARY KEY (`userId`) )
+ENGINE = InnoDB;
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `BrokenAuthAndSessMangChalSeven`.`users`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `BrokenAuthAndSessMangChalSeven`;
+INSERT INTO `BrokenAuthAndSessMangChalSeven`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (1224, 'manager', '!148972hsfalkjlkfi381', 'zoidberg23@shepherd.com', 'What is your favourite flower?', 'Jade Vine');
+INSERT INTO `BrokenAuthAndSessMangChalSeven`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (1225, 'sean', '!148972hsfalkjlkfi381', 'zoidberg24@shepherd.com', 'What is your favourite flower?', 'Corpse Flower');
+INSERT INTO `BrokenAuthAndSessMangChalSeven`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (3214, 'administrator', '!148972hsfalkjlkfi381', 'buzzthebald@shepherd.com','What is your favourite flower?', 'Gibraltar Campion');
+INSERT INTO `BrokenAuthAndSessMangChalSeven`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (3212, 'root', '!148972hsfalkjlkfi381', 'elitehacker@shepherd.com', 'What is your favourite flower?', 'Franklin Tree');
+INSERT INTO `BrokenAuthAndSessMangChalSeven`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6344, 'superuser', '!148972hsfalkjlkfi381', 'superman@security.com', 'What is your favourite flower?', 'Jade Vine');
+INSERT INTO `BrokenAuthAndSessMangChalSeven`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (4524, 'privileged', '1489!72hsfalkjlkfi381', 'spoiltbrat@security.com', 'What is your favourite flower?', 'Middlemist Red');
+INSERT INTO `BrokenAuthAndSessMangChalSeven`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6343, 'mark', '148!972hsfalkjlkfi381', 'superman2@security.com', 'What is your favourite flower?', 'Chocolate Cosmos');
+INSERT INTO `BrokenAuthAndSessMangChalSeven`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6342, 'markdenihan', '148!972hsfalkjlkfi381', 'superman3@security.com', 'What is your favourite flower?', 'Ghost Orchid');
+INSERT INTO `BrokenAuthAndSessMangChalSeven`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6341, 'seanduggan', '148972!hsfalkjlkfi381', 'superman4@security.com', 'What is your favourite flower?', 'Jade Vine');
+INSERT INTO `BrokenAuthAndSessMangChalSeven`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6551, 'rootuser', '14897!2hsfalkjlkfi381', 'superman6@security.com', 'What is your favourite flower?', 'Ghost Orchid');
+INSERT INTO `BrokenAuthAndSessMangChalSeven`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6552, 'adminuser', '1489!72hsfalkjlkfi381', 'superman7@security.com', 'What is your favourite flower?', 'Corpse Flower');
+INSERT INTO `BrokenAuthAndSessMangChalSeven`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `secretQuestion`, `secretAnswer`) VALUES (6559, 'shepherd', '148972hsfalk!jlkfi381', 'superman8@security.com', 'What is your favourite flower?', 'Gibraltar Campion');
+
+COMMIT;
+
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+-- CryptShop Schema
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
+
+DROP SCHEMA IF EXISTS `CryptShop` ;
+CREATE SCHEMA IF NOT EXISTS `CryptShop` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
+USE `CryptShop` ;
+
+-- -----------------------------------------------------
+-- Table `CryptShop`.`items`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `CryptShop`.`items` (
+ `itemId` INT NOT NULL,
+ `itemName` VARCHAR(45) NULL,
+ `itemCost` INT NULL,
+ PRIMARY KEY (`itemId`))
+ENGINE = InnoDB;
+
+-- -----------------------------------------------------
+-- Table `CryptShop`.`coupons`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `CryptShop`.`coupons` (
+ `couponId` INT NOT NULL,
+ `perCentOff` INT NULL,
+ `couponCode` VARCHAR(128) NULL,
+ `itemId` INT NOT NULL,
+ PRIMARY KEY (`couponId`),
+ INDEX `fk_coupons_items_idx` (`itemId` ASC),
+ CONSTRAINT `fk_coupons_items`
+ FOREIGN KEY (`itemId`)
+ REFERENCES `CryptShop`.`items` (`itemId`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION)
+ENGINE = InnoDB;
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `CryptShop`.`items`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `CryptShop`;
+INSERT INTO `CryptShop`.`items` (`itemId`, `itemName`, `itemCost`) VALUES (1, 'Pineapple', 30);
+INSERT INTO `CryptShop`.`items` (`itemId`, `itemName`, `itemCost`) VALUES (2, 'Orange', 3000);
+INSERT INTO `CryptShop`.`items` (`itemId`, `itemName`, `itemCost`) VALUES (3, 'Apple', 45);
+INSERT INTO `CryptShop`.`items` (`itemId`, `itemName`, `itemCost`) VALUES (4, 'Banana', 15);
+
+COMMIT;
+
+-- -----------------------------------------------------
+-- Data for table `CryptShop`.`coupons`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `CryptShop`;
+INSERT INTO `CryptShop`.`coupons` (`couponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (1, 100, 'PleaseTakeAFruit', 3);
+INSERT INTO `CryptShop`.`coupons` (`couponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (2, 100, 'FruitForFree', 3);
+INSERT INTO `CryptShop`.`coupons` (`couponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (3, 10, 'PleaseTakeAnOrange', 2);
+INSERT INTO `CryptShop`.`coupons` (`couponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (4, 50, 'HalfOffOranges', 2);
+INSERT INTO `CryptShop`.`coupons` (`couponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (5, 10, 'PleaseTakeABanana', 4);
+INSERT INTO `CryptShop`.`coupons` (`couponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (6, 50, 'HalfOffBananas', 4);
+INSERT INTO `CryptShop`.`coupons` (`couponId`, `perCentOff`, `couponCode`, `itemId`) VALUES (432197, 100, 'e!c!3etZoumo@Stu4rU176', 2);
+COMMIT;
+
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+-- Failure to Restrict URL Access Challenge Three Schema
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+DROP SCHEMA IF EXISTS `UrlAccessThree` ;
+CREATE SCHEMA IF NOT EXISTS `UrlAccessThree` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `UrlAccessThree` ;
+
+-- -----------------------------------------------------
+-- Table `UrlAccessThree`.`users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `UrlAccessThree`.`users` (
+ `userId` INT NOT NULL ,
+ `userName` VARCHAR(32) NOT NULL ,
+ `userPassword` VARCHAR(128) NOT NULL ,
+ `userAddress` VARCHAR(128) NOT NULL ,
+ `userRole` VARCHAR(32) NOT NULL,
+ PRIMARY KEY (`userId`) )
+ENGINE = InnoDB;
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `UrlAccessThree`.`users`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `UrlAccessThree`;
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (1223, 'aGuest', '!14897-hs.alNj.kFim81', 'zoidberg23@shepherd.com', 'guest');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (1224, 'manager', '!14897-hs.alNj.kFim81', 'zoidberg23@shepherd.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (1225, 'sean', '!14897-hs.alNj.kFim81', 'zoidberg24@shepherd.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (3214, 'administrator', '!14897-hs.alNj.kFim81', 'buzzthebald@shepherd.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (3212, 'root', '!14897-hs.alNj.kFim81', 'elitehacker@shepherd.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (6344, 'superuser', '!14897-hs.alNj.kFim81', 'superman@security.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (6345, 'MrJohnReillyTheSecond', '!14897-hs.alNj.kFim81', 'MrJohnReillyTheSecond@security.com', 'superadmin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (6346, 'megauser', '!14897-hs.alNj.kFim81', 'megaman@security.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (6347, 'hyperuser', '!14897-hs.alNj.kFim81', 'hmegaman@security.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (6348, 'godzilla', '!14897-hs.alNj.kFim81', 'godzilla@security.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (6349, 'kinguser', '!14897-hs.alNj.kFim81', 'kinguser@security.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (4524, 'privileged', '1489!72hsfalkjlkfi381', 'spoiltbrat@security.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (6343, 'mark', '148!97-hs.alNj.kFim81', 'superman2@security.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (6342, 'markdenihan', '148!97-hs.alNj.kFim81', 'superman3@security.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (6341, 'seanduggan', '148972!hsfalkjlkfi381', 'superman4@security.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (6551, 'rootuser', '14897!2hsfalkjlkfi381', 'superman6@security.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (6552, 'adminuser', '1489!72hsfalkjlkfi381', 'superman7@security.com', 'admin');
+INSERT INTO `UrlAccessThree`.`users` (`userId`, `userName`, `userPassword`, `userAddress`, `userRole`) VALUES (6559, 'shepherd', '148972hsfalk!jlkfi381', 'superman8@security.com', 'admin');
+
+COMMIT;
+
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+-- sqlInjectSeven Schema
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+
+DROP SCHEMA IF EXISTS `sqlInjectSeven` ;
+CREATE SCHEMA IF NOT EXISTS `sqlInjectSeven` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `sqlInjectSeven`;
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+
+-- -----------------------------------------------------
+-- Table `sqlInjectSeven`.`users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `sqlInjectSeven`.`users` (
+ `userId` INT NOT NULL ,
+ `userName` VARCHAR(32) NOT NULL ,
+ `userPassword` VARCHAR(128) NOT NULL ,
+ `userEmail` VARCHAR(128) NOT NULL ,
+ `userRole` VARCHAR(8) NOT NULL DEFAULT 'default' ,
+ PRIMARY KEY (`userId`) )
+ENGINE = InnoDB;
+
+
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `sqlInjectSeven`.`users`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `sqlInjectSeven`;
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (40, 'User 1', 'de1027fnNys6687as!283619fj1237fault', 'UserJohn1@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (41, 'User 2', 'd128361027fnNys6687as!9fj1237efault', 'UserJim2@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (42, 'User 3', 'defa1283619f027fnNys6687as!j1237ult', 'UserJone3@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (43, 'User 4', 'd1283619fj12027fnNys6687as!37efault', 'UserBell4@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (44, 'User 5', 'defau1283619fj1237lt', 'UserConan5@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (45, 'User 6', 'de1283619fj1237fault', 'UserSmioth6@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (46, 'User 7', 'def1d88027fnNys6687as!sd&dsault', 'UserHat7@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (47, 'User 8', 'def1d027fnNys6687as!88sd&dsault', 'UserPage8@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (48, 'User 9', 'defaul027fnNys6687as!1d88sd&dst', 'UserCube9@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (49, 'User 11', 'd1d88027fnNys6687as!sd&dsefault', 'MrsJohn1@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (50, 'User 12', 'defau027fnNys6687as!l1d88sd&dst', 'MrsJim2@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (51, 'User 13', 'def_926diUUscnaosOault', 'MrsJone3@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (52, 'User 14', 'd_926diUUscnaosOefault', 'MrsBell4@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (53, 'User 15', 'defaul_926diUUscnaosOt', 'MrsConan5@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (54, 'User 16', 'de_926diUUscnaosOfault', 'MrsSmioth6@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (55, 'User 17', 'defaul_926diUUscnaosOt', 'MrsHat7@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (56, 'User 18', 'de_926diUUscnaosOfault', 'MrsPage8@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (57, 'User 19', 'defa_926diUUscnaosOult', 'MrsCube9@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (58, 'User 20', 'd_926diUUscnaosOefault', 'Mr20@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (59, 'User 21', 'defa1027fnNys6687as!ult', 'Mr2John1@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (60, 'User 22', 'de027fnNys6687as!fault', 'Mr2Jim2@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (61, 'User 23', 'defau027fnNys6687as!lt', 'Mr2Jone3@User.com', 'default');
+INSERT INTO `sqlInjectSeven`.`users` (`userId`, `userName`, `userPassword`, `userEmail`, `userRole`) VALUES (62, 'User 10', 'def027fnNys6687as!ault', 'Mrs0@User.com', 'default');
+
+COMMIT;
+
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+-- securityMisconfigStealToken Schema
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
+
+DROP SCHEMA IF EXISTS `securityMisconfigStealToken` ;
+CREATE SCHEMA IF NOT EXISTS `securityMisconfigStealToken` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
+USE `securityMisconfigStealToken` ;
+
+-- -----------------------------------------------------
+-- Table `securityMisconfigStealToken`.`tokens`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `securityMisconfigStealToken`.`tokens` (
+ `idtokens` INT NOT NULL AUTO_INCREMENT,
+ `userId` VARCHAR(64) NULL,
+ `token` VARCHAR(64) NULL,
+ PRIMARY KEY (`idtokens`),
+ UNIQUE INDEX `userId_UNIQUE` (`userId` ASC),
+ UNIQUE INDEX `token_UNIQUE` (`token` ASC))
+ENGINE = InnoDB;
+
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- getToken Procedure
+USE `securityMisconfigStealToken`;
+DELIMITER $$
+CREATE PROCEDURE `securityMisconfigStealToken`.`getToken` (IN theUserId VARCHAR(64))
+BEGIN
+DECLARE tokenExists INT;
+COMMIT;
+SELECT count(token) FROM `securityMisconfigStealToken`.`tokens` WHERE userId = theUserId INTO tokenExists;
+IF (tokenExists < 1) THEN
+ INSERT INTO tokens (userId, token) VALUES (theUserId, SHA2(CONCAT(RAND(), now()), 256));
+ COMMIT;
+END IF;
+SELECT token FROM tokens WHERE userId = theUserId;
+END
+;
+$$
+
+DELIMITER ;
+
+-- validToken Procedure
+USE `securityMisconfigStealToken`;
+DELIMITER $$
+CREATE PROCEDURE `securityMisconfigStealToken`.`validToken` (IN theUserId VARCHAR(64), theToken VARCHAR(64))
+BEGIN
+COMMIT;
+SELECT count(token) FROM `securityMisconfigStealToken`.`tokens` WHERE userId != theUserId AND token = theToken;
+END
+;
+$$
+
+DELIMITER ;
+
+COMMIT;
+
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+-- DirectObjectBank Schema
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
+
+DROP SCHEMA IF EXISTS `directObjectBank` ;
+CREATE SCHEMA IF NOT EXISTS `directObjectBank` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
+USE `directObjectBank` ;
+
+-- -----------------------------------------------------
+-- Table `directObjectBank`.`bankAccounts`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `directObjectBank`.`bankAccounts` (
+ `account_number` INT NOT NULL AUTO_INCREMENT,
+ `account_holder` VARCHAR(45) NOT NULL,
+ `account_password` VARCHAR(191) NOT NULL,
+ `account_balance` FLOAT NOT NULL DEFAULT 5,
+ PRIMARY KEY (`account_number`),
+ UNIQUE INDEX `account_holder_UNIQUE` (`account_holder` ASC))
+ENGINE = InnoDB;
+
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `directObjectBank`.`bankAccounts`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `directObjectBank`;
+INSERT INTO `directObjectBank`.`bankAccounts` (`account_number`, `account_holder`, `account_password`, `account_balance`) VALUES (0, 'Mr. Banks', 'SignInImpossibleBecauseNotHashed', 10000000000);
+
+COMMIT;
+
+-- BankAuth Procedure
+USE `directObjectBank`;
+DELIMITER $$
+CREATE PROCEDURE `directObjectBank`.`bankAuth` (IN theUserId VARCHAR(45), thePass VARCHAR(191))
+BEGIN
+COMMIT;
+SELECT account_number, account_holder FROM `directObjectBank`.`bankAccounts` WHERE account_holder = theUserId AND account_password = SHA2(thePass, 256);
+END
+;
+$$
+
+DELIMITER ;
+
+-- CurrentFunds Procedure
+USE `directObjectBank`;
+DELIMITER $$
+CREATE PROCEDURE `directObjectBank`.`currentFunds` (IN theBankAccountNumber VARCHAR(45))
+BEGIN
+COMMIT;
+SELECT account_balance FROM `directObjectBank`.`bankAccounts` WHERE account_number = theBankAccountNumber;
+END
+;
+$$
+
+DELIMITER ;
+
+-- transferFunds Procedure
+USE `directObjectBank`;
+DELIMITER $$
+CREATE PROCEDURE `directObjectBank`.`transferFunds` (IN theGiverAccountNumber VARCHAR(45), IN theRecieverAccountNumber VARCHAR(45), IN theAmmount FLOAT)
+BEGIN
+COMMIT;
+UPDATE `directObjectBank`.`bankAccounts`
+ SET account_balance = account_balance - theAmmount
+ WHERE account_number = theGiverAccountNumber;
+UPDATE `directObjectBank`.`bankAccounts`
+ SET account_balance = account_balance + theAmmount
+ WHERE account_number = theRecieverAccountNumber;
+COMMIT;
+END
+;
+$$
+
+DELIMITER ;
+
+-- createAccount Procedure
+USE `directObjectBank`;
+DELIMITER $$
+CREATE PROCEDURE `directObjectBank`.`createAccount` (IN accountHolder VARCHAR(45), IN accountPassword VARCHAR(191))
+BEGIN
+COMMIT;
+INSERT INTO `directObjectBank`.`bankAccounts` (`account_holder`, `account_password`, `account_balance`) VALUES (accountHolder, SHA2(accountPassword, 256), 0);
+COMMIT;
+END
+;
+$$
+
+DELIMITER ;
+
+COMMIT;
+
+-- ======================================================
+-- SQL Stored Proecure Challenge
+-- ======================================================
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+DROP SCHEMA IF EXISTS `SqlChalStoredProc` ;
+CREATE SCHEMA IF NOT EXISTS `SqlChalStoredProc` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `SqlChalStoredProc` ;
+
+-- -----------------------------------------------------
+-- Table `SqlChalStoredProc`.`customers`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `SqlChalStoredProc`.`customers` (
+ `customerId` VARCHAR(64) NOT NULL ,
+ `customerName` VARCHAR(32) NOT NULL ,
+ `customerAddress` VARCHAR(128) NOT NULL ,
+ `comment` LONGTEXT NULL ,
+ PRIMARY KEY (`customerId`) )
+ENGINE = InnoDB;
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `SqlChalStoredProc`.`customers`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `SqlChalStoredProc`;
+INSERT INTO `SqlChalStoredProc`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('019ce129ee8960a6b875b20095705d53f8c7b0ca', 'John Fits', 'crazycat@example.com', NULL);
+INSERT INTO `SqlChalStoredProc`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('44e2bdc1059903f464e5ba9a34b927614d7fee55', 'Rita Hanolan', 'the1night2before3four@exampleEmails.com', 'Well Done! The Result key is d9c5757c1c086d02d491cbe46a941ecde5a65d523de36ac1bfed8dd4dd9994c8');
+INSERT INTO `SqlChalStoredProc`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('05159435826869ccfd76d77a2ed4ba7c2023f0cb', 'Rubix Man', 'manycolours@cube.com', NULL);
+INSERT INTO `SqlChalStoredProc`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('6c5c26a1deccf4a87059deb0a3fb463ff7d62fd5', 'Paul O Brien', 'sixshooter@deaf.com', NULL);
+
+COMMIT;
+
+-- findUser Procedure
+USE `SqlChalStoredProc`;
+DELIMITER $$
+CREATE PROCEDURE `SqlChalStoredProc`.`findUser` (IN theAddress VARCHAR(128))
+BEGIN
+COMMIT;
+SELECT * FROM customers WHERE customerAddress = theAddress;
+END
+;
+$$
+
+DELIMITER ;
+
+COMMIT;
+
+-- -----------------------------------------------------
+-- ======================================================
+-- ======================================================
+-- SQL Injection Poor Escaping (email)
+-- ======================================================
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+DROP SCHEMA IF EXISTS `SqlPoorEscape` ;
+CREATE SCHEMA IF NOT EXISTS `SqlPoorEscape` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
+USE `SqlPoorEscape` ;
+
+-- -----------------------------------------------------
+-- Table `SqlPoorEscape`.`customers`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `SqlPoorEscape`.`customers` (
+ `customerId` VARCHAR(64) NOT NULL ,
+ `customerName` VARCHAR(32) NOT NULL ,
+ `customerAddress` VARCHAR(35) NOT NULL ,
+ `comment` LONGTEXT NULL ,
+ PRIMARY KEY (`customerId`) )
+ENGINE = InnoDB;
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+-- Data for table `SqlPoorEscape`.`customers`
+-- -----------------------------------------------------
+START TRANSACTION;
+USE `SqlPoorEscape`;
+INSERT INTO `SqlPoorEscape`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('019h53d60a6b875b20095705d53f8c7b0ca', 'John Fits', 'thislifecouldbethelast@example.com', NULL);
+INSERT INTO `SqlPoorEscape`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('44e2bdc105ifdua464e5ba9a34b927614d7fee55', 'Rita Hanolan', 'dontfoolyourself@example.com', 'Well Done! The Result key is 0dcf9078ba5d878f9e23809ac8f013d1a08fdc8f12c5036f1a4746dbe86c0aac');
+INSERT INTO `SqlPoorEscape`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('051594asdjd6869ccfd76d77a2ed4ba7c2023f0cb', 'Rubix Man', 'dontkidyourself@cube.com', NULL);
+INSERT INTO `SqlPoorEscape`.`customers` (`customerId`, `customerName`, `customerAddress`, `comment`) VALUES ('6c5c26adjdccf4a87059deb0a3fb463ff7d62fd5', 'Paul O Brien', 'andweretooyoungtosee@deaf.com', NULL);
+
+COMMIT;
+
+
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+-- Module Schema Users
+-- -----------------------------------------------------
+-- -----------------------------------------------------
+
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+commit;
+
+GRANT USAGE ON *.* TO 'userLookUuuup'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'userLookUuuup'@'localhost';
+CREATE USER 'userLookUuuup'@'localhost' IDENTIFIED BY 'youMomaSoTh1n';
+GRANT SELECT ON `SqlChalSix`.`users` TO 'userLookUuuup'@'localhost';
+
+GRANT USAGE ON *.* TO 'DnTPubUser'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'DnTPubUser'@'localhost';
+CREATE USER 'DnTPubUser'@'localhost' IDENTIFIED BY 'ch3fBrownSa4useIsS00000Go0d';
+GRANT SELECT ON `SQLiC5Shop`.`items` TO 'DnTPubUser'@'localhost';
+GRANT SELECT ON `SQLiC5Shop`.`coupons` TO 'DnTPubUser'@'localhost';
+
+GRANT USAGE ON *.* TO 'DnTVipUser'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'DnTVipUser'@'localhost';
+CREATE USER 'DnTVipUser'@'localhost' IDENTIFIED BY 'ch3fBrownSa4useIsS00000Go0d';
+GRANT SELECT ON `SQLiC5Shop`.`items` TO 'DnTVipUser'@'localhost';
+GRANT SELECT ON `SQLiC5Shop`.`vipCoupons` TO 'DnTVipUser'@'localhost';
+
+GRANT USAGE ON *.* TO 'DnTPurUser'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'DnTPurUser'@'localhost';
+CREATE USER 'DnTPurUser'@'localhost' IDENTIFIED BY 'ch3fBrownSa4useIsS00000Go0d';
+GRANT SELECT ON `SQLiC5Shop`.`items` TO 'DnTPurUser'@'localhost';
+GRANT SELECT ON `SQLiC5Shop`.`coupons` TO 'DnTPurUser'@'localhost';
+GRANT SELECT ON `SQLiC5Shop`.`vipCoupons` TO 'DnTPurUser'@'localhost';
+
+GRANT USAGE ON *.* TO 'firstBloodyMessL'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'firstBloodyMessL'@'localhost';
+CREATE USER 'firstBloodyMessL'@'localhost' IDENTIFIED BY 'firstBlooded';
+GRANT SELECT ON `SqlInjLesson`.`tb_users` TO 'firstBloodyMessL'@'localhost';
+
+GRANT USAGE ON *.* TO 'CharlieSeabrook'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'CharlieSeabrook'@'localhost';
+CREATE USER 'CharlieSeabrook'@'localhost' IDENTIFIED BY 'shallowHal';
+GRANT SELECT ON `SqlChalEmail`.`customers` TO 'CharlieSeabrook'@'localhost';
+
+GRANT USAGE ON *.* TO 'RightGuard3d'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'RightGuard3d'@'localhost';
+CREATE USER 'RightGuard3d'@'localhost' IDENTIFIED BY 'logic3Speaker';
+GRANT SELECT ON `SqlChalOne`.`customers` TO 'RightGuard3d'@'localhost';
+
+GRANT USAGE ON *.* TO 'HdmiNoSignal'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'HdmiNoSignal'@'localhost';
+CREATE USER 'HdmiNoSignal'@'localhost' IDENTIFIED BY '1nforma1ion';
+GRANT SELECT ON `SqlChalThree`.`customers` TO 'HdmiNoSignal'@'localhost';
+
+GRANT USAGE ON *.* TO 'randomUserName'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'randomUserName'@'localhost';
+CREATE USER 'randomUserName'@'localhost' IDENTIFIED BY 'c4utionHoT';
+GRANT SELECT ON `BrokenAuthAndSessMangChalTwo`.`users` TO 'randomUserName'@'localhost';
+GRANT UPDATE ON `BrokenAuthAndSessMangChalTwo`.`users` TO 'randomUserName'@'localhost';
+
+GRANT USAGE ON *.* TO 'doveM3nCare'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'doveM3nCare'@'localhost';
+CREATE USER 'doveM3nCare'@'localhost' IDENTIFIED BY 'plusm0r3';
+GRANT SELECT ON `BrokenAuthAndSessMangChalThree`.`users` TO 'doveM3nCare'@'localhost';
+GRANT UPDATE ON `BrokenAuthAndSessMangChalThree`.`users` TO 'doveM3nCare'@'localhost';
+
+GRANT USAGE ON *.* TO 'murr4yFe1ld'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'murr4yFe1ld'@'localhost';
+CREATE USER 'murr4yFe1ld'@'localhost' IDENTIFIED BY '4gainst3ngl4nd';
+GRANT SELECT ON `directObjectRefChalOne`.`users` TO 'murr4yFe1ld'@'localhost';
+
+GRANT USAGE ON *.* TO 'd3nn1sM4nely'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'd3nn1sM4nely'@'localhost';
+CREATE USER 'd3nn1sM4nely'@'localhost' IDENTIFIED BY 'Pr0ductM4rket1ngIssu3s';
+GRANT SELECT ON `directObjectRefChalTwo`.`users` TO 'd3nn1sM4nely'@'localhost';
+
+GRANT USAGE ON *.* TO 'secureDood'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'secureDood'@'localhost';
+CREATE USER 'secureDood'@'localhost' IDENTIFIED BY 'iCantEv3n';
+GRANT SELECT ON `SqlChalFourSuperSecure`.`users` TO 'secureDood'@'localhost';
+
+GRANT USAGE ON *.* TO 'csrfChalEnuer'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'csrfChalEnuer'@'localhost';
+CREATE USER 'csrfChalEnuer'@'localhost' IDENTIFIED BY 'c4n1bUplZ';
+GRANT SELECT ON `csrfChallengeEnumTokens`.`csrfTokens` TO 'csrfChalEnuer'@'localhost';
+GRANT INSERT ON `csrfChallengeEnumTokens`.`csrfTokens` TO 'csrfChalEnuer'@'localhost';
+GRANT UPDATE ON `csrfChallengeEnumTokens`.`csrfTokens` TO 'csrfChalEnuer'@'localhost';
+
+GRANT USAGE ON *.* TO 'l3tsg0cra'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'l3tsg0cra'@'localhost';
+CREATE USER 'l3tsg0cra'@'localhost' IDENTIFIED BY '83ururMa';
+GRANT SELECT ON `BrokenAuthAndSessMangChalFive`.`users` TO 'l3tsg0cra'@'localhost';
+GRANT UPDATE ON `BrokenAuthAndSessMangChalFive`.`users` TO 'l3tsg0cra'@'localhost';
+
+GRANT USAGE ON *.* TO 'csrfChalFour'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'csrfChalFour'@'localhost';
+CREATE USER 'csrfChalFour'@'localhost' IDENTIFIED BY 'R1n13U2pv';
+GRANT SELECT ON `csrfChallengeFour`.`csrfTokens` TO 'csrfChalFour'@'localhost';
+GRANT INSERT ON `csrfChallengeFour`.`csrfTokens` TO 'csrfChalFour'@'localhost';
+GRANT UPDATE ON `csrfChallengeFour`.`csrfTokens` TO 'csrfChalFour'@'localhost';
+
+GRANT USAGE ON *.* TO 'randomMoFoName'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'randomMoFoName'@'localhost';
+CREATE USER 'randomMoFoName'@'localhost' IDENTIFIED BY 'c2zXlq_ZoT';
+GRANT SELECT ON `BrokenAuthAndSessMangChalSix`.`users` TO 'randomMoFoName'@'localhost';
+
+GRANT USAGE ON *.* TO 'randomFlower'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'randomFlower'@'localhost';
+CREATE USER 'randomFlower'@'localhost' IDENTIFIED BY 'c21-le_6oT';
+GRANT SELECT ON `BrokenAuthAndSessMangChalSeven`.`users` TO 'randomFlower'@'localhost';
+
+GRANT USAGE ON *.* TO 'tSwsfUSer'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'tSwsfUSer'@'localhost';
+CREATE USER 'tSwsfUSer'@'localhost' IDENTIFIED BY '9s31iusd-n';
+GRANT SELECT ON `CryptShop`.`items` TO 'tSwsfUSer'@'localhost';
+GRANT SELECT ON `CryptShop`.`coupons` TO 'tSwsfUSer'@'localhost';
+
+GRANT USAGE ON *.* TO 'yourOrEll'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'yourOrEll'@'localhost';
+CREATE USER 'yourOrEll'@'localhost' IDENTIFIED BY '91dj3:766f';
+GRANT SELECT ON `UrlAccessThree`.`users` TO 'yourOrEll'@'localhost';
+
+GRANT USAGE ON *.* TO 'r1ndomFlower'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'r1ndomFlower'@'localhost';
+CREATE USER 'r1ndomFlower'@'localhost' IDENTIFIED BY 'c41-l2_6oT';
+GRANT SELECT ON `sqlInjectSeven`.`users` TO 'r1ndomFlower'@'localhost';
+
+GRANT USAGE ON *.* TO 'al1th3Tokens'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'al1th3Tokens'@'localhost';
+CREATE USER 'al1th3Tokens'@'localhost' IDENTIFIED BY '87SDO63yUN.';
+GRANT SELECT ON `securityMisconfigStealToken`.`tokens` TO 'al1th3Tokens'@'localhost';
+GRANT INSERT ON `securityMisconfigStealToken`.`tokens` TO 'al1th3Tokens'@'localhost';
+GRANT EXECUTE ON PROCEDURE `securityMisconfigStealToken`.`getToken` TO 'al1th3Tokens'@'localhost';
+GRANT EXECUTE ON PROCEDURE `securityMisconfigStealToken`.`validToken` TO 'al1th3Tokens'@'localhost';
+
+GRANT USAGE ON *.* TO 'theBankMan'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'theBankMan'@'localhost';
+CREATE USER 'theBankMan'@'localhost' IDENTIFIED BY 'B4ndkm.M98n';
+GRANT SELECT ON `directObjectBank`.`bankAccounts` TO 'theBankMan'@'localhost';
+GRANT INSERT ON `directObjectBank`.`bankAccounts` TO 'theBankMan'@'localhost';
+GRANT UPDATE ON `directObjectBank`.`bankAccounts` TO 'theBankMan'@'localhost';
+GRANT EXECUTE ON PROCEDURE `directObjectBank`.`bankAuth` TO 'theBankMan'@'localhost';
+GRANT EXECUTE ON PROCEDURE `directObjectBank`.`currentFunds` TO 'theBankMan'@'localhost';
+GRANT EXECUTE ON PROCEDURE `directObjectBank`.`transferFunds` TO 'theBankMan'@'localhost';
+GRANT EXECUTE ON PROCEDURE `directObjectBank`.`createAccount` TO 'theBankMan'@'localhost';
+
+GRANT USAGE ON *.* TO 'procChalUser'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'procChalUser'@'localhost';
+CREATE USER 'procChalUser'@'localhost' IDENTIFIED BY 'k61dSmsM*8n';
+GRANT SELECT ON `SqlChalStoredProc`.`customers` TO 'procChalUser'@'localhost';
+GRANT EXECUTE ON PROCEDURE `SqlChalStoredProc`.`findUser` TO 'procChalUser'@'localhost';
+
+GRANT USAGE ON *.* TO 'imVideoingThis'@'localhost' IDENTIFIED BY 'password';
+DROP USER 'imVideoingThis'@'localhost';
+CREATE USER 'imVideoingThis'@'localhost' IDENTIFIED BY 'auoi@7723dj';
+GRANT SELECT ON `SqlPoorEscape`.`customers` TO 'imVideoingThis'@'localhost';
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/files/my.cnf b/modules/vulnerabilities/unix/web_training/security_shepherd/files/my.cnf
new file mode 100644
index 000000000..af0d1e929
--- /dev/null
+++ b/modules/vulnerabilities/unix/web_training/security_shepherd/files/my.cnf
@@ -0,0 +1,15 @@
+[client-server]
+# Port or socket location where to connect
+# port = 3306
+socket = /run/mysqld/mysqld.sock
+
+# Import all .cnf files from configuration directory
+!includedir /etc/mysql/conf.d/
+!includedir /etc/mysql/mariadb.conf.d/
+
+[mysqld]
+skip-host-cache
+datadir = /var/lib/mysql
+!includedir /etc/mysql/conf.d/
+ssl=0
+bind-address=*
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/files/server.xml b/modules/vulnerabilities/unix/web_training/security_shepherd/files/server.xml
new file mode 100644
index 000000000..2e60e825e
--- /dev/null
+++ b/modules/vulnerabilities/unix/web_training/security_shepherd/files/server.xml
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/files/shepherdKeystore.p12 b/modules/vulnerabilities/unix/web_training/security_shepherd/files/shepherdKeystore.p12
new file mode 100644
index 000000000..2abc1f588
Binary files /dev/null and b/modules/vulnerabilities/unix/web_training/security_shepherd/files/shepherdKeystore.p12 differ
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/files/web.xml b/modules/vulnerabilities/unix/web_training/security_shepherd/files/web.xml
new file mode 100644
index 000000000..d5bf4cda6
--- /dev/null
+++ b/modules/vulnerabilities/unix/web_training/security_shepherd/files/web.xml
@@ -0,0 +1,4706 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ default
+ org.apache.catalina.servlets.DefaultServlet
+
+ debug
+ 0
+
+
+ listings
+ false
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ jsp
+ org.apache.jasper.servlet.JspServlet
+
+ fork
+ false
+
+
+ xpoweredBy
+ false
+
+ 3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ default
+ /
+
+
+
+
+ jsp
+ *.jsp
+ *.jspx
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 30
+
+
+
+
+
+
+
+
+
+
+
+
+ 123
+ application/vnd.lotus-1-2-3
+
+
+ 3dml
+ text/vnd.in3d.3dml
+
+
+ 3ds
+ image/x-3ds
+
+
+ 3g2
+ video/3gpp2
+
+
+ 3gp
+ video/3gpp
+
+
+ 7z
+ application/x-7z-compressed
+
+
+ aab
+ application/x-authorware-bin
+
+
+ aac
+ audio/x-aac
+
+
+ aam
+ application/x-authorware-map
+
+
+ aas
+ application/x-authorware-seg
+
+
+ abs
+ audio/x-mpeg
+
+
+ abw
+ application/x-abiword
+
+
+ ac
+ application/pkix-attr-cert
+
+
+ acc
+ application/vnd.americandynamics.acc
+
+
+ ace
+ application/x-ace-compressed
+
+
+ acu
+ application/vnd.acucobol
+
+
+ acutc
+ application/vnd.acucorp
+
+
+ adp
+ audio/adpcm
+
+
+ aep
+ application/vnd.audiograph
+
+
+ afm
+ application/x-font-type1
+
+
+ afp
+ application/vnd.ibm.modcap
+
+
+ ahead
+ application/vnd.ahead.space
+
+
+ ai
+ application/postscript
+
+
+ aif
+ audio/x-aiff
+
+
+ aifc
+ audio/x-aiff
+
+
+ aiff
+ audio/x-aiff
+
+
+ aim
+ application/x-aim
+
+
+ air
+ application/vnd.adobe.air-application-installer-package+zip
+
+
+ ait
+ application/vnd.dvb.ait
+
+
+ ami
+ application/vnd.amiga.ami
+
+
+ anx
+ application/annodex
+
+
+ apk
+ application/vnd.android.package-archive
+
+
+ appcache
+ text/cache-manifest
+
+
+ application
+ application/x-ms-application
+
+
+ apr
+ application/vnd.lotus-approach
+
+
+ arc
+ application/x-freearc
+
+
+ art
+ image/x-jg
+
+
+ asc
+ application/pgp-signature
+
+
+ asf
+ video/x-ms-asf
+
+
+ asm
+ text/x-asm
+
+
+ aso
+ application/vnd.accpac.simply.aso
+
+
+ asx
+ video/x-ms-asf
+
+
+ atc
+ application/vnd.acucorp
+
+
+ atom
+ application/atom+xml
+
+
+ atomcat
+ application/atomcat+xml
+
+
+ atomsvc
+ application/atomsvc+xml
+
+
+ atx
+ application/vnd.antix.game-component
+
+
+ au
+ audio/basic
+
+
+ avi
+ video/x-msvideo
+
+
+ avx
+ video/x-rad-screenplay
+
+
+ aw
+ application/applixware
+
+
+ axa
+ audio/annodex
+
+
+ axv
+ video/annodex
+
+
+ azf
+ application/vnd.airzip.filesecure.azf
+
+
+ azs
+ application/vnd.airzip.filesecure.azs
+
+
+ azw
+ application/vnd.amazon.ebook
+
+
+ bat
+ application/x-msdownload
+
+
+ bcpio
+ application/x-bcpio
+
+
+ bdf
+ application/x-font-bdf
+
+
+ bdm
+ application/vnd.syncml.dm+wbxml
+
+
+ bed
+ application/vnd.realvnc.bed
+
+
+ bh2
+ application/vnd.fujitsu.oasysprs
+
+
+ bin
+ application/octet-stream
+
+
+ blb
+ application/x-blorb
+
+
+ blorb
+ application/x-blorb
+
+
+ bmi
+ application/vnd.bmi
+
+
+ bmp
+ image/bmp
+
+
+ body
+ text/html
+
+
+ book
+ application/vnd.framemaker
+
+
+ box
+ application/vnd.previewsystems.box
+
+
+ boz
+ application/x-bzip2
+
+
+ bpk
+ application/octet-stream
+
+
+ btif
+ image/prs.btif
+
+
+ bz
+ application/x-bzip
+
+
+ bz2
+ application/x-bzip2
+
+
+ c
+ text/x-c
+
+
+ c11amc
+ application/vnd.cluetrust.cartomobile-config
+
+
+ c11amz
+ application/vnd.cluetrust.cartomobile-config-pkg
+
+
+ c4d
+ application/vnd.clonk.c4group
+
+
+ c4f
+ application/vnd.clonk.c4group
+
+
+ c4g
+ application/vnd.clonk.c4group
+
+
+ c4p
+ application/vnd.clonk.c4group
+
+
+ c4u
+ application/vnd.clonk.c4group
+
+
+ cab
+ application/vnd.ms-cab-compressed
+
+
+ caf
+ audio/x-caf
+
+
+ cap
+ application/vnd.tcpdump.pcap
+
+
+ car
+ application/vnd.curl.car
+
+
+ cat
+ application/vnd.ms-pki.seccat
+
+
+ cb7
+ application/x-cbr
+
+
+ cba
+ application/x-cbr
+
+
+ cbr
+ application/x-cbr
+
+
+ cbt
+ application/x-cbr
+
+
+ cbz
+ application/x-cbr
+
+
+ cc
+ text/x-c
+
+
+ cct
+ application/x-director
+
+
+ ccxml
+ application/ccxml+xml
+
+
+ cdbcmsg
+ application/vnd.contact.cmsg
+
+
+ cdf
+ application/x-cdf
+
+
+ cdkey
+ application/vnd.mediastation.cdkey
+
+
+ cdmia
+ application/cdmi-capability
+
+
+ cdmic
+ application/cdmi-container
+
+
+ cdmid
+ application/cdmi-domain
+
+
+ cdmio
+ application/cdmi-object
+
+
+ cdmiq
+ application/cdmi-queue
+
+
+ cdx
+ chemical/x-cdx
+
+
+ cdxml
+ application/vnd.chemdraw+xml
+
+
+ cdy
+ application/vnd.cinderella
+
+
+ cer
+ application/pkix-cert
+
+
+ cfs
+ application/x-cfs-compressed
+
+
+ cgm
+ image/cgm
+
+
+ chat
+ application/x-chat
+
+
+ chm
+ application/vnd.ms-htmlhelp
+
+
+ chrt
+ application/vnd.kde.kchart
+
+
+ cif
+ chemical/x-cif
+
+
+ cii
+ application/vnd.anser-web-certificate-issue-initiation
+
+
+ cil
+ application/vnd.ms-artgalry
+
+
+ cla
+ application/vnd.claymore
+
+
+ class
+ application/java
+
+
+ clkk
+ application/vnd.crick.clicker.keyboard
+
+
+ clkp
+ application/vnd.crick.clicker.palette
+
+
+ clkt
+ application/vnd.crick.clicker.template
+
+
+ clkw
+ application/vnd.crick.clicker.wordbank
+
+
+ clkx
+ application/vnd.crick.clicker
+
+
+ clp
+ application/x-msclip
+
+
+ cmc
+ application/vnd.cosmocaller
+
+
+ cmdf
+ chemical/x-cmdf
+
+
+ cml
+ chemical/x-cml
+
+
+ cmp
+ application/vnd.yellowriver-custom-menu
+
+
+ cmx
+ image/x-cmx
+
+
+ cod
+ application/vnd.rim.cod
+
+
+ com
+ application/x-msdownload
+
+
+ conf
+ text/plain
+
+
+ cpio
+ application/x-cpio
+
+
+ cpp
+ text/x-c
+
+
+ cpt
+ application/mac-compactpro
+
+
+ crd
+ application/x-mscardfile
+
+
+ crl
+ application/pkix-crl
+
+
+ crt
+ application/x-x509-ca-cert
+
+
+ cryptonote
+ application/vnd.rig.cryptonote
+
+
+ csh
+ application/x-csh
+
+
+ csml
+ chemical/x-csml
+
+
+ csp
+ application/vnd.commonspace
+
+
+ css
+ text/css
+
+
+ cst
+ application/x-director
+
+
+ csv
+ text/csv
+
+
+ cu
+ application/cu-seeme
+
+
+ curl
+ text/vnd.curl
+
+
+ cww
+ application/prs.cww
+
+
+ cxt
+ application/x-director
+
+
+ cxx
+ text/x-c
+
+
+ dae
+ model/vnd.collada+xml
+
+
+ daf
+ application/vnd.mobius.daf
+
+
+ dart
+ application/vnd.dart
+
+
+ dataless
+ application/vnd.fdsn.seed
+
+
+ davmount
+ application/davmount+xml
+
+
+ dbk
+ application/docbook+xml
+
+
+ dcr
+ application/x-director
+
+
+ dcurl
+ text/vnd.curl.dcurl
+
+
+ dd2
+ application/vnd.oma.dd2+xml
+
+
+ ddd
+ application/vnd.fujixerox.ddd
+
+
+ deb
+ application/x-debian-package
+
+
+ def
+ text/plain
+
+
+ deploy
+ application/octet-stream
+
+
+ der
+ application/x-x509-ca-cert
+
+
+ dfac
+ application/vnd.dreamfactory
+
+
+ dgc
+ application/x-dgc-compressed
+
+
+ dib
+ image/bmp
+
+
+ dic
+ text/x-c
+
+
+ dir
+ application/x-director
+
+
+ dis
+ application/vnd.mobius.dis
+
+
+ dist
+ application/octet-stream
+
+
+ distz
+ application/octet-stream
+
+
+ djv
+ image/vnd.djvu
+
+
+ djvu
+ image/vnd.djvu
+
+
+ dll
+ application/x-msdownload
+
+
+ dmg
+ application/x-apple-diskimage
+
+
+ dmp
+ application/vnd.tcpdump.pcap
+
+
+ dms
+ application/octet-stream
+
+
+ dna
+ application/vnd.dna
+
+
+ doc
+ application/msword
+
+
+ docm
+ application/vnd.ms-word.document.macroenabled.12
+
+
+ docx
+ application/vnd.openxmlformats-officedocument.wordprocessingml.document
+
+
+ dot
+ application/msword
+
+
+ dotm
+ application/vnd.ms-word.template.macroenabled.12
+
+
+ dotx
+ application/vnd.openxmlformats-officedocument.wordprocessingml.template
+
+
+ dp
+ application/vnd.osgi.dp
+
+
+ dpg
+ application/vnd.dpgraph
+
+
+ dra
+ audio/vnd.dra
+
+
+ dsc
+ text/prs.lines.tag
+
+
+ dssc
+ application/dssc+der
+
+
+ dtb
+ application/x-dtbook+xml
+
+
+ dtd
+ application/xml-dtd
+
+
+ dts
+ audio/vnd.dts
+
+
+ dtshd
+ audio/vnd.dts.hd
+
+
+ dump
+ application/octet-stream
+
+
+ dv
+ video/x-dv
+
+
+ dvb
+ video/vnd.dvb.file
+
+
+ dvi
+ application/x-dvi
+
+
+ dwf
+ model/vnd.dwf
+
+
+ dwg
+ image/vnd.dwg
+
+
+ dxf
+ image/vnd.dxf
+
+
+ dxp
+ application/vnd.spotfire.dxp
+
+
+ dxr
+ application/x-director
+
+
+ ecelp4800
+ audio/vnd.nuera.ecelp4800
+
+
+ ecelp7470
+ audio/vnd.nuera.ecelp7470
+
+
+ ecelp9600
+ audio/vnd.nuera.ecelp9600
+
+
+ ecma
+ application/ecmascript
+
+
+ edm
+ application/vnd.novadigm.edm
+
+
+ edx
+ application/vnd.novadigm.edx
+
+
+ efif
+ application/vnd.picsel
+
+
+ ei6
+ application/vnd.pg.osasli
+
+
+ elc
+ application/octet-stream
+
+
+ emf
+ application/x-msmetafile
+
+
+ eml
+ message/rfc822
+
+
+ emma
+ application/emma+xml
+
+
+ emz
+ application/x-msmetafile
+
+
+ eol
+ audio/vnd.digital-winds
+
+
+ eot
+ application/vnd.ms-fontobject
+
+
+ eps
+ application/postscript
+
+
+ epub
+ application/epub+zip
+
+
+ es3
+ application/vnd.eszigno3+xml
+
+
+ esa
+ application/vnd.osgi.subsystem
+
+
+ esf
+ application/vnd.epson.esf
+
+
+ et3
+ application/vnd.eszigno3+xml
+
+
+ etx
+ text/x-setext
+
+
+ eva
+ application/x-eva
+
+
+ evy
+ application/x-envoy
+
+
+ exe
+ application/octet-stream
+
+
+ exi
+ application/exi
+
+
+ ext
+ application/vnd.novadigm.ext
+
+
+ ez
+ application/andrew-inset
+
+
+ ez2
+ application/vnd.ezpix-album
+
+
+ ez3
+ application/vnd.ezpix-package
+
+
+ f
+ text/x-fortran
+
+
+ f4v
+ video/x-f4v
+
+
+ f77
+ text/x-fortran
+
+
+ f90
+ text/x-fortran
+
+
+ fbs
+ image/vnd.fastbidsheet
+
+
+ fcdt
+ application/vnd.adobe.formscentral.fcdt
+
+
+ fcs
+ application/vnd.isac.fcs
+
+
+ fdf
+ application/vnd.fdf
+
+
+ fe_launch
+ application/vnd.denovo.fcselayout-link
+
+
+ fg5
+ application/vnd.fujitsu.oasysgp
+
+
+ fgd
+ application/x-director
+
+
+ fh
+ image/x-freehand
+
+
+ fh4
+ image/x-freehand
+
+
+ fh5
+ image/x-freehand
+
+
+ fh7
+ image/x-freehand
+
+
+ fhc
+ image/x-freehand
+
+
+ fig
+ application/x-xfig
+
+
+ flac
+ audio/flac
+
+
+ fli
+ video/x-fli
+
+
+ flo
+ application/vnd.micrografx.flo
+
+
+ flv
+ video/x-flv
+
+
+ flw
+ application/vnd.kde.kivio
+
+
+ flx
+ text/vnd.fmi.flexstor
+
+
+ fly
+ text/vnd.fly
+
+
+ fm
+ application/vnd.framemaker
+
+
+ fnc
+ application/vnd.frogans.fnc
+
+
+ for
+ text/x-fortran
+
+
+ fpx
+ image/vnd.fpx
+
+
+ frame
+ application/vnd.framemaker
+
+
+ fsc
+ application/vnd.fsc.weblaunch
+
+
+ fst
+ image/vnd.fst
+
+
+ ftc
+ application/vnd.fluxtime.clip
+
+
+ fti
+ application/vnd.anser-web-funds-transfer-initiation
+
+
+ fvt
+ video/vnd.fvt
+
+
+ fxp
+ application/vnd.adobe.fxp
+
+
+ fxpl
+ application/vnd.adobe.fxp
+
+
+ fzs
+ application/vnd.fuzzysheet
+
+
+ g2w
+ application/vnd.geoplan
+
+
+ g3
+ image/g3fax
+
+
+ g3w
+ application/vnd.geospace
+
+
+ gac
+ application/vnd.groove-account
+
+
+ gam
+ application/x-tads
+
+
+ gbr
+ application/rpki-ghostbusters
+
+
+ gca
+ application/x-gca-compressed
+
+
+ gdl
+ model/vnd.gdl
+
+
+ geo
+ application/vnd.dynageo
+
+
+ gex
+ application/vnd.geometry-explorer
+
+
+ ggb
+ application/vnd.geogebra.file
+
+
+ ggt
+ application/vnd.geogebra.tool
+
+
+ ghf
+ application/vnd.groove-help
+
+
+ gif
+ image/gif
+
+
+ gim
+ application/vnd.groove-identity-message
+
+
+ gml
+ application/gml+xml
+
+
+ gmx
+ application/vnd.gmx
+
+
+ gnumeric
+ application/x-gnumeric
+
+
+ gph
+ application/vnd.flographit
+
+
+ gpx
+ application/gpx+xml
+
+
+ gqf
+ application/vnd.grafeq
+
+
+ gqs
+ application/vnd.grafeq
+
+
+ gram
+ application/srgs
+
+
+ gramps
+ application/x-gramps-xml
+
+
+ gre
+ application/vnd.geometry-explorer
+
+
+ grv
+ application/vnd.groove-injector
+
+
+ grxml
+ application/srgs+xml
+
+
+ gsf
+ application/x-font-ghostscript
+
+
+ gtar
+ application/x-gtar
+
+
+ gtm
+ application/vnd.groove-tool-message
+
+
+ gtw
+ model/vnd.gtw
+
+
+ gv
+ text/vnd.graphviz
+
+
+ gxf
+ application/gxf
+
+
+ gxt
+ application/vnd.geonext
+
+
+ gz
+ application/x-gzip
+
+
+ h
+ text/x-c
+
+
+ h261
+ video/h261
+
+
+ h263
+ video/h263
+
+
+ h264
+ video/h264
+
+
+ hal
+ application/vnd.hal+xml
+
+
+ hbci
+ application/vnd.hbci
+
+
+ hdf
+ application/x-hdf
+
+
+ hh
+ text/x-c
+
+
+ hlp
+ application/winhlp
+
+
+ hpgl
+ application/vnd.hp-hpgl
+
+
+ hpid
+ application/vnd.hp-hpid
+
+
+ hps
+ application/vnd.hp-hps
+
+
+ hqx
+ application/mac-binhex40
+
+
+ htc
+ text/x-component
+
+
+ htke
+ application/vnd.kenameaapp
+
+
+ htm
+ text/html
+
+
+ html
+ text/html
+
+
+ hvd
+ application/vnd.yamaha.hv-dic
+
+
+ hvp
+ application/vnd.yamaha.hv-voice
+
+
+ hvs
+ application/vnd.yamaha.hv-script
+
+
+ i2g
+ application/vnd.intergeo
+
+
+ icc
+ application/vnd.iccprofile
+
+
+ ice
+ x-conference/x-cooltalk
+
+
+ icm
+ application/vnd.iccprofile
+
+
+ ico
+ image/x-icon
+
+
+ ics
+ text/calendar
+
+
+ ief
+ image/ief
+
+
+ ifb
+ text/calendar
+
+
+ ifm
+ application/vnd.shana.informed.formdata
+
+
+ iges
+ model/iges
+
+
+ igl
+ application/vnd.igloader
+
+
+ igm
+ application/vnd.insors.igm
+
+
+ igs
+ model/iges
+
+
+ igx
+ application/vnd.micrografx.igx
+
+
+ iif
+ application/vnd.shana.informed.interchange
+
+
+ imp
+ application/vnd.accpac.simply.imp
+
+
+ ims
+ application/vnd.ms-ims
+
+
+ in
+ text/plain
+
+
+ ink
+ application/inkml+xml
+
+
+ inkml
+ application/inkml+xml
+
+
+ install
+ application/x-install-instructions
+
+
+ iota
+ application/vnd.astraea-software.iota
+
+
+ ipfix
+ application/ipfix
+
+
+ ipk
+ application/vnd.shana.informed.package
+
+
+ irm
+ application/vnd.ibm.rights-management
+
+
+ irp
+ application/vnd.irepository.package+xml
+
+
+ iso
+ application/x-iso9660-image
+
+
+ itp
+ application/vnd.shana.informed.formtemplate
+
+
+ ivp
+ application/vnd.immervision-ivp
+
+
+ ivu
+ application/vnd.immervision-ivu
+
+
+ jad
+ text/vnd.sun.j2me.app-descriptor
+
+
+ jam
+ application/vnd.jam
+
+
+ jar
+ application/java-archive
+
+
+ java
+ text/x-java-source
+
+
+ jisp
+ application/vnd.jisp
+
+
+ jlt
+ application/vnd.hp-jlyt
+
+
+ jnlp
+ application/x-java-jnlp-file
+
+
+ joda
+ application/vnd.joost.joda-archive
+
+
+ jpe
+ image/jpeg
+
+
+ jpeg
+ image/jpeg
+
+
+ jpg
+ image/jpeg
+
+
+ jpgm
+ video/jpm
+
+
+ jpgv
+ video/jpeg
+
+
+ jpm
+ video/jpm
+
+
+ js
+ application/javascript
+
+
+ jsf
+ text/plain
+
+
+ json
+ application/json
+
+
+ jsonml
+ application/jsonml+json
+
+
+ jspf
+ text/plain
+
+
+ kar
+ audio/midi
+
+
+ karbon
+ application/vnd.kde.karbon
+
+
+ kfo
+ application/vnd.kde.kformula
+
+
+ kia
+ application/vnd.kidspiration
+
+
+ kml
+ application/vnd.google-earth.kml+xml
+
+
+ kmz
+ application/vnd.google-earth.kmz
+
+
+ kne
+ application/vnd.kinar
+
+
+ knp
+ application/vnd.kinar
+
+
+ kon
+ application/vnd.kde.kontour
+
+
+ kpr
+ application/vnd.kde.kpresenter
+
+
+ kpt
+ application/vnd.kde.kpresenter
+
+
+ kpxx
+ application/vnd.ds-keypoint
+
+
+ ksp
+ application/vnd.kde.kspread
+
+
+ ktr
+ application/vnd.kahootz
+
+
+ ktx
+ image/ktx
+
+
+ ktz
+ application/vnd.kahootz
+
+
+ kwd
+ application/vnd.kde.kword
+
+
+ kwt
+ application/vnd.kde.kword
+
+
+ lasxml
+ application/vnd.las.las+xml
+
+
+ latex
+ application/x-latex
+
+
+ lbd
+ application/vnd.llamagraphics.life-balance.desktop
+
+
+ lbe
+ application/vnd.llamagraphics.life-balance.exchange+xml
+
+
+ les
+ application/vnd.hhe.lesson-player
+
+
+ lha
+ application/x-lzh-compressed
+
+
+ link66
+ application/vnd.route66.link66+xml
+
+
+ list
+ text/plain
+
+
+ list3820
+ application/vnd.ibm.modcap
+
+
+ listafp
+ application/vnd.ibm.modcap
+
+
+ lnk
+ application/x-ms-shortcut
+
+
+ log
+ text/plain
+
+
+ lostxml
+ application/lost+xml
+
+
+ lrf
+ application/octet-stream
+
+
+ lrm
+ application/vnd.ms-lrm
+
+
+ ltf
+ application/vnd.frogans.ltf
+
+
+ lvp
+ audio/vnd.lucent.voice
+
+
+ lwp
+ application/vnd.lotus-wordpro
+
+
+ lzh
+ application/x-lzh-compressed
+
+
+ m13
+ application/x-msmediaview
+
+
+ m14
+ application/x-msmediaview
+
+
+ m1v
+ video/mpeg
+
+
+ m21
+ application/mp21
+
+
+ m2a
+ audio/mpeg
+
+
+ m2v
+ video/mpeg
+
+
+ m3a
+ audio/mpeg
+
+
+ m3u
+ audio/x-mpegurl
+
+
+ m3u8
+ application/vnd.apple.mpegurl
+
+
+ m4a
+ audio/mp4
+
+
+ m4b
+ audio/mp4
+
+
+ m4r
+ audio/mp4
+
+
+ m4u
+ video/vnd.mpegurl
+
+
+ m4v
+ video/mp4
+
+
+ ma
+ application/mathematica
+
+
+ mac
+ image/x-macpaint
+
+
+ mads
+ application/mads+xml
+
+
+ mag
+ application/vnd.ecowin.chart
+
+
+ maker
+ application/vnd.framemaker
+
+
+ man
+ text/troff
+
+
+ mar
+ application/octet-stream
+
+
+ mathml
+ application/mathml+xml
+
+
+ mb
+ application/mathematica
+
+
+ mbk
+ application/vnd.mobius.mbk
+
+
+ mbox
+ application/mbox
+
+
+ mc1
+ application/vnd.medcalcdata
+
+
+ mcd
+ application/vnd.mcd
+
+
+ mcurl
+ text/vnd.curl.mcurl
+
+
+ mdb
+ application/x-msaccess
+
+
+ mdi
+ image/vnd.ms-modi
+
+
+ me
+ text/troff
+
+
+ mesh
+ model/mesh
+
+
+ meta4
+ application/metalink4+xml
+
+
+ metalink
+ application/metalink+xml
+
+
+ mets
+ application/mets+xml
+
+
+ mfm
+ application/vnd.mfmp
+
+
+ mft
+ application/rpki-manifest
+
+
+ mgp
+ application/vnd.osgeo.mapguide.package
+
+
+ mgz
+ application/vnd.proteus.magazine
+
+
+ mid
+ audio/midi
+
+
+ midi
+ audio/midi
+
+
+ mie
+ application/x-mie
+
+
+ mif
+ application/x-mif
+
+
+ mime
+ message/rfc822
+
+
+ mj2
+ video/mj2
+
+
+ mjp2
+ video/mj2
+
+
+ mk3d
+ video/x-matroska
+
+
+ mka
+ audio/x-matroska
+
+
+ mks
+ video/x-matroska
+
+
+ mkv
+ video/x-matroska
+
+
+ mlp
+ application/vnd.dolby.mlp
+
+
+ mmd
+ application/vnd.chipnuts.karaoke-mmd
+
+
+ mmf
+ application/vnd.smaf
+
+
+ mmr
+ image/vnd.fujixerox.edmics-mmr
+
+
+ mng
+ video/x-mng
+
+
+ mny
+ application/x-msmoney
+
+
+ mobi
+ application/x-mobipocket-ebook
+
+
+ mods
+ application/mods+xml
+
+
+ mov
+ video/quicktime
+
+
+ movie
+ video/x-sgi-movie
+
+
+ mp1
+ audio/mpeg
+
+
+ mp2
+ audio/mpeg
+
+
+ mp21
+ application/mp21
+
+
+ mp2a
+ audio/mpeg
+
+
+ mp3
+ audio/mpeg
+
+
+ mp4
+ video/mp4
+
+
+ mp4a
+ audio/mp4
+
+
+ mp4s
+ application/mp4
+
+
+ mp4v
+ video/mp4
+
+
+ mpa
+ audio/mpeg
+
+
+ mpc
+ application/vnd.mophun.certificate
+
+
+ mpe
+ video/mpeg
+
+
+ mpeg
+ video/mpeg
+
+
+ mpega
+ audio/x-mpeg
+
+
+ mpg
+ video/mpeg
+
+
+ mpg4
+ video/mp4
+
+
+ mpga
+ audio/mpeg
+
+
+ mpkg
+ application/vnd.apple.installer+xml
+
+
+ mpm
+ application/vnd.blueice.multipass
+
+
+ mpn
+ application/vnd.mophun.application
+
+
+ mpp
+ application/vnd.ms-project
+
+
+ mpt
+ application/vnd.ms-project
+
+
+ mpv2
+ video/mpeg2
+
+
+ mpy
+ application/vnd.ibm.minipay
+
+
+ mqy
+ application/vnd.mobius.mqy
+
+
+ mrc
+ application/marc
+
+
+ mrcx
+ application/marcxml+xml
+
+
+ ms
+ text/troff
+
+
+ mscml
+ application/mediaservercontrol+xml
+
+
+ mseed
+ application/vnd.fdsn.mseed
+
+
+ mseq
+ application/vnd.mseq
+
+
+ msf
+ application/vnd.epson.msf
+
+
+ msh
+ model/mesh
+
+
+ msi
+ application/x-msdownload
+
+
+ msl
+ application/vnd.mobius.msl
+
+
+ msty
+ application/vnd.muvee.style
+
+
+ mts
+ model/vnd.mts
+
+
+ mus
+ application/vnd.musician
+
+
+ musicxml
+ application/vnd.recordare.musicxml+xml
+
+
+ mvb
+ application/x-msmediaview
+
+
+ mwf
+ application/vnd.mfer
+
+
+ mxf
+ application/mxf
+
+
+ mxl
+ application/vnd.recordare.musicxml
+
+
+ mxml
+ application/xv+xml
+
+
+ mxs
+ application/vnd.triscape.mxs
+
+
+ mxu
+ video/vnd.mpegurl
+
+
+ n-gage
+ application/vnd.nokia.n-gage.symbian.install
+
+
+ n3
+ text/n3
+
+
+ nb
+ application/mathematica
+
+
+ nbp
+ application/vnd.wolfram.player
+
+
+ nc
+ application/x-netcdf
+
+
+ ncx
+ application/x-dtbncx+xml
+
+
+ nfo
+ text/x-nfo
+
+
+ ngdat
+ application/vnd.nokia.n-gage.data
+
+
+ nitf
+ application/vnd.nitf
+
+
+ nlu
+ application/vnd.neurolanguage.nlu
+
+
+ nml
+ application/vnd.enliven
+
+
+ nnd
+ application/vnd.noblenet-directory
+
+
+ nns
+ application/vnd.noblenet-sealer
+
+
+ nnw
+ application/vnd.noblenet-web
+
+
+ npx
+ image/vnd.net-fpx
+
+
+ nsc
+ application/x-conference
+
+
+ nsf
+ application/vnd.lotus-notes
+
+
+ ntf
+ application/vnd.nitf
+
+
+ nzb
+ application/x-nzb
+
+
+ oa2
+ application/vnd.fujitsu.oasys2
+
+
+ oa3
+ application/vnd.fujitsu.oasys3
+
+
+ oas
+ application/vnd.fujitsu.oasys
+
+
+ obd
+ application/x-msbinder
+
+
+ obj
+ application/x-tgif
+
+
+ oda
+ application/oda
+
+
+
+ odb
+ application/vnd.oasis.opendocument.database
+
+
+
+ odc
+ application/vnd.oasis.opendocument.chart
+
+
+
+ odf
+ application/vnd.oasis.opendocument.formula
+
+
+ odft
+ application/vnd.oasis.opendocument.formula-template
+
+
+
+ odg
+ application/vnd.oasis.opendocument.graphics
+
+
+
+ odi
+ application/vnd.oasis.opendocument.image
+
+
+
+ odm
+ application/vnd.oasis.opendocument.text-master
+
+
+
+ odp
+ application/vnd.oasis.opendocument.presentation
+
+
+
+ ods
+ application/vnd.oasis.opendocument.spreadsheet
+
+
+
+ odt
+ application/vnd.oasis.opendocument.text
+
+
+ oga
+ audio/ogg
+
+
+ ogg
+ audio/ogg
+
+
+ ogv
+ video/ogg
+
+
+
+ ogx
+ application/ogg
+
+
+ omdoc
+ application/omdoc+xml
+
+
+ onepkg
+ application/onenote
+
+
+ onetmp
+ application/onenote
+
+
+ onetoc
+ application/onenote
+
+
+ onetoc2
+ application/onenote
+
+
+ opf
+ application/oebps-package+xml
+
+
+ opml
+ text/x-opml
+
+
+ oprc
+ application/vnd.palm
+
+
+ org
+ application/vnd.lotus-organizer
+
+
+ osf
+ application/vnd.yamaha.openscoreformat
+
+
+ osfpvg
+ application/vnd.yamaha.openscoreformat.osfpvg+xml
+
+
+ otc
+ application/vnd.oasis.opendocument.chart-template
+
+
+ otf
+ font/otf
+
+
+
+ otg
+ application/vnd.oasis.opendocument.graphics-template
+
+
+
+ oth
+ application/vnd.oasis.opendocument.text-web
+
+
+ oti
+ application/vnd.oasis.opendocument.image-template
+
+
+
+ otp
+ application/vnd.oasis.opendocument.presentation-template
+
+
+
+ ots
+ application/vnd.oasis.opendocument.spreadsheet-template
+
+
+
+ ott
+ application/vnd.oasis.opendocument.text-template
+
+
+ oxps
+ application/oxps
+
+
+ oxt
+ application/vnd.openofficeorg.extension
+
+
+ p
+ text/x-pascal
+
+
+ p10
+ application/pkcs10
+
+
+ p12
+ application/x-pkcs12
+
+
+ p7b
+ application/x-pkcs7-certificates
+
+
+ p7c
+ application/pkcs7-mime
+
+
+ p7m
+ application/pkcs7-mime
+
+
+ p7r
+ application/x-pkcs7-certreqresp
+
+
+ p7s
+ application/pkcs7-signature
+
+
+ p8
+ application/pkcs8
+
+
+ pas
+ text/x-pascal
+
+
+ paw
+ application/vnd.pawaafile
+
+
+ pbd
+ application/vnd.powerbuilder6
+
+
+ pbm
+ image/x-portable-bitmap
+
+
+ pcap
+ application/vnd.tcpdump.pcap
+
+
+ pcf
+ application/x-font-pcf
+
+
+ pcl
+ application/vnd.hp-pcl
+
+
+ pclxl
+ application/vnd.hp-pclxl
+
+
+ pct
+ image/pict
+
+
+ pcurl
+ application/vnd.curl.pcurl
+
+
+ pcx
+ image/x-pcx
+
+
+ pdb
+ application/vnd.palm
+
+
+ pdf
+ application/pdf
+
+
+ pfa
+ application/x-font-type1
+
+
+ pfb
+ application/x-font-type1
+
+
+ pfm
+ application/x-font-type1
+
+
+ pfr
+ application/font-tdpfr
+
+
+ pfx
+ application/x-pkcs12
+
+
+ pgm
+ image/x-portable-graymap
+
+
+ pgn
+ application/x-chess-pgn
+
+
+ pgp
+ application/pgp-encrypted
+
+
+ pic
+ image/pict
+
+
+ pict
+ image/pict
+
+
+ pkg
+ application/octet-stream
+
+
+ pki
+ application/pkixcmp
+
+
+ pkipath
+ application/pkix-pkipath
+
+
+ plb
+ application/vnd.3gpp.pic-bw-large
+
+
+ plc
+ application/vnd.mobius.plc
+
+
+ plf
+ application/vnd.pocketlearn
+
+
+ pls
+ audio/x-scpls
+
+
+ pml
+ application/vnd.ctc-posml
+
+
+ png
+ image/png
+
+
+ pnm
+ image/x-portable-anymap
+
+
+ pnt
+ image/x-macpaint
+
+
+ portpkg
+ application/vnd.macports.portpkg
+
+
+ pot
+ application/vnd.ms-powerpoint
+
+
+ potm
+ application/vnd.ms-powerpoint.template.macroenabled.12
+
+
+ potx
+ application/vnd.openxmlformats-officedocument.presentationml.template
+
+
+ ppam
+ application/vnd.ms-powerpoint.addin.macroenabled.12
+
+
+ ppd
+ application/vnd.cups-ppd
+
+
+ ppm
+ image/x-portable-pixmap
+
+
+ pps
+ application/vnd.ms-powerpoint
+
+
+ ppsm
+ application/vnd.ms-powerpoint.slideshow.macroenabled.12
+
+
+ ppsx
+ application/vnd.openxmlformats-officedocument.presentationml.slideshow
+
+
+ ppt
+ application/vnd.ms-powerpoint
+
+
+ pptm
+ application/vnd.ms-powerpoint.presentation.macroenabled.12
+
+
+ pptx
+ application/vnd.openxmlformats-officedocument.presentationml.presentation
+
+
+ pqa
+ application/vnd.palm
+
+
+ prc
+ application/x-mobipocket-ebook
+
+
+ pre
+ application/vnd.lotus-freelance
+
+
+ prf
+ application/pics-rules
+
+
+ ps
+ application/postscript
+
+
+ psb
+ application/vnd.3gpp.pic-bw-small
+
+
+ psd
+ image/vnd.adobe.photoshop
+
+
+ psf
+ application/x-font-linux-psf
+
+
+ pskcxml
+ application/pskc+xml
+
+
+ ptid
+ application/vnd.pvi.ptid1
+
+
+ pub
+ application/x-mspublisher
+
+
+ pvb
+ application/vnd.3gpp.pic-bw-var
+
+
+ pwn
+ application/vnd.3m.post-it-notes
+
+
+ pya
+ audio/vnd.ms-playready.media.pya
+
+
+ pyv
+ video/vnd.ms-playready.media.pyv
+
+
+ qam
+ application/vnd.epson.quickanime
+
+
+ qbo
+ application/vnd.intu.qbo
+
+
+ qfx
+ application/vnd.intu.qfx
+
+
+ qps
+ application/vnd.publishare-delta-tree
+
+
+ qt
+ video/quicktime
+
+
+ qti
+ image/x-quicktime
+
+
+ qtif
+ image/x-quicktime
+
+
+ qwd
+ application/vnd.quark.quarkxpress
+
+
+ qwt
+ application/vnd.quark.quarkxpress
+
+
+ qxb
+ application/vnd.quark.quarkxpress
+
+
+ qxd
+ application/vnd.quark.quarkxpress
+
+
+ qxl
+ application/vnd.quark.quarkxpress
+
+
+ qxt
+ application/vnd.quark.quarkxpress
+
+
+ ra
+ audio/x-pn-realaudio
+
+
+ ram
+ audio/x-pn-realaudio
+
+
+ rar
+ application/x-rar-compressed
+
+
+ ras
+ image/x-cmu-raster
+
+
+ rcprofile
+ application/vnd.ipunplugged.rcprofile
+
+
+ rdf
+ application/rdf+xml
+
+
+ rdz
+ application/vnd.data-vision.rdz
+
+
+ rep
+ application/vnd.businessobjects
+
+
+ res
+ application/x-dtbresource+xml
+
+
+ rgb
+ image/x-rgb
+
+
+ rif
+ application/reginfo+xml
+
+
+ rip
+ audio/vnd.rip
+
+
+ ris
+ application/x-research-info-systems
+
+
+ rl
+ application/resource-lists+xml
+
+
+ rlc
+ image/vnd.fujixerox.edmics-rlc
+
+
+ rld
+ application/resource-lists-diff+xml
+
+
+ rm
+ application/vnd.rn-realmedia
+
+
+ rmi
+ audio/midi
+
+
+ rmp
+ audio/x-pn-realaudio-plugin
+
+
+ rms
+ application/vnd.jcp.javame.midlet-rms
+
+
+ rmvb
+ application/vnd.rn-realmedia-vbr
+
+
+ rnc
+ application/relax-ng-compact-syntax
+
+
+ roa
+ application/rpki-roa
+
+
+ roff
+ text/troff
+
+
+ rp9
+ application/vnd.cloanto.rp9
+
+
+ rpss
+ application/vnd.nokia.radio-presets
+
+
+ rpst
+ application/vnd.nokia.radio-preset
+
+
+ rq
+ application/sparql-query
+
+
+ rs
+ application/rls-services+xml
+
+
+ rsd
+ application/rsd+xml
+
+
+ rss
+ application/rss+xml
+
+
+ rtf
+ application/rtf
+
+
+ rtx
+ text/richtext
+
+
+ s
+ text/x-asm
+
+
+ s3m
+ audio/s3m
+
+
+ saf
+ application/vnd.yamaha.smaf-audio
+
+
+ sbml
+ application/sbml+xml
+
+
+ sc
+ application/vnd.ibm.secure-container
+
+
+ scd
+ application/x-msschedule
+
+
+ scm
+ application/vnd.lotus-screencam
+
+
+ scq
+ application/scvp-cv-request
+
+
+ scs
+ application/scvp-cv-response
+
+
+ scurl
+ text/vnd.curl.scurl
+
+
+ sda
+ application/vnd.stardivision.draw
+
+
+ sdc
+ application/vnd.stardivision.calc
+
+
+ sdd
+ application/vnd.stardivision.impress
+
+
+ sdkd
+ application/vnd.solent.sdkm+xml
+
+
+ sdkm
+ application/vnd.solent.sdkm+xml
+
+
+ sdp
+ application/sdp
+
+
+ sdw
+ application/vnd.stardivision.writer
+
+
+ see
+ application/vnd.seemail
+
+
+ seed
+ application/vnd.fdsn.seed
+
+
+ sema
+ application/vnd.sema
+
+
+ semd
+ application/vnd.semd
+
+
+ semf
+ application/vnd.semf
+
+
+ ser
+ application/java-serialized-object
+
+
+ setpay
+ application/set-payment-initiation
+
+
+ setreg
+ application/set-registration-initiation
+
+
+ sfd-hdstx
+ application/vnd.hydrostatix.sof-data
+
+
+ sfs
+ application/vnd.spotfire.sfs
+
+
+ sfv
+ text/x-sfv
+
+
+ sgi
+ image/sgi
+
+
+ sgl
+ application/vnd.stardivision.writer-global
+
+
+ sgm
+ text/sgml
+
+
+ sgml
+ text/sgml
+
+
+ sh
+ application/x-sh
+
+
+ shar
+ application/x-shar
+
+
+ shf
+ application/shf+xml
+
+
+
+ sid
+ image/x-mrsid-image
+
+
+ sig
+ application/pgp-signature
+
+
+ sil
+ audio/silk
+
+
+ silo
+ model/mesh
+
+
+ sis
+ application/vnd.symbian.install
+
+
+ sisx
+ application/vnd.symbian.install
+
+
+ sit
+ application/x-stuffit
+
+
+ sitx
+ application/x-stuffitx
+
+
+ skd
+ application/vnd.koan
+
+
+ skm
+ application/vnd.koan
+
+
+ skp
+ application/vnd.koan
+
+
+ skt
+ application/vnd.koan
+
+
+ sldm
+ application/vnd.ms-powerpoint.slide.macroenabled.12
+
+
+ sldx
+ application/vnd.openxmlformats-officedocument.presentationml.slide
+
+
+ slt
+ application/vnd.epson.salt
+
+
+ sm
+ application/vnd.stepmania.stepchart
+
+
+ smf
+ application/vnd.stardivision.math
+
+
+ smi
+ application/smil+xml
+
+
+ smil
+ application/smil+xml
+
+
+ smv
+ video/x-smv
+
+
+ smzip
+ application/vnd.stepmania.package
+
+
+ snd
+ audio/basic
+
+
+ snf
+ application/x-font-snf
+
+
+ so
+ application/octet-stream
+
+
+ spc
+ application/x-pkcs7-certificates
+
+
+ spf
+ application/vnd.yamaha.smaf-phrase
+
+
+ spl
+ application/x-futuresplash
+
+
+ spot
+ text/vnd.in3d.spot
+
+
+ spp
+ application/scvp-vp-response
+
+
+ spq
+ application/scvp-vp-request
+
+
+ spx
+ audio/ogg
+
+
+ sql
+ application/x-sql
+
+
+ src
+ application/x-wais-source
+
+
+ srt
+ application/x-subrip
+
+
+ sru
+ application/sru+xml
+
+
+ srx
+ application/sparql-results+xml
+
+
+ ssdl
+ application/ssdl+xml
+
+
+ sse
+ application/vnd.kodak-descriptor
+
+
+ ssf
+ application/vnd.epson.ssf
+
+
+ ssml
+ application/ssml+xml
+
+
+ st
+ application/vnd.sailingtracker.track
+
+
+ stc
+ application/vnd.sun.xml.calc.template
+
+
+ std
+ application/vnd.sun.xml.draw.template
+
+
+ stf
+ application/vnd.wt.stf
+
+
+ sti
+ application/vnd.sun.xml.impress.template
+
+
+ stk
+ application/hyperstudio
+
+
+ stl
+ application/vnd.ms-pki.stl
+
+
+ str
+ application/vnd.pg.format
+
+
+ stw
+ application/vnd.sun.xml.writer.template
+
+
+ sub
+ text/vnd.dvb.subtitle
+
+
+ sus
+ application/vnd.sus-calendar
+
+
+ susp
+ application/vnd.sus-calendar
+
+
+ sv4cpio
+ application/x-sv4cpio
+
+
+ sv4crc
+ application/x-sv4crc
+
+
+ svc
+ application/vnd.dvb.service
+
+
+ svd
+ application/vnd.svd
+
+
+ svg
+ image/svg+xml
+
+
+ svgz
+ image/svg+xml
+
+
+ swa
+ application/x-director
+
+
+ swf
+ application/x-shockwave-flash
+
+
+ swi
+ application/vnd.aristanetworks.swi
+
+
+ sxc
+ application/vnd.sun.xml.calc
+
+
+ sxd
+ application/vnd.sun.xml.draw
+
+
+ sxg
+ application/vnd.sun.xml.writer.global
+
+
+ sxi
+ application/vnd.sun.xml.impress
+
+
+ sxm
+ application/vnd.sun.xml.math
+
+
+ sxw
+ application/vnd.sun.xml.writer
+
+
+ t
+ text/troff
+
+
+ t3
+ application/x-t3vm-image
+
+
+ taglet
+ application/vnd.mynfc
+
+
+ tao
+ application/vnd.tao.intent-module-archive
+
+
+ tar
+ application/x-tar
+
+
+ tcap
+ application/vnd.3gpp2.tcap
+
+
+ tcl
+ application/x-tcl
+
+
+ teacher
+ application/vnd.smart.teacher
+
+
+ tei
+ application/tei+xml
+
+
+ teicorpus
+ application/tei+xml
+
+
+ tex
+ application/x-tex
+
+
+ texi
+ application/x-texinfo
+
+
+ texinfo
+ application/x-texinfo
+
+
+ text
+ text/plain
+
+
+ tfi
+ application/thraud+xml
+
+
+ tfm
+ application/x-tex-tfm
+
+
+ tga
+ image/x-tga
+
+
+ thmx
+ application/vnd.ms-officetheme
+
+
+ tif
+ image/tiff
+
+
+ tiff
+ image/tiff
+
+
+ tmo
+ application/vnd.tmobile-livetv
+
+
+ torrent
+ application/x-bittorrent
+
+
+ tpl
+ application/vnd.groove-tool-template
+
+
+ tpt
+ application/vnd.trid.tpt
+
+
+ tr
+ text/troff
+
+
+ tra
+ application/vnd.trueapp
+
+
+ trm
+ application/x-msterminal
+
+
+ tsd
+ application/timestamped-data
+
+
+ tsv
+ text/tab-separated-values
+
+
+ ttc
+ font/collection
+
+
+ ttf
+ font/ttf
+
+
+ ttl
+ text/turtle
+
+
+ twd
+ application/vnd.simtech-mindmapper
+
+
+ twds
+ application/vnd.simtech-mindmapper
+
+
+ txd
+ application/vnd.genomatix.tuxedo
+
+
+ txf
+ application/vnd.mobius.txf
+
+
+ txt
+ text/plain
+
+
+ u32
+ application/x-authorware-bin
+
+
+ udeb
+ application/x-debian-package
+
+
+ ufd
+ application/vnd.ufdl
+
+
+ ufdl
+ application/vnd.ufdl
+
+
+ ulw
+ audio/basic
+
+
+ ulx
+ application/x-glulx
+
+
+ umj
+ application/vnd.umajin
+
+
+ unityweb
+ application/vnd.unity
+
+
+ uoml
+ application/vnd.uoml+xml
+
+
+ uri
+ text/uri-list
+
+
+ uris
+ text/uri-list
+
+
+ urls
+ text/uri-list
+
+
+ ustar
+ application/x-ustar
+
+
+ utz
+ application/vnd.uiq.theme
+
+
+ uu
+ text/x-uuencode
+
+
+ uva
+ audio/vnd.dece.audio
+
+
+ uvd
+ application/vnd.dece.data
+
+
+ uvf
+ application/vnd.dece.data
+
+
+ uvg
+ image/vnd.dece.graphic
+
+
+ uvh
+ video/vnd.dece.hd
+
+
+ uvi
+ image/vnd.dece.graphic
+
+
+ uvm
+ video/vnd.dece.mobile
+
+
+ uvp
+ video/vnd.dece.pd
+
+
+ uvs
+ video/vnd.dece.sd
+
+
+ uvt
+ application/vnd.dece.ttml+xml
+
+
+ uvu
+ video/vnd.uvvu.mp4
+
+
+ uvv
+ video/vnd.dece.video
+
+
+ uvva
+ audio/vnd.dece.audio
+
+
+ uvvd
+ application/vnd.dece.data
+
+
+ uvvf
+ application/vnd.dece.data
+
+
+ uvvg
+ image/vnd.dece.graphic
+
+
+ uvvh
+ video/vnd.dece.hd
+
+
+ uvvi
+ image/vnd.dece.graphic
+
+
+ uvvm
+ video/vnd.dece.mobile
+
+
+ uvvp
+ video/vnd.dece.pd
+
+
+ uvvs
+ video/vnd.dece.sd
+
+
+ uvvt
+ application/vnd.dece.ttml+xml
+
+
+ uvvu
+ video/vnd.uvvu.mp4
+
+
+ uvvv
+ video/vnd.dece.video
+
+
+ uvvx
+ application/vnd.dece.unspecified
+
+
+ uvvz
+ application/vnd.dece.zip
+
+
+ uvx
+ application/vnd.dece.unspecified
+
+
+ uvz
+ application/vnd.dece.zip
+
+
+ vcard
+ text/vcard
+
+
+ vcd
+ application/x-cdlink
+
+
+ vcf
+ text/x-vcard
+
+
+ vcg
+ application/vnd.groove-vcard
+
+
+ vcs
+ text/x-vcalendar
+
+
+ vcx
+ application/vnd.vcx
+
+
+ vis
+ application/vnd.visionary
+
+
+ viv
+ video/vnd.vivo
+
+
+ vob
+ video/x-ms-vob
+
+
+ vor
+ application/vnd.stardivision.writer
+
+
+ vox
+ application/x-authorware-bin
+
+
+ vrml
+ model/vrml
+
+
+ vsd
+ application/vnd.visio
+
+
+ vsf
+ application/vnd.vsf
+
+
+ vss
+ application/vnd.visio
+
+
+ vst
+ application/vnd.visio
+
+
+ vsw
+ application/vnd.visio
+
+
+ vtu
+ model/vnd.vtu
+
+
+ vxml
+ application/voicexml+xml
+
+
+ w3d
+ application/x-director
+
+
+ wad
+ application/x-doom
+
+
+ wav
+ audio/x-wav
+
+
+ wax
+ audio/x-ms-wax
+
+
+
+ wbmp
+ image/vnd.wap.wbmp
+
+
+ wbs
+ application/vnd.criticaltools.wbs+xml
+
+
+ wbxml
+ application/vnd.wap.wbxml
+
+
+ wcm
+ application/vnd.ms-works
+
+
+ wdb
+ application/vnd.ms-works
+
+
+ wdp
+ image/vnd.ms-photo
+
+
+ weba
+ audio/webm
+
+
+ webm
+ video/webm
+
+
+ webp
+ image/webp
+
+
+ wg
+ application/vnd.pmi.widget
+
+
+ wgt
+ application/widget
+
+
+ wks
+ application/vnd.ms-works
+
+
+ wm
+ video/x-ms-wm
+
+
+ wma
+ audio/x-ms-wma
+
+
+ wmd
+ application/x-ms-wmd
+
+
+ wmf
+ application/x-msmetafile
+
+
+
+ wml
+ text/vnd.wap.wml
+
+
+
+ wmlc
+ application/vnd.wap.wmlc
+
+
+
+ wmls
+ text/vnd.wap.wmlscript
+
+
+
+ wmlsc
+ application/vnd.wap.wmlscriptc
+
+
+ wmv
+ video/x-ms-wmv
+
+
+ wmx
+ video/x-ms-wmx
+
+
+ wmz
+ application/x-msmetafile
+
+
+ woff
+ font/woff
+
+
+ woff2
+ font/woff2
+
+
+ wpd
+ application/vnd.wordperfect
+
+
+ wpl
+ application/vnd.ms-wpl
+
+
+ wps
+ application/vnd.ms-works
+
+
+ wqd
+ application/vnd.wqd
+
+
+ wri
+ application/x-mswrite
+
+
+ wrl
+ model/vrml
+
+
+ wsdl
+ application/wsdl+xml
+
+
+ wspolicy
+ application/wspolicy+xml
+
+
+ wtb
+ application/vnd.webturbo
+
+
+ wvx
+ video/x-ms-wvx
+
+
+ x32
+ application/x-authorware-bin
+
+
+ x3d
+ model/x3d+xml
+
+
+ x3db
+ model/x3d+binary
+
+
+ x3dbz
+ model/x3d+binary
+
+
+ x3dv
+ model/x3d+vrml
+
+
+ x3dvz
+ model/x3d+vrml
+
+
+ x3dz
+ model/x3d+xml
+
+
+ xaml
+ application/xaml+xml
+
+
+ xap
+ application/x-silverlight-app
+
+
+ xar
+ application/vnd.xara
+
+
+ xbap
+ application/x-ms-xbap
+
+
+ xbd
+ application/vnd.fujixerox.docuworks.binder
+
+
+ xbm
+ image/x-xbitmap
+
+
+ xdf
+ application/xcap-diff+xml
+
+
+ xdm
+ application/vnd.syncml.dm+xml
+
+
+ xdp
+ application/vnd.adobe.xdp+xml
+
+
+ xdssc
+ application/dssc+xml
+
+
+ xdw
+ application/vnd.fujixerox.docuworks
+
+
+ xenc
+ application/xenc+xml
+
+
+ xer
+ application/patch-ops-error+xml
+
+
+ xfdf
+ application/vnd.adobe.xfdf
+
+
+ xfdl
+ application/vnd.xfdl
+
+
+ xht
+ application/xhtml+xml
+
+
+ xhtml
+ application/xhtml+xml
+
+
+ xhvml
+ application/xv+xml
+
+
+ xif
+ image/vnd.xiff
+
+
+ xla
+ application/vnd.ms-excel
+
+
+ xlam
+ application/vnd.ms-excel.addin.macroenabled.12
+
+
+ xlc
+ application/vnd.ms-excel
+
+
+ xlf
+ application/x-xliff+xml
+
+
+ xlm
+ application/vnd.ms-excel
+
+
+ xls
+ application/vnd.ms-excel
+
+
+ xlsb
+ application/vnd.ms-excel.sheet.binary.macroenabled.12
+
+
+ xlsm
+ application/vnd.ms-excel.sheet.macroenabled.12
+
+
+ xlsx
+ application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
+
+
+ xlt
+ application/vnd.ms-excel
+
+
+ xltm
+ application/vnd.ms-excel.template.macroenabled.12
+
+
+ xltx
+ application/vnd.openxmlformats-officedocument.spreadsheetml.template
+
+
+ xlw
+ application/vnd.ms-excel
+
+
+ xm
+ audio/xm
+
+
+ xml
+ application/xml
+
+
+ xo
+ application/vnd.olpc-sugar
+
+
+ xop
+ application/xop+xml
+
+
+ xpi
+ application/x-xpinstall
+
+
+ xpl
+ application/xproc+xml
+
+
+ xpm
+ image/x-xpixmap
+
+
+ xpr
+ application/vnd.is-xpr
+
+
+ xps
+ application/vnd.ms-xpsdocument
+
+
+ xpw
+ application/vnd.intercon.formnet
+
+
+ xpx
+ application/vnd.intercon.formnet
+
+
+ xsl
+ application/xml
+
+
+ xslt
+ application/xslt+xml
+
+
+ xsm
+ application/vnd.syncml+xml
+
+
+ xspf
+ application/xspf+xml
+
+
+ xul
+ application/vnd.mozilla.xul+xml
+
+
+ xvm
+ application/xv+xml
+
+
+ xvml
+ application/xv+xml
+
+
+ xwd
+ image/x-xwindowdump
+
+
+ xyz
+ chemical/x-xyz
+
+
+ xz
+ application/x-xz
+
+
+ yang
+ application/yang
+
+
+ yin
+ application/yin+xml
+
+
+ z
+ application/x-compress
+
+
+ Z
+ application/x-compress
+
+
+ z1
+ application/x-zmachine
+
+
+ z2
+ application/x-zmachine
+
+
+ z3
+ application/x-zmachine
+
+
+ z4
+ application/x-zmachine
+
+
+ z5
+ application/x-zmachine
+
+
+ z6
+ application/x-zmachine
+
+
+ z7
+ application/x-zmachine
+
+
+ z8
+ application/x-zmachine
+
+
+ zaz
+ application/vnd.zzazz.deck+xml
+
+
+ zip
+ application/zip
+
+
+ zir
+ application/vnd.zul
+
+
+ zirz
+ application/vnd.zul
+
+
+ zmm
+ application/vnd.handheld-entertainment+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ index.html
+ index.htm
+ index.jsp
+
+
+
+ Entire Application
+ /*
+
+
+ CONFIDENTIAL
+
+
+
\ No newline at end of file
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/manifests/install.pp b/modules/vulnerabilities/unix/web_training/security_shepherd/manifests/install.pp
new file mode 100644
index 000000000..6c0bf4f6a
--- /dev/null
+++ b/modules/vulnerabilities/unix/web_training/security_shepherd/manifests/install.pp
@@ -0,0 +1,49 @@
+# Installer process
+class security_shepherd::install {
+ include stdlib
+
+ Exec { path => ['/bin', '/usr/bin', '/usr/local/bin', '/sbin', '/usr/sbin'] }
+
+ ensure_packages(['tomcat9', 'mariadb-server', 'openjdk-11-jdk'], {ensure => installed})
+
+ service { 'tomcat9':
+ ensure => running,
+ name => 'tomcat9',
+ enable => true,
+ hasrestart => true,
+ subscribe => [
+ File['/var/lib/tomcat9/webapps/ROOT.war'],
+ ],
+ }
+
+ exec { 'remove-default-site':
+ command => 'rm -rf /var/lib/tomcat9/webapps/*',
+ }
+ -> file { '/var/lib/tomcat9/webapps/ROOT.war':
+ ensure => file,
+ source => 'puppet:///modules/security_shepherd/ROOT.war',
+ }
+ file { '/var/lib/tomcat9/conf/shepherdKeystore.p12':
+ ensure => file,
+ source => 'puppet:///modules/security_shepherd/shepherdKeystore.p12',
+ }
+ -> file { '/var/lib/tomcat9/conf/server.xml':
+ ensure => file,
+ source => 'puppet:///modules/security_shepherd/server.xml',
+ replace => true,
+ }
+ -> file { '/var/lib/tomcat9/conf/web.xml':
+ ensure => file,
+ source => 'puppet:///modules/security_shepherd/web.xml',
+ replace => true,
+ }
+ -> file { '/var/lib/tomcat9/conf/database.properties':
+ ensure => file,
+ source => 'puppet:///modules/security_shepherd/database.properties',
+ }
+ -> file { '/etc/mysql/my.cnf':
+ ensure => file,
+ source => 'puppet:///modules/security_shepherd/my.cnf',
+ replace => true,
+ }
+}
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/manifests/mariadb.pp b/modules/vulnerabilities/unix/web_training/security_shepherd/manifests/mariadb.pp
new file mode 100644
index 000000000..1710aff62
--- /dev/null
+++ b/modules/vulnerabilities/unix/web_training/security_shepherd/manifests/mariadb.pp
@@ -0,0 +1,56 @@
+# Mariadb setup
+class security_shepherd::mariadb {
+ $secgen_parameters=secgen_functions::get_parameters($::base64_inputs_file)
+ $unix_username = $secgen_parameters['unix_username'][0]
+ $flag_store = $secgen_parameters['flag_store']
+ $modules = $secgen_parameters['modules']
+ $user = 'root'
+ $db_pass = 'CowSaysMoo'
+
+ Exec { path => ['/bin', '/usr/bin', '/usr/local/bin', '/sbin', '/usr/sbin'] }
+
+ # Execute this before we lock down root permissions.
+ file { '/tmp/grant.sql':
+ ensure => file,
+ source => 'puppet:///modules/security_shepherd/grant.sql',
+ }
+ -> exec { 'grant-root':
+ cwd => '/tmp',
+ command => "mysql -u ${user} -p${db_pass} < grant.sql",
+ }
+
+ file { '/tmp/coreSchema.sql':
+ ensure => file,
+ content => template('security_shepherd/coreSchema.sql.erb'),
+ }
+ -> file { '/tmp/moduleSchemas.sql':
+ ensure => file,
+ source => 'puppet:///modules/security_shepherd/moduleSchemas.sql',
+ }
+
+ exec { 'create-core':
+ cwd => '/tmp',
+ command => "mysql -u ${user} -p${db_pass} < coreSchema.sql",
+ }
+ -> exec { 'create-modules':
+ cwd => '/tmp',
+ command => "mysql -u ${user} -p${db_pass} < moduleSchemas.sql",
+ }
+
+
+ file { '/var/lib/tomcat9/webapps/ROOT/WEB-INF/classes/flags':
+ ensure => present,
+ content => template('security_shepherd/flags.erb'),
+ replace => true,
+ }
+ -> file { '/var/lib/tomcat9/webapps/ROOT/WEB-INF/classes/active-modules':
+ ensure => present,
+ content => template('security_shepherd/active-modules.erb'),
+ replace => true,
+ notify => Service['tomcat9']
+ }
+ # This needs updating? Weird chicanery happens if not used this way
+ -> exec { 'restart-tom':
+ command => 'systemctl restart tomcat9',
+ }
+}
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/secgen_metadata.xml b/modules/vulnerabilities/unix/web_training/security_shepherd/secgen_metadata.xml
new file mode 100644
index 000000000..a5501685f
--- /dev/null
+++ b/modules/vulnerabilities/unix/web_training/security_shepherd/secgen_metadata.xml
@@ -0,0 +1,45 @@
+
+
+
+ Security Shepherd
+ James Davis
+ MIT
+ The OWASP Security Shepherd Project is a web and mobile application security training
+ platform. Security Shepherd has been designed to foster and improve security awareness among a
+ varied skill-set demographic. The aim of this project is to take AppSec novices or experienced
+ engineers and sharpen their penetration testing skill set to security expert status.
+
+ web_training_platform
+ webapp
+ none
+ user_action
+ unix
+
+ unix_username
+ modules
+ flag_store
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://github.com/OWASP/SecurityShepherd
+
+ security_shepherd
+ GPLv3
+
+
+ .*mysql.*compatible.*
+
+
+
\ No newline at end of file
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/security_shepherd.pp b/modules/vulnerabilities/unix/web_training/security_shepherd/security_shepherd.pp
new file mode 100644
index 000000000..7c48b6ae2
--- /dev/null
+++ b/modules/vulnerabilities/unix/web_training/security_shepherd/security_shepherd.pp
@@ -0,0 +1,2 @@
+include security_shepherd::install
+include security_shepherd::mariadb
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/templates/active-modules.erb b/modules/vulnerabilities/unix/web_training/security_shepherd/templates/active-modules.erb
new file mode 100644
index 000000000..2627c21ae
--- /dev/null
+++ b/modules/vulnerabilities/unix/web_training/security_shepherd/templates/active-modules.erb
@@ -0,0 +1,3 @@
+<% @modules.each do |mod| -%>
+<%= mod %>
+<% end -%>
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/templates/coreSchema.sql.erb b/modules/vulnerabilities/unix/web_training/security_shepherd/templates/coreSchema.sql.erb
new file mode 100644
index 000000000..d210775f1
--- /dev/null
+++ b/modules/vulnerabilities/unix/web_training/security_shepherd/templates/coreSchema.sql.erb
@@ -0,0 +1,1902 @@
+DELIMITER ;
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+DROP SCHEMA IF EXISTS `core` ;
+CREATE SCHEMA IF NOT EXISTS `core` DEFAULT CHARACTER SET utf8mb4 ;
+USE `core` ;
+
+SELECT "Creating Tables" FROM DUAL;
+
+-- -----------------------------------------------------
+-- Table `core`.`class`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `core`.`class` (
+ `classId` VARCHAR(64) NOT NULL ,
+ `className` VARCHAR(32) NOT NULL UNIQUE,
+ `classYear` VARCHAR(5) NOT NULL ,
+ PRIMARY KEY (`classId`) )
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8mb4;
+
+-- -----------------------------------------------------
+-- Table `core`.`users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `core`.`users` (
+ `userId` VARCHAR(64) NOT NULL ,
+ `classId` VARCHAR(64) NULL ,
+ `userName` VARCHAR(32) NOT NULL ,
+ `userPass` VARCHAR(191) NOT NULL ,
+ `userRole` VARCHAR(32) NOT NULL ,
+ `ssoName` VARCHAR(191) ,
+ `badLoginCount` INT NOT NULL DEFAULT 0 ,
+ `suspendedUntil` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' ,
+ `userAddress` VARCHAR(128) NULL ,
+ `loginType` VARCHAR(32) NULL ,
+ `tempPassword` TINYINT(1) NULL DEFAULT FALSE ,
+ `tempUsername` TINYINT(1) NULL DEFAULT FALSE ,
+ `userScore` INT NOT NULL DEFAULT 0 ,
+ `goldMedalCount` INT NOT NULL DEFAULT 0 ,
+ `silverMedalCount` INT NOT NULL DEFAULT 0 ,
+ `bronzeMedalCount` INT NOT NULL DEFAULT 0 ,
+ `badSubmissionCount` INT NOT NULL DEFAULT 0,
+ PRIMARY KEY (`userId`) ,
+ INDEX `classId` (`classId` ASC) ,
+ UNIQUE INDEX `userName_UNIQUE` (`userName` ASC) ,
+ UNIQUE INDEX `ssoName_UNIQUE` (`ssoName` ASC) ,
+ CONSTRAINT `classId`
+ FOREIGN KEY (`classId` )
+ REFERENCES `core`.`class` (`classId` )
+ ON DELETE CASCADE
+ ON UPDATE CASCADE)
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8mb4;
+
+-- -----------------------------------------------------
+-- Table `core`.`modules`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `core`.`modules` (
+ `moduleId` VARCHAR(64) NOT NULL ,
+ `moduleName` VARCHAR(64) NOT NULL ,
+ `moduleNameLangPointer` VARCHAR(64) NOT NULL UNIQUE,
+ `moduleType` VARCHAR(16) NOT NULL ,
+ `moduleCategory` VARCHAR(64) NULL ,
+ `moduleCategoryLangPointer` VARCHAR(64) NULL ,
+ `moduleResult` VARCHAR(191) NULL ,
+ `moduleHash` VARCHAR(191) NULL UNIQUE,
+ `moduleStatus` VARCHAR(16) NULL DEFAULT 'open' ,
+ `incrementalRank` INT NULL DEFAULT 200,
+ `scoreValue` INT NOT NULL DEFAULT 50 ,
+ `hardcodedKey` TINYINT(1) NOT NULL DEFAULT TRUE,
+ `isUnsafe` TINYINT(1) NOT NULL DEFAULT TRUE,
+ PRIMARY KEY (`moduleId`) )
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8mb4;
+
+-- -----------------------------------------------------
+-- Table `core`.`medals`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `core`.`medals` (
+ `medalId` INT NOT NULL AUTO_INCREMENT,
+ `classId` VARCHAR(64) NULL,
+ `moduleId` VARCHAR(64) NOT NULL,
+ `scoreBonus` INT NOT NULL DEFAULT 5 ,
+ `goldMedalAvailable` TINYINT(1) NOT NULL DEFAULT TRUE,
+ `silverMedalAvailable` TINYINT(1) NOT NULL DEFAULT TRUE,
+ `bronzeMedalAvailable` TINYINT(1) NOT NULL DEFAULT TRUE,
+ PRIMARY KEY (`medalId`) ,
+ INDEX `fk_Medals_Modules1` (`moduleId` ASC) ,
+ CONSTRAINT `fk_Medals_Class1`
+ FOREIGN KEY (`classId` )
+ REFERENCES `core`.`class` (`classId` )
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION,
+ CONSTRAINT `fk_Medals_Modules1`
+ FOREIGN KEY (`moduleId` )
+ REFERENCES `core`.`modules` (`moduleId` )
+ ON DELETE CASCADE
+ ON UPDATE CASCADE)
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8mb4;
+
+-- -----------------------------------------------------
+-- Table `core`.`results`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `core`.`results` (
+ `userId` VARCHAR(64) NOT NULL ,
+ `moduleId` VARCHAR(64) NOT NULL ,
+ `startTime` DATETIME NOT NULL ,
+ `finishTime` DATETIME NULL ,
+ `csrfCount` INT NULL DEFAULT 0 ,
+ `resultSubmission` LONGTEXT NULL ,
+ `knowledgeBefore` INT NULL ,
+ `knowledgeAfter` INT NULL ,
+ `difficulty` INT NULL ,
+ `scored` INT NULL,
+ `medalEarned` VARCHAR(32),
+ PRIMARY KEY (`userId`, `moduleId`) ,
+ INDEX `fk_Results_Modules1` (`moduleId` ASC) ,
+ CONSTRAINT `fk_Results_users1`
+ FOREIGN KEY (`userId` )
+ REFERENCES `core`.`users` (`userId` )
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION,
+ CONSTRAINT `fk_Results_Modules1`
+ FOREIGN KEY (`moduleId` )
+ REFERENCES `core`.`modules` (`moduleId` )
+ ON DELETE CASCADE
+ ON UPDATE CASCADE)
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8mb4;
+
+-- -----------------------------------------------------
+-- Table `core`.`cheatsheet`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `core`.`cheatsheet` (
+ `cheatSheetId` VARCHAR(64) NOT NULL ,
+ `moduleId` VARCHAR(64) NOT NULL ,
+ `createDate` DATETIME NOT NULL ,
+ `solution` LONGTEXT NOT NULL ,
+ PRIMARY KEY (`cheatSheetId`, `moduleId`) ,
+ INDEX `fk_CheatSheet_Modules1` (`moduleId` ASC) ,
+ CONSTRAINT `fk_CheatSheet_Modules1`
+ FOREIGN KEY (`moduleId` )
+ REFERENCES `core`.`modules` (`moduleId` )
+ ON DELETE CASCADE
+ ON UPDATE CASCADE)
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8mb4;
+
+-- -----------------------------------------------------
+-- Table `core`.`sequence`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `core`.`sequence` (
+ `tableName` VARCHAR(32) NOT NULL ,
+ `currVal` BIGINT(20) NOT NULL DEFAULT 282475249 ,
+ PRIMARY KEY (`tableName`) )
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8mb4;
+
+-- -----------------------------------------------------
+-- Table `core`.`settings`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `core`.`settings` (
+ `setting` VARCHAR(64) NOT NULL ,
+ `value` VARCHAR(64) NOT NULL ,
+ PRIMARY KEY (`setting`) )
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8mb4;
+
+SELECT "Creating Procedures" FROM DUAL;
+
+-- -----------------------------------------------------
+-- procedure userLock
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userLock` (theName VARCHAR(32))
+BEGIN
+DECLARE theDate DATETIME;
+DECLARE untilDate DATETIME;
+DECLARE theCount INT;
+
+COMMIT;
+SELECT NOW() FROM DUAL INTO theDate;
+-- Get the badLoginCount from users if they are not suspended already or account has attempted a login within the last 10 mins
+SELECT badLoginCount FROM `users`
+ WHERE userName = theName
+ AND suspendedUntil < (theDate - '0000-00-00 00:10:00')
+ INTO theCount;
+
+SELECT suspendedUntil FROM `users`
+ WHERE userName = theName
+ AND suspendedUntil < (theDate - '0000-00-00 00:10:00')
+ INTO untilDate;
+IF (untilDate < theDate) THEN
+ IF (theCount >= 3) THEN
+ -- Set suspended until 30 mins from now
+ UPDATE `users` SET
+ suspendedUntil = TIMESTAMPADD(MINUTE, 30, theDate),
+ badLoginCount = 0
+ WHERE userName = theName;
+ COMMIT;
+ -- ELSE the user is already suspended, or theCount < 3
+ ELSE
+ -- Get user where their last bad login was within 10 mins ago
+ SELECT COUNT(userId) FROM users
+ WHERE userName = theName
+ AND suspendedUntil < (theDate - '0000-00-00 00:10:00')
+ INTO theCount;
+
+ -- IF a user was counted then they are not suspended, but have attemped a bad login within 10 mins of their last
+ IF (theCount > 0) THEN
+ UPDATE `users` SET
+ badLoginCount = (badLoginCount + 1),
+ suspendedUntil = theDate
+ WHERE userName = theName;
+ COMMIT;
+ -- ELSE this is the first time within 10 mins that this account has logged in bad
+ ELSE
+ UPDATE `users` SET
+ badLoginCount = 1,
+ suspendedUntil = theDate
+ WHERE userName = theName;
+ COMMIT;
+ END IF;
+ END IF;
+END IF;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure suspendUser
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`suspendUser` (theId VARCHAR(64), theMins INT)
+BEGIN
+DECLARE theDate DATETIME;
+COMMIT;
+SELECT NOW() FROM DUAL INTO theDate;
+UPDATE `users` SET
+ suspendedUntil = TIMESTAMPADD(MINUTE, theMins, theDate)
+ WHERE userId = theId;
+COMMIT;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure unSuspendUser
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`unSuspendUser` (theId VARCHAR(64))
+BEGIN
+DECLARE theDate DATETIME;
+COMMIT;
+SELECT NOW() FROM DUAL INTO theDate;
+UPDATE `users` SET
+ suspendedUntil = theDate
+ WHERE userId = theId;
+COMMIT;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure userFind
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userFind` (IN theName VARCHAR(32))
+BEGIN
+COMMIT;
+SELECT userName, suspendedUntil FROM `users`
+ WHERE userName = theName;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure playerCount
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`playerCount` ()
+BEGIN
+ COMMIT;
+ SELECT count(userId) FROM users
+ WHERE userRole = 'player';
+END
+
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure userCreate
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userCreate` (IN theClassId VARCHAR(64), IN theUserName VARCHAR(32), IN theUserPass VARCHAR(191), IN theUserRole VARCHAR(32), IN theSSOName VARCHAR(32), IN theUserAddress VARCHAR(128), IN theLoginType VARCHAR(32), theTempPassword BOOLEAN, theTempUsername BOOLEAN)
+BEGIN
+ DECLARE theId VARCHAR(64);
+ DECLARE theClassCount INT;
+ DECLARE theDate DATETIME;
+
+ COMMIT;
+ SELECT NOW() FROM DUAL INTO theDate;
+ -- If (Valid User Type) AND (classId = null or (Valid Class Id)) Then create user
+ IF (theUserRole = 'player' OR theUserRole = 'admin') THEN
+ IF (theClassId != null) THEN
+ SELECT count(classId) FROM class
+ WHERE classId = theClassId
+ INTO theClassCount;
+ IF (theClassCount != 1) THEN
+ SELECT null FROM DUAL INTO theClassId;
+ END IF;
+ END IF;
+
+ -- Increment sequence for users table
+ UPDATE sequence SET
+ currVal = currVal + 1
+ WHERE tableName = 'users';
+ COMMIT;
+ SELECT SHA(CONCAT(currVal, tableName, theDate)) FROM sequence
+ WHERE tableName = 'users'
+ INTO theId;
+
+ -- Insert the values, badLoginCount and suspendedUntil Values will use the defaults defined by the table
+ INSERT INTO users (
+ userId,
+ classId,
+ userName,
+ userPass,
+ userRole,
+ ssoName,
+ userAddress,
+ loginType,
+ tempPassword,
+ tempUsername
+ ) VALUES (
+ theId,
+ theClassId,
+ theUserName,
+ theUserPass,
+ theUserRole,
+ theSSOName,
+ theUserAddress,
+ theLoginType,
+ theTempPassword,
+ theTempUsername
+ );
+ COMMIT;
+ SELECT null FROM DUAL;
+ ELSE
+ SELECT 'Invalid Role Type Detected' FROM DUAL;
+ END IF;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure userBadLoginReset
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userBadLoginReset` (IN theUserId VARCHAR(45))
+BEGIN
+ COMMIT;
+ UPDATE users SET
+ badLoginCount = 0
+ WHERE userId = theUserId;
+ COMMIT;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure userPasswordChange
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userPasswordChange` (IN theUserName VARCHAR(32), IN newHash VARCHAR(191))
+BEGIN
+DECLARE theDate DATETIME;
+COMMIT;
+SELECT NOW() FROM DUAL INTO theDate;
+UPDATE users SET
+ userPass = newHash,
+ tempPassword = FALSE
+ WHERE userName = theUserName
+ AND suspendedUntil < theDate;
+COMMIT;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure userPasswordChangeAdmin
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userPasswordChangeAdmin` (IN theUserId VARCHAR(64), IN newHash VARCHAR(191))
+BEGIN
+DECLARE theDate DATETIME;
+COMMIT;
+SELECT NOW() FROM DUAL INTO theDate;
+UPDATE users SET
+ userPass = newHash,
+ tempPassword = TRUE
+ WHERE userId = theUserId;
+COMMIT;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure classCreate
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`classCreate` (IN theClassName VARCHAR(32), IN theClassYear VARCHAR(5))
+BEGIN
+ DECLARE theId VARCHAR(64);
+ COMMIT;
+ UPDATE sequence SET
+ currVal = currVal + 1
+ WHERE tableName = 'users';
+ COMMIT;
+ SELECT SHA(CONCAT(currVal, tableName)) FROM sequence
+ WHERE tableName = 'users'
+ INTO theId;
+ INSERT INTO class VALUES (theId, theClassName, theClassYear);
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure classCount
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`classCount` ()
+BEGIN
+ SELECT count(ClassId) FROM class;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure classesGetData
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`classesGetData` ()
+BEGIN
+ SELECT classId, className, classYear FROM class;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure classFind
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`classFind` (IN theClassId VARCHAR(64))
+BEGIN
+ SELECT className, classYear FROM class
+ WHERE classId = theClassId;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure playersByClass
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`playersByClass` (IN theClassId VARCHAR(64))
+BEGIN
+ COMMIT;
+ SELECT userId, userName, userAddress FROM users
+ WHERE classId = theClassId
+ AND userRole = 'player'
+ ORDER BY userName;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure playerUpdateClass
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`playerUpdateClass` (IN theUserId VARCHAR(64), IN theClassId VARCHAR(64))
+BEGIN
+COMMIT;
+UPDATE users SET
+ classId = theClassId
+ WHERE userId = theUserId
+ AND userRole = 'player';
+COMMIT;
+SELECT userName FROM users
+ WHERE userId = theUserId
+ AND classId = theClassId
+ AND userRole = 'player';
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure playerFindById
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`playerFindById` (IN playerId VARCHAR(64))
+BEGIN
+COMMIT;
+SELECT userName FROM users
+ WHERE userId = playerId
+ AND userRole = 'player';
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure playersWithoutClass
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`playersWithoutClass` ()
+BEGIN
+ COMMIT;
+ SELECT userId, userName, userAddress FROM users
+ WHERE classId is NULL
+ AND userRole = 'player'
+ ORDER BY userName;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure playerUpdateClassToNull
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`playerUpdateClassToNull` (IN theUserId VARCHAR(45))
+BEGIN
+COMMIT;
+UPDATE users SET
+ classId = NULL
+ WHERE userId = theUserId
+ AND userRole = 'player';
+COMMIT;
+SELECT userName FROM users
+ WHERE userId = theUserId
+ AND classId IS NULL
+ AND userRole = 'player';
+END
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure userUpdateRole
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userUpdateRole` (IN theUserId VARCHAR(64), IN theNewRole VARCHAR(32))
+BEGIN
+COMMIT;
+UPDATE users SET
+ userRole = theNewRole
+ WHERE userId = theUserId;
+COMMIT;
+SELECT userName FROM users
+ WHERE userId = theUserId;
+END
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure adminFindById
+-- -----------------------------------------------------
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`adminFindById` (IN adminId VARCHAR(64))
+BEGIN
+COMMIT;
+SELECT userName FROM users
+ WHERE userId = adminId
+ AND userRole = 'admin';
+END
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure adminGetAll
+-- -----------------------------------------------------
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`adminGetAll` ()
+BEGIN
+COMMIT;
+SELECT userId, userName, userAddress FROM users
+ WHERE userRole = 'admin'
+ ORDER BY userName;
+END
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure moduleCreate
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleCreate` (IN theModuleName VARCHAR(64), theModuleType VARCHAR(16), theModuleCategory VARCHAR(64), isHardcodedKey BOOLEAN, theModuleSolution VARCHAR(191))
+BEGIN
+DECLARE theId VARCHAR(64);
+DECLARE theDate DATETIME;
+DECLARE theLangPointer VARCHAR(64);
+DECLARE theCategoryLangPointer VARCHAR(64);
+COMMIT;
+SELECT NOW() FROM DUAL
+ INTO theDate;
+SELECT REPLACE(LOWER(theModuleName), ' ', '.') FROM DUAL
+ INTO theLangPointer;
+SELECT REPLACE(LOWER(theModuleCategory), ' ', '.') FROM DUAL
+ INTO theCategoryLangPointer;
+IF (theModuleSolution IS NULL) THEN
+ SELECT SHA2(theDate, 256) FROM DUAL
+ INTO theModuleSolution;
+END IF;
+IF (isHardcodedKey IS NULL) THEN
+ SELECT TRUE FROM DUAL
+ INTO isHardcodedKey;
+END IF;
+IF (theModuleType = 'lesson' OR theModuleType = 'challenge') THEN
+ -- Increment sequence for users table
+ UPDATE sequence SET
+ currVal = currVal + 1
+ WHERE tableName = 'modules';
+ COMMIT;
+ SELECT SHA(CONCAT(currVal, tableName, theDate, theModuleName)) FROM sequence
+ WHERE tableName = 'modules'
+ INTO theId;
+ INSERT INTO modules (
+ moduleId, moduleName, moduleNameLangPointer, moduleType, moduleCategory, moduleCategoryLangPointer, moduleResult, moduleHash, hardcodedKey
+ )VALUES(
+ theId, theModuleName, theLangPointer, theModuleType, theModuleCategory, theCategoryLangPointer ,theModuleSolution, SHA2(CONCAT(theModuleName, theId), 256), isHardcodedKey
+ );
+ COMMIT;
+ SELECT moduleId, moduleHash, moduleNameLangPointer, moduleCategoryLangPointer FROM modules
+ WHERE moduleId = theId;
+ELSE
+ SELECT 'ERROR: Invalid module type submited' FROM DUAL;
+END IF;
+
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure getMyModules
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`getMyModules` (IN theUserId VARCHAR(64))
+BEGIN
+(SELECT moduleNameLangPointer, moduleCategoryLangPointer, moduleId, finishTime, moduleType, scoreValue, incrementalRank, scored, medalEarned
+FROM modules LEFT JOIN results USING (moduleId) WHERE userId = theUserId AND moduleStatus = 'open') UNION (SELECT moduleNameLangPointer, moduleCategoryLangPointer, moduleId, null, moduleType, scoreValue, incrementalRank, null, null FROM modules WHERE moduleId NOT IN (SELECT moduleId FROM modules JOIN results USING (moduleId) WHERE userId = theUserId AND moduleStatus = 'open') AND moduleStatus = 'open') ORDER BY incrementalRank;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure moduleAllInfo
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleAllInfo` (IN theType VARCHAR(64), IN theUserId VARCHAR(64))
+BEGIN
+(SELECT moduleNameLangPointer, moduleCategoryLangPointer, moduleId, finishTime
+FROM modules LEFT JOIN results USING (moduleId) WHERE userId = theUserId AND moduleType = theType AND moduleStatus = 'open') UNION (SELECT moduleNameLangPointer, moduleCategoryLangPointer, moduleId, null FROM modules WHERE moduleId NOT IN (SELECT moduleId FROM modules JOIN results USING (moduleId) WHERE userId = theUserId AND moduleType = theType AND moduleStatus = 'open') AND moduleType = theType AND moduleStatus = 'open') ORDER BY moduleCategoryLangPointer, moduleNameLangPointer;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure lessonInfo
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`lessonInfo` (IN theUserId VARCHAR(64))
+BEGIN
+(SELECT moduleNameLangPointer, moduleCategory, moduleId, finishTime
+FROM modules LEFT JOIN results USING (moduleId) WHERE userId = theUserId AND moduleType = 'lesson' AND moduleStatus = 'open') UNION (SELECT moduleNameLangPointer, moduleCategory, moduleId, null FROM modules WHERE moduleId NOT IN (SELECT moduleId FROM modules JOIN results USING (moduleId) WHERE userId = theUserId AND moduleType = 'lesson' AND moduleStatus = 'open') AND moduleType = 'lesson' AND moduleStatus = 'open') ORDER BY moduleNameLangPointer, moduleCategory, moduleNameLangPointer;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure moduleGetResult
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleGetResult` (IN theModuleId VARCHAR(64))
+BEGIN
+COMMIT;
+SELECT moduleName, moduleResult FROM modules
+ WHERE moduleId = theModuleId
+ AND moduleResult IS NOT NULL;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure moduleGetNameLocale
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleGetNameLocale` (IN theModuleId VARCHAR(64))
+BEGIN
+COMMIT;
+SELECT moduleNameLangPointer, moduleName FROM modules
+ WHERE moduleId = theModuleId;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure userUpdateResult
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userUpdateResult` (IN theModuleId VARCHAR(64), IN theUserId VARCHAR(64), IN theBefore INT, IN theAfter INT, IN theDifficulty INT, IN givePoints BOOLEAN, IN theAdditionalInfo LONGTEXT)
+BEGIN
+DECLARE theDate TIMESTAMP;
+DECLARE theClassId VARCHAR(64);
+DECLARE theMedalEarned VARCHAR(32);
+DECLARE theBonus INT;
+DECLARE totalScore INT;
+DECLARE medalInfo INT; -- Used to find out if there is a medal available
+DECLARE goldMedalInfo INT;
+DECLARE silverMedalInfo INT;
+DECLARE bronzeMedalInfo INT;
+DECLARE medalRow INT;
+COMMIT;
+
+SELECT NOW() FROM DUAL
+ INTO theDate;
+
+IF (givePoints) THEN
+ -- Does this Module/class combo exist in the DB?
+ SELECT classId FROM users WHERE userid = theUserId INTO theClassId;
+ IF (theClassId IS NULL) THEN
+ SELECT count(moduleId) FROM medals WHERE moduleId = theModuleId AND classId IS NULL INTO medalRow;
+ ELSE
+ SELECT count(moduleId) FROM medals WHERE moduleId = theModuleId AND classId = theClassId INTO medalRow;
+ END IF;
+ IF (medalRow < 1) THEN
+ INSERT INTO medals (classId, moduleId) VALUES (theClassId, theModuleId);
+ END IF;
+ COMMIT;
+
+ -- Get current bonus and decrement the bonus value
+ SELECT 0 FROM DUAL INTO totalScore;
+
+ IF (theClassId IS NULL) THEN
+ SELECT scoreBonus FROM medals WHERE moduleId = theModuleId AND classId IS NULL INTO theBonus;
+ ELSE
+ SELECT scoreBonus FROM medals WHERE moduleId = theModuleId AND classId = theClassId INTO theBonus;
+ END IF;
+ IF (theBonus > 0) THEN
+ SELECT (totalScore + theBonus) FROM DUAL
+ INTO totalScore;
+ IF (theClassId IS NULL) THEN
+ UPDATE medals SET scoreBonus = scoreBonus - 1 WHERE moduleId = theModuleId AND classId IS NULL;
+ ELSE
+ UPDATE medals SET scoreBonus = scoreBonus - 1 WHERE moduleId = theModuleId AND classId = theClassId;
+ END IF;
+ COMMIT;
+ END IF;
+
+ -- Medal Available?
+ IF (theClassId IS NULL) THEN
+ SELECT count(moduleId) FROM medals WHERE moduleId = theModuleId AND (goldMedalAvailable = TRUE OR silverMedalAvailable = TRUE OR bronzeMedalAvailable = TRUE) AND classId IS NULL INTO medalInfo;
+ ELSE
+ SELECT count(moduleId) FROM medals WHERE moduleId = theModuleId AND classId = theClassId AND (goldMedalAvailable = TRUE OR silverMedalAvailable = TRUE OR bronzeMedalAvailable = TRUE) INTO medalInfo;
+ END IF;
+ COMMIT;
+
+ IF (medalInfo > 0) THEN
+ IF (theClassId IS NULL) THEN
+ SELECT count(moduleId) FROM medals WHERE moduleId = theModuleId AND goldMedalAvailable = TRUE AND classId IS NULL INTO goldMedalInfo;
+ ELSE
+ SELECT count(moduleId) FROM medals WHERE moduleId = theModuleId AND classId = theClassId AND goldMedalAvailable = TRUE INTO goldMedalInfo;
+ END IF;
+ IF (goldMedalInfo > 0) THEN
+ UPDATE users SET goldMedalCount = goldMedalCount + 1 WHERE userId = theUserId;
+ IF (theClassId IS NULL) THEN
+ UPDATE medals SET goldMedalAvailable = FALSE WHERE moduleId = theModuleId AND classId IS NULL;
+ ELSE
+ UPDATE medals SET goldMedalAvailable = FALSE WHERE moduleId = theModuleId AND classId = theClassId;
+ END IF;
+ COMMIT;
+ ELSE
+ IF (theClassId IS NULL) THEN
+ SELECT count(moduleId) FROM medals WHERE moduleId = theModuleId AND silverMedalAvailable = TRUE AND classId IS NULL INTO silverMedalInfo;
+ ELSE
+ SELECT count(moduleId) FROM medals WHERE moduleId = theModuleId AND classId = theClassId AND silverMedalAvailable = TRUE INTO silverMedalInfo;
+ END IF;
+ IF (silverMedalInfo > 0) THEN
+ UPDATE users SET silverMedalCount = silverMedalCount + 1 WHERE userId = theUserId;
+ IF (theClassId IS NULL) THEN
+ UPDATE medals SET silverMedalAvailable = FALSE WHERE moduleId = theModuleId AND classId IS NULL;
+ ELSE
+ UPDATE medals SET silverMedalAvailable = FALSE WHERE moduleId = theModuleId AND classId = theClassId;
+ END IF;
+ COMMIT;
+ ELSE
+ IF (theClassId IS NULL) THEN
+ SELECT count(moduleId) FROM medals WHERE moduleId = theModuleId AND bronzeMedalAvailable = TRUE AND classId IS NULL INTO bronzeMedalInfo;
+ ELSE
+ SELECT count(moduleId) FROM medals WHERE moduleId = theModuleId AND classId = theClassId AND bronzeMedalAvailable = TRUE INTO bronzeMedalInfo;
+ END IF;
+ IF (bronzeMedalInfo > 0) THEN
+ UPDATE users SET bronzeMedalCount = bronzeMedalCount + 1 WHERE userId = theUserId;
+ IF (theClassId IS NULL) THEN
+ UPDATE medals SET bronzeMedalAvailable = FALSE WHERE moduleId = theModuleId AND classId IS NULL;
+ ELSE
+ UPDATE medals SET bronzeMedalAvailable = FALSE WHERE moduleId = theModuleId AND classId = theClassId;
+ END IF;
+ COMMIT;
+ END IF;
+ END IF;
+ END IF;
+ END IF;
+
+ -- Get the type of Medal the user might have earned
+ IF (medalInfo <= 0) THEN
+ SELECT "none" FROM DUAL INTO theMedalEarned;
+ ELSE
+ IF (goldMedalInfo > 0) THEN
+ SELECT "gold" FROM DUAL INTO theMedalEarned;
+ ELSE
+ IF (silverMedalInfo > 0) THEN
+ SELECT "silver" FROM DUAL INTO theMedalEarned;
+ ELSE
+ IF (bronzeMedalInfo > 0) THEN
+ SELECT "bronze" FROM DUAL INTO theMedalEarned;
+ END IF;
+ END IF;
+ END IF;
+ END IF;
+
+ -- Get the Score value for the level
+ SELECT (totalScore + scoreValue) FROM modules
+ WHERE moduleId = theModuleId
+ INTO totalScore;
+
+ -- Update users score
+ UPDATE users SET
+ userScore = userScore + totalScore
+ WHERE userId = theUserId;
+ COMMIT;
+
+ELSE
+ -- Don't award points or medals, just record module as completed
+ SET totalScore=0;
+ SELECT "none" FROM DUAL INTO theMedalEarned;
+
+END IF;
+
+-- Update result row
+UPDATE results SET
+ finishTime = theDate,
+ `knowledgeBefore` = theBefore,
+ `knowledgeAfter` = theAfter,
+ `difficulty` = theDifficulty,
+ `resultSubmission` = theAdditionalInfo,
+ `scored` = totalScore,
+ `medalEarned` = theMedalEarned
+ WHERE startTime IS NOT NULL
+ AND finishTime IS NULL
+ AND userId = theUserId
+ AND moduleId = theModuleId;
+COMMIT;
+SELECT moduleName FROM modules
+ JOIN results USING (moduleId)
+ WHERE startTime IS NOT NULL
+ AND finishTime IS NOT NULL
+ AND userId = theUserId
+ AND moduleId = theModuleId;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure moduleGetHash
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleGetHash` (IN theModuleId VARCHAR(64), IN theUserId VARCHAR(64))
+BEGIN
+DECLARE theDate DATETIME;
+DECLARE tempInt INT;
+COMMIT;
+SELECT NOW() FROM DUAL
+ INTO theDate;
+SELECT COUNT(*) FROM results
+ WHERE userId = theUserId
+ AND moduleId = theModuleId
+ AND startTime IS NOT NULL
+ INTO tempInt;
+IF(tempInt = 0) THEN
+ INSERT INTO results
+ (moduleId, userId, startTime)
+ VALUES
+ (theModuleId, theUserId, theDate);
+ COMMIT;
+END IF;
+SELECT moduleHash, moduleCategory, moduleType FROM modules
+ WHERE moduleId = theModuleId AND moduleStatus = 'open';
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure moduleGetResultFromHash
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleGetResultFromHash` (IN theHash VARCHAR(191))
+BEGIN
+COMMIT;
+SELECT moduleResult FROM modules
+ WHERE moduleHash = theHash;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure resultMessageByClass
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`resultMessageByClass` (IN theClassId VARCHAR(64), IN theModuleId VARCHAR(64))
+BEGIN
+COMMIT;
+SELECT userName, resultSubmission FROM results
+ JOIN users USING (userId)
+ JOIN class USING (classId)
+ WHERE classId = theClassId
+ AND moduleId = theModuleId;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure resultMessageSet
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`resultMessageSet` (IN theMessage VARCHAR(128), IN theUserId VARCHAR(64), IN theModuleId VARCHAR(64))
+BEGIN
+COMMIT;
+UPDATE results SET
+ resultSubmission = theMessage
+ WHERE moduleId = theModuleId
+ AND userId = theUserId;
+COMMIT;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure resultMessagePlus
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`resultMessagePlus` (IN theModuleId VARCHAR(64), IN theUserId2 VARCHAR(64))
+BEGIN
+UPDATE results SET
+ csrfCount = csrfCount + 1
+ WHERE userId = theUserId2
+ AND moduleId = theModuleId;
+COMMIT;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure resultMessagePlus
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`csrfLevelComplete` (IN theModuleId VARCHAR(64), IN theUserId2 VARCHAR(64))
+BEGIN
+ DECLARE temp INT;
+COMMIT;
+SELECT csrfCount FROM results
+ WHERE userId = theUserId2
+ AND moduleId = theModuleId;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure moduleGetIdFromHash
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleGetIdFromHash` (IN theHash VARCHAR(191))
+BEGIN
+COMMIT;
+SELECT moduleId FROM modules
+ WHERE moduleHash = theHash;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure userGetNameById
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userGetNameById` (IN theUserId VARCHAR(64))
+BEGIN
+COMMIT;
+SELECT userName FROM users
+ WHERE userId = theUserId;
+END
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure userGetIdByName
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userGetIdByName` (IN theUserName VARCHAR(64))
+BEGIN
+COMMIT;
+SELECT userId FROM users
+ WHERE userName = theUserName;
+END
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure userClassId
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userClassId` (IN theUserName VARCHAR(64))
+BEGIN
+COMMIT;
+SELECT classId FROM users
+ WHERE userName = theUserName;
+END
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure userBadSubmission
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userBadSubmission` (IN theUserId VARCHAR(64))
+BEGIN
+UPDATE users SET
+ badSubmissionCount = badSubmissionCount + 1
+ WHERE userId = theUserId;
+COMMIT;
+UPDATE users SET
+ userScore = userScore - userScore/10
+ WHERE userId = theUserId AND badSubmissionCount > 40 AND userScore > 5;
+COMMIT;
+UPDATE users SET
+ userScore = userScore - 10
+ WHERE userId = theUserId AND badSubmissionCount > 40 AND userScore <= 5;
+COMMIT;
+END
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure resetUserBadSubmission
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`resetUserBadSubmission` (IN theUserId VARCHAR(64))
+BEGIN
+UPDATE users SET
+ badSubmissionCount = 0
+ WHERE userId = theUserId;
+COMMIT;
+END
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure moduleComplete
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleComplete` (IN theModuleId VARCHAR(64), IN theUserId VARCHAR(64))
+BEGIN
+DECLARE theDate DATETIME;
+COMMIT;
+SELECT NOW() FROM DUAL
+ INTO theDate;
+UPDATE results SET
+ finishTime = theDate
+ WHERE startTime IS NOT NULL
+ AND moduleId = theModuleId
+ AND userId = theUserId;
+COMMIT;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure cheatSheetCreate
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`cheatSheetCreate` (IN theModule VARCHAR(64), IN theSheet LONGTEXT)
+BEGIN
+DECLARE theDate DATETIME;
+DECLARE theId VARCHAR(64);
+ COMMIT;
+ UPDATE sequence SET
+ currVal = currVal + 1
+ WHERE tableName = 'cheatSheet';
+ COMMIT;
+ SELECT NOW() FROM DUAL INTO theDate;
+
+ SELECT SHA(CONCAT(currVal, tableName, theDate)) FROM `core`.`sequence`
+ WHERE tableName = 'cheatSheet'
+ INTO theId;
+
+ INSERT INTO `core`.`cheatsheet`
+ (cheatSheetId, moduleId, createDate, solution)
+ VALUES
+ (theId, theModule, theDate, theSheet);
+ COMMIT;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure moduleGetAll
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleGetAll` ()
+BEGIN
+COMMIT;
+SELECT moduleId, moduleName, moduleType, moduleCategory FROM modules
+ ORDER BY moduleType, moduleCategory, moduleName;
+END
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure cheatSheetGetSolution
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`cheatSheetGetSolution` (IN theModuleId VARCHAR(64))
+BEGIN
+COMMIT;
+SELECT moduleName, solution FROM modules
+ JOIN cheatsheet USING (moduleId)
+ WHERE moduleId = theModuleID
+ ORDER BY createDate DESC;
+END
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure moduleGetHashById
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleGetHashById` (IN theModuleId VARCHAR(64))
+BEGIN
+COMMIT;
+SELECT moduleHash FROM modules
+ WHERE moduleId = theModuleId;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure userCheckResult
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userCheckResult` (IN theModuleId VARCHAR(64), IN theUserId VARCHAR(64))
+BEGIN
+COMMIT;
+-- Returns a module Name if the user has not completed the module identified by moduleId
+SELECT moduleName FROM results
+ JOIN modules USING(moduleId)
+ WHERE finishTime IS NULL
+ AND startTime IS NOT NULL
+ AND finishTime IS NULL
+ AND userId = theUserId
+ AND moduleId = theModuleId;
+END
+
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure moduleIncrementalInfo
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleIncrementalInfo` (IN theUserId VARCHAR(64))
+BEGIN
+(SELECT moduleNameLangPointer, moduleCategory, moduleId, finishTime, incrementalRank FROM modules LEFT JOIN results USING (moduleId) WHERE userId = theUserId AND moduleStatus = 'open') UNION (SELECT moduleNameLangPointer, moduleCategory, moduleId, null, incrementalRank FROM modules WHERE moduleStatus = 'open' AND moduleId NOT IN (SELECT moduleId FROM modules JOIN results USING (moduleId) WHERE userId = theUserId)) ORDER BY incrementalRank;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure moduleFeedback
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleFeedback` (IN theModuleId VARCHAR(64))
+BEGIN
+SELECT userName, TIMESTAMPDIFF(MINUTE, finishTime, startTime)*(-1), difficulty, knowledgeBefore, knowledgeAfter, resultSubmission
+ FROM modules
+ LEFT JOIN results USING (moduleId)
+ LEFT JOIN users USING (userId)
+ WHERE moduleId = theModuleId;
+END
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure userProgress
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userProgress` (IN theClassId VARCHAR(64))
+BEGIN
+ COMMIT;
+SELECT userName, count(finishTime), userScore FROM users JOIN results USING (userId) WHERE finishTime IS NOT NULL
+AND classId = theClassId
+GROUP BY userName UNION SELECT userName, 0, userScore FROM users WHERE classId = theClassId AND userId NOT IN (SELECT userId FROM users JOIN results USING (userId) WHERE classId = theClassId AND finishTime IS NOT NULL GROUP BY userName) ORDER BY userScore DESC;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure classScoreboard
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`classScoreboard` (IN theClassId VARCHAR(64))
+BEGIN
+ COMMIT;
+SELECT userId, userName, userScore, goldMedalCount, silverMedalCount, bronzeMedalCount FROM users
+ WHERE classId = theClassId AND userRole = 'player' AND userScore > 0
+ ORDER BY userScore DESC, goldMedalCount DESC, silverMedalCount DESC, bronzeMedalCount DESC, userId ASC;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure totalScoreboard
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`totalScoreboard` ()
+BEGIN
+ COMMIT;
+SELECT userId, userName, userScore, goldMedalCount, silverMedalCount, bronzeMedalCount FROM users
+ WHERE userRole = 'player' AND userScore > 0
+ ORDER BY userScore DESC, goldMedalCount DESC, silverMedalCount DESC, bronzeMedalCount DESC, userId ASC;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure userStats
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userStats` (IN theUserName VARCHAR(32))
+BEGIN
+DECLARE temp INT;
+SELECT COUNT(*) FROM modules INTO temp;
+SELECT userName, sum(TIMESTAMPDIFF(MINUTE, finishTime, startTime)*(-1)) AS "Time", CONCAT(COUNT(*),"/", temp) AS "Progress"
+ FROM modules
+ LEFT JOIN results USING (moduleId)
+ LEFT JOIN users USING (userId)
+ WHERE userName = theUserName AND resultSubmission IS NOT NULL
+ GROUP BY userName;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure userStatsDetailed
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`userStatsDetailed` (IN theUserName VARCHAR(32))
+BEGIN
+DECLARE temp INT;
+SELECT COUNT(*) FROM modules INTO temp;
+SELECT userName, moduleName, TIMESTAMPDIFF(MINUTE, finishTime, startTime)*(-1) AS "Time"
+ FROM modules
+ LEFT JOIN results USING (moduleId)
+ LEFT JOIN users USING (userId)
+ WHERE userName = theUserName AND resultSubmission IS NOT NULL
+ ORDER BY incrementalRank;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure moduleOpenInfo
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleOpenInfo` (IN theUserId VARCHAR(64))
+BEGIN
+(SELECT moduleName, moduleCategory, moduleId, finishTime FROM modules LEFT JOIN results USING (moduleId)
+WHERE userId = theUserId AND moduleStatus = 'open') UNION (SELECT moduleName, moduleCategory, moduleId, null FROM modules WHERE moduleId NOT IN (SELECT moduleId FROM modules JOIN results USING (moduleId) WHERE userId = theUserId AND moduleStatus = 'open') AND moduleStatus = 'open') ORDER BY moduleCategory, moduleName;
+END
+
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure moduleClosednfo
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleClosednfo` (IN theUserId VARCHAR(64))
+BEGIN
+(SELECT moduleName, moduleCategory, moduleId, finishTime
+FROM modules LEFT JOIN results USING (moduleId) WHERE userId = theUserId AND moduleStatus = 'closed') UNION (SELECT moduleName, moduleCategory, moduleId, null FROM modules WHERE moduleId NOT IN (SELECT moduleId FROM modules JOIN results USING (moduleId) WHERE userId = theUserId AND moduleStatus = 'closed') AND moduleStatus = 'closed') ORDER BY moduleCategory, moduleName;
+END
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure moduleTournamentOpenInfo
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleTournamentOpenInfo` (IN theUserId VARCHAR(64))
+BEGIN
+(SELECT moduleNameLangPointer, moduleCategory, moduleId, finishTime, incrementalRank, scoreValue FROM modules LEFT JOIN results USING (moduleId)
+WHERE userId = theUserId AND moduleStatus = 'open') UNION (SELECT moduleNameLangPointer, moduleCategory, moduleId, null, incrementalRank, scoreValue FROM modules WHERE moduleId NOT IN (SELECT moduleId FROM modules JOIN results USING (moduleId) WHERE userId = theUserId AND moduleStatus = 'open') AND moduleStatus = 'open') ORDER BY incrementalRank, scoreValue, moduleNameLangPointer;
+END
+
+$$
+DELIMITER ;
+;
+
+-- -----------------------------------------------------
+-- procedure moduleSetStatus
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleSetStatus` (IN theModuleId VARCHAR(64), IN theStatus VARCHAR(16))
+BEGIN
+UPDATE modules SET
+ moduleStatus = theStatus
+ WHERE moduleId = theModuleId;
+COMMIT;
+END
+$$
+DELIMITER ;
+;
+-- -----------------------------------------------------
+-- procedure moduleAllStatus
+-- -----------------------------------------------------
+
+USE `core`;
+DELIMITER $$
+CREATE PROCEDURE `core`.`moduleAllStatus` ()
+BEGIN
+SELECT moduleId, moduleName, moduleStatus
+ FROM modules;
+END
+$$
+DELIMITER ;
+;
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
+-- -----------------------------------------------------
+SELECT "Data for table `core`.`sequence`" FROM DUAL;
+-- -----------------------------------------------------
+SET AUTOCOMMIT=0;
+USE `core`;
+INSERT INTO `core`.`sequence` (`tableName`, `currVal`) VALUES ('users', '282475249');
+INSERT INTO `core`.`sequence` (`tableName`, `currVal`) VALUES ('cheatSheet', '282475299');
+INSERT INTO `core`.`sequence` (`tableName`, `currVal`) VALUES ('class', '282475249');
+INSERT INTO `core`.`sequence` (`tableName`, `currVal`) VALUES ('modules', '282475576');
+
+COMMIT;
+
+-- -----------------------------------------------------
+SELECT "Data for table `core`.`settings`" FROM DUAL;
+-- -----------------------------------------------------
+SET AUTOCOMMIT=0;
+USE `core`;
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('adminCheatsEnabled', false);
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('playerCheatsEnabled', false);
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('moduleLayout', 'ctf');
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('enableFeedback', false);
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('openRegistration', false);
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('scoreboardStatus', 'open');
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('scoreboardClass', '');
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('hasStartTime', false);
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('startTime', '2019-01-01T12:00:00');
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('hasLockTime', false);
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('lockTime', '2020-01-01T12:00:00');
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('hasEndTime', false);
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('endTime', '2020-02-01T12:00:00');
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('enableTranslations', true);
+INSERT INTO `core`.`settings` (`setting`, `value`) VALUES ('defaultClass', '');
+
+COMMIT;
+
+-- -----------------------------------------------------
+SELECT "Inserting Data for table `core`.`modules`" FROM DUAL;
+-- -----------------------------------------------------
+SET AUTOCOMMIT=0;
+USE `core`;
+
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('0dbea4cb5811fff0527184f99bd5034ca9286f11', 'Insecure Direct Object References', 'insecure.direct.object.references', 'lesson', 'Insecure Direct Object References', 'insecure.direct.object.references', '59e571b1e59441e76e0c85e5b49', 'fdb94122d0f032821019c7edf09dc62ea21e25ca619ed9107bcc50e4a8dbc100', 'open', '5', '10', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('b9d82aa7b46ddaddb6acfe470452a8362136a31e', 'Poor Data Validation', 'poor.data.validation', 'lesson', 'Poor Data Validation', 'poor.data.validation', '6680b08b175c9f3d521764b41349fcbd3c0ad0a76655a10d42372ebccdfdb4bb', '4d8d50a458ca5f1f7e2506dd5557ae1f7da21282795d0ed86c55fefe41eb874f', 'open', '6', '10', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('bf847c4a8153d487d6ec36f4fca9b77749597c64', 'Security Misconfiguration', 'security.misconfiguration', 'lesson', 'Security Misconfigurations', 'security.misconfigurations', '55b34717d014a5a355f6eced4386878fab0b2793e1d1dbfd23e6262cd510ea96', 'fe04648f43cdf2d523ecf1675f1ade2cde04a7a2e9a7f1a80dbb6dc9f717c833', 'open', '7', '10', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('9533e21e285621a676bec58fc089065dec1f59f5', 'Broken Session Management', 'broken.session.management', 'lesson', 'Session Management', 'session.management', '6594dec9ff7c4e60d9f8945ca0d4', 'b8c19efd1a7cc64301f239f9b9a7a32410a0808138bbefc98986030f9ea83806', 'open', '16', '10', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('52c5394cdedfb2e95b3ad8b92d0d6c9d1370ea9a', 'Failure to Restrict URL Access', 'failure.to.restrict.url.access', 'lesson', 'Failure to Restrict URL Access', 'failure.to.restrict.url.access', 'f60d1337ac4d35cb67880a3adda79', 'oed23498d53ad1d965a589e257d8366d74eb52ef955e103c813b592dba0477e3', 'open', '25', '15', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('ca8233e0398ecfa76f9e05a49d49f4a7ba390d07', 'Cross Site Scripting', 'cross.site.scripting', 'lesson', 'XSS', 'xss', 'ea7b563b2935d8587539d747d', 'zf8ed52591579339e590e0726c7b24009f3ac54cdff1b81a65db1688d86efb3a', 'open', '26', '15', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('cd7f70faed73d2457219b951e714ebe5775515d8', 'Cross Site Scripting 1', 'cross.site.scripting.1', 'challenge', 'XSS', 'xss', '445d0db4a8fc5d4acb164d022b', 'd72ca2694422af2e6b3c5d90e4c11e7b4575a7bc12ee6d0a384ac2469449e8fa', 'open', '35', '20', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('53a53a66cb3bf3e4c665c442425ca90e29536edd', 'Insecure Data Storage', 'insecure.data.storage', 'lesson', 'Mobile Insecure Data Storage', 'mobile.insecure.data.storage', 'Battery777', 'ecfad0a5d41f59e6bed7325f56576e1dc140393185afca8975fbd6822ebf392f', 'open', '45', '25', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('201ae6f8c55ba3f3b5881806387fbf34b15c30c2', 'Insecure Cryptographic Storage', 'insecure.cryptographic.storage', 'lesson', 'Insecure Cryptographic Storage', 'insecure.cryptographic.storage', 'base64isNotEncryptionBase64isEncodingBase64HidesNothingFromYou', 'if38ebb58ea2d245fa792709370c00ca655fded295c90ef36f3a6c5146c29ef2', 'open', '46', '25', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('408610f220b4f71f7261207a17055acbffb8a747', 'SQL Injection', 'sql.injection', 'lesson', 'Injection', 'injection', '3c17f6bf34080979e0cebda5672e989c07ceec9fa4ee7b7c17c9e3ce26bc63e0', 'e881086d4d8eb2604d8093d93ae60986af8119c4f643894775433dbfb6faa594', 'open', '55', '30', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('891a0208a95f1791287be721a4b851d4c584880a', 'Insecure Cryptographic Storage Challenge 1', 'insecure.cryptographic.storage.challenge.1', 'challenge', 'Insecure Cryptographic Storage', 'insecure.cryptographic.storage', 'mylovelyhorserunningthroughthefieldwhereareyougoingwithyourbiga', 'x9c408d23e75ec92495e0caf9a544edb2ee8f624249f3e920663edb733f15cd7', 'open', '65', '35', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('2dc909fd89c2b03059b1512e7b54ce5d1aaa4bb4', 'Insecure Direct Object Reference Challenge 1', 'insecure.direct.object.reference.challenge.1', 'challenge', 'Insecure Direct Object References', 'insecure.direct.object.references', 'dd6301b38b5ad9c54b85d07c087aebec89df8b8c769d4da084a55663e6186742', 'o9a450a64cc2a196f55878e2bd9a27a72daea0f17017253f87e7ebd98c71c98c', 'open', '66', '35', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('6be5de81223cc1b38b6e427cc44f8b6a28d2bc96', 'Poor Data Validation 1', 'poor.data.validation.1', 'challenge', 'Poor Data Validation', 'poor.data.validation', 'd30475881612685092e5ec469317dcc5ccc1f548a97bfdb041236b5bba7627bf', 'ca0e89caf3c50dbf9239a0b3c6f6c17869b2a1e2edc3aa6f029fd30925d66c7e', 'open', '67', '35', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('544aa22d3dd16a8232b093848a6523b0712b23da', 'SQL Injection 1', 'sql.injection.1', 'challenge', 'Injection', 'injection', 'fd8e9a29dab791197115b58061b215594211e72c1680f1eacc50b0394133a09f', 'e1e109444bf5d7ae3d67b816538613e64f7d0f51c432a164efc8418513711b0a', 'open', '68', '35', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('2ab09c0c18470ae5f87d219d019a1f603e66f944', 'Reverse Engineering', 'reverse.engineering', 'lesson', 'Mobile Reverse Engineering', 'mobile.reverse.engineering', 'DrumaDrumaDrumBoomBoom', '19753b944b63232812b7af1a0e0adb59928158da5994a39f584cb799f25a95b9', 'open', '75', '40', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('a4bf43f2ba5ced041b03d0b3f9fa3541c520d65d', 'Session Management Challenge 1', 'session.management.challenge.1', 'challenge', 'Session Management', 'session.management', 'db7b1da5d7a43c7100a6f01bb0c', 'dfd6bfba1033fa380e378299b6a998c759646bd8aea02511482b8ce5d707f93a', 'open', '75', '40', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('3d5b46abc6865ba09aaff98a8278a5f5e339abff', 'Failure to Restrict URL Access 1', 'failure.to.restrict.url.access.1', 'challenge', 'Failure to Restrict URL Access', 'failure.to.restrict.url.access', 'c776572b6a9d5b5c6e4aa672a4771213', '4a1bc73dd68f64107db3bbc7ee74e3f1336d350c4e1e51d4eda5b52dddf86c99', 'open', '76', '40', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('1506f22cd73d14d8a73e0ee32006f35d4f234799', 'Unintended Data Leakage', 'unintended.data.leakage', 'lesson', 'Mobile Data Leakage', 'mobile.data.leakage', 'SilentButSteadyRedLed', '392c20397c535845d93c32fd99b94f70afe9cca3f78c1e4766fee1cc08c035ec', 'open', '77', '40', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('453d22238401e0bf6f1ff5d45996407e98e45b07', 'Cross Site Request Forgery', 'cross.site.request.forgery', 'lesson', 'CSRF', 'csrf', '666980771c29857b8a84c686751ce7edaae3d6ac1', 'ed4182af119d97728b2afca6da7cdbe270a9e9dd714065f0f775cd40dc296bc7', 'open', '78', '40', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('5b461ebe2e5e2797740cb3e9c7e3f93449a93e3a', 'Content Provider Leakage', 'content.provider.leakage', 'lesson', 'Mobile Content Provider', 'mobile.content.provider', 'LazerLizardsFlamingWizards', '4d41997b5b81c88f7eb761c1975481c4ce397b80291d99307cfad69662277d39', 'open', '79', '50', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('6f5db377c28da4179bca1a43ede8d6bcf7bd322e', 'Untrusted Input', 'untrusted.input', 'lesson', 'Mobile Security Decisions via Untrusted Input', 'mobile.security.decisions.via.untrusted.input', 'RetroMagicFuturePunch', '5e2b61c679d1f290d23308b3b66c3ec00cd069f1483b705d17f2795a4e77dcb6', 'open', '82', '50', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('52885a3db5b09adc24f38bc453fe348f850649b3', 'Reverse Engineering 1', 'reverse.engineering.1', 'challenge', 'Mobile Reverse Engineering', 'mobile.reverse.engineering', 'christopherjenkins', '072a9e4fc888562563adf8a89fa55050e3e1cfbbbe1d597b0537513ac8665295', 'open', '85', '50', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('b6432a6b5022cb044e9946315c44ab262ab59e88', 'Unvalidated Redirects and Forwards', 'unvalidated.redirects.and.forwards', 'lesson', 'Unvalidated Redirects and Forwards', 'unvalidated.redirects.and.forwards', '658c43abcf81a61ca5234cfd7a2', 'f15f2766c971e16e68aa26043e6016a0a7f6879283c873d9476a8e7e94ea736f', 'open', '86', '45', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('335440fef02d19259254ed88293b62f31cccdd41', 'Client Side Injection', 'client.side.injection', 'lesson', 'Mobile Injection', 'mobile.injection', 'VolcanicEruptionsAbruptInterruptions', 'f758a97011ec4452cc0707e546a7c0f68abc6ef2ab747ea87e0892767152eae1', 'open', '87', '50', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('f771a10efb42a79a9dba262fd2be2e44bf40b66d', 'SQL Injection 2', 'sql.injection.2', 'challenge', 'Injection', 'injection', 'f62abebf5658a6a44c5c9babc7865110c62f5ecd9d0a7052db48c4dbee0200e3', 'ffd39cb26727f34cbf9fce3e82b9d703404e99cdef54d2aa745f497abe070b', 'open', '88', '45', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('d7eaeaa1cc4f218abd86d14eefa183a0f8eb6298', 'NoSQL Injection One', 'nosql.injection.one', 'challenge', 'Injection', 'injection', 'c09f32d4c3dd5b75f04108e5ffc9226cd8840288a62bdaf9dc65828ab6eaf86a', 'd63c2fb5da9b81ca26237f1308afe54491d1bacf9fffa0b21a072b03c5bafe66', 'open', '89', '45', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('0cdd1549e7c74084d7059ce748b93ef657b44457', 'Poor Authentication', 'poor.authentication', 'lesson', 'Mobile Poor Authentication', 'mobile.poor.authentication', 'UpsideDownPizzaDip', '77777b312d5b56a17c1f30550dd34e8d6bd8b037f05341e64e94f5411c10ac8e', 'open', '90', '50', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('ef6496892b8e48ac2f349cdd7c8ecb889fc982af', 'Broken Crypto', 'broken.crypto', 'lesson', 'Mobile Broken Crypto', 'mobile.broken.crypto', '33edeb397d665ed7d1a580f3148d4b2f', '911fa7f4232e096d6a74a0623842c4157e29b9bcc44e8a827be3bb7e58c9a212', 'open', '97', '50', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('f16bf2ab1c1bf400d36330f91e9ac6045edcd003', 'Reverse Engineering 2', 'reverse.engineering.2', 'challenge', 'Mobile Reverse Engineering', 'mobile.reverse.engineering', 'FireStoneElectric', '5bc811f9e744a71393a277c51bfd8fbb5469a60209b44fa3485c18794df4d5b1', 'open', '98', '50', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('c685f8102ae0128c2ab342df64699bb8209a0839', 'SQL Injection Escaping', 'sql.injection.escaping', 'challenge', 'Injection', 'injection', '0dcf9078ba5d878f9e23809ac8f013d1a08fdc8f12c5036f1a4746dbe86c0aac', '8c3c35c30cdbbb73b7be3a4f8587aa9d88044dc43e248984a252c6e861f673d4', 'open', '99', '50', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('b70a84f159876bb9885b6e0087d22f0a52abbfcf', 'Session Management Challenge 2', 'session.management.challenge.2', 'challenge', 'Session Management', 'session.management', '4ba31e5ffe29de092fe1950422a', 'd779e34a54172cbc245300d3bc22937090ebd3769466a501a5e7ac605b9f34b7', 'open', '105', '55', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('20e755179a5840be5503d42bb3711716235005ea', 'CSRF 1', 'csrf.1', 'challenge', 'CSRF', 'csrf', '7639c952a191d569a0c741843b599604c37e33f9f5d8eb07abf0254635320b07', 's74a796e84e25b854906d88f622170c1c06817e72b526b3d1e9a6085f429cf52', 'open', '106', '55', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('0e9e650ffca2d1fe516c5d7b0ce5c32de9e53d1e', 'Session Management Challenge 3', 'session.management.challenge.3', 'challenge', 'Session Management', 'session.management', 'e62008dc47f5eb065229d48963', 't193c6634f049bcf65cdcac72269eeac25dbb2a6887bdb38873e57d0ef447bc3', 'open', '115', '60', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('307f78f18fd6a87e50ed6705231a9f24cd582574', 'Insecure Data Storage 1', 'insecure.data.storage.1', 'challenge', 'Mobile Insecure Data Storage', 'mobile.insecure.data.storage', 'WarshipsAndWrenches', '362f84cf26bf96aeae358d5d0bbee31e9291aaa5367594c29b3af542a7572c01', 'open', '116', '60', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('3f010a976bcbd6a37fba4a10e4a057acc80bdc09', 'Broken Crypto 1', 'broken.crypto.1', 'challenge', 'Mobile Broken Crypto', 'mobile.broken.crypto', 'd1f2df53084b970ab538457f5af34c8b', 'd2f8519f8264f9479f56165465590b499ceca941ab848805c00f5bf0a40c9717', 'open', '117', '60', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('d4e2c37d8f1298fcaf4edcea7292cb76e9eab09b', 'Cross Site Scripting 2', 'cross.site.scripting.2', 'challenge', 'XSS', 'xss', '495ab8cc7fe9532c6a75d378de', 't227357536888e807ff0f0eff751d6034bafe48954575c3a6563cb47a85b1e888', 'open', '119', '60', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('9e46e3c8bde42dc16b9131c0547eedbf265e8f16', 'Reverse Engineering 3', 'reverse.engineering.3', 'challenge', 'Mobile Reverse Engineering', 'mobile.reverse.engineering', 'C1babd72225f0e9934YZ8', 'dbae0baa3f71f196c4d2c6c984d45a6c1c635bf1b482dccfe32e9b01b69a042b', 'open', '120', '76', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('0709410108f91314fb6f7721df9b891351eb2fcc', 'Insecure Cryptographic Storage Challenge 2', 'insecure.cryptographic.storage.challenge.2', 'challenge', 'Insecure Cryptographic Storage', 'insecure.cryptographic.storage', 'TheVigenereCipherIsAmethodOfEncryptingAlphabeticTextByUsingPoly', 'h8aa0fdc145fb8089661997214cc0e685e5f86a87f30c2ca641e1dde15b01177', 'open', '126', '65', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('82e8e9e2941a06852b90c97087309b067aeb2c4c', 'Insecure Direct Object Reference Challenge 2', 'insecure.direct.object.reference.challenge.2', 'challenge', 'Insecure Direct Object References', 'insecure.direct.object.references', '1f746b87a4e3628b90b1927de23f6077abdbbb64586d3ac9485625da21921a0f', 'vc9b78627df2c032ceaf7375df1d847e47ed7abac2a4ce4cb6086646e0f313a4', 'open', '127', '65', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('6319a2e38cc4b2dc9e6d840e1b81db11ee8e5342', 'Cross Site Scripting 3', 'cross.site.scripting.3', 'challenge', 'XSS', 'xss', '6abaf491c9122db375533c04df', 'ad2628bcc79bf10dd54ee62de148ab44b7bd028009a908ce3f1b4d019886d0e', 'open', '128', '65', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('da3de2e556494a9c2fb7308a98454cf55f3a4911', 'Insecure Data Storage 2', 'insecure.data.storage.2', 'challenge', 'Mobile Insecure Data Storage', 'mobile.insecure.data.storage', 'starfish123', 'ec09515a304d2de1f552e961ab769967bdc75740ad2363803168b7907c794cd4', 'open', '129', '65', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('cb7d696bdf88899e8077063d911fc8da14176702', 'Insecure Data Storage 3', 'insecure.data.storage.3', 'challenge', 'Mobile Insecure Data Storage', 'mobile.insecure.data.storage', 'c4ptainBrunch', '11ccaf2f3b2aa4f88265b9cacb5e0ed26b11af978523e34528cf0bb9d32de851', 'open', '130', '60', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('de626470273c01388629e5a56ac6f17e2eef957b', 'Insecure Direct Object Reference Bank', 'insecure.direct.object.reference.bank', 'challenge', 'Insecure Direct Object References', 'insecure.direct.object.references', '4a1df02af317270f844b56edc0c29a09f3dd39faad3e2a23393606769b2dfa35', '1f0935baec6ba69d79cfb2eba5fdfa6ac5d77fadee08585eb98b130ec524d00c', 'open', '131', '60', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('f40b0cd5d45327c9426675313f581cf70c7c7c28', 'Unintended Data Leakage 1', 'unintended.data.leakage.1', 'challenge', 'Mobile Data Leakage', 'mobile.data.leakage', 'BagsofSalsa', '517622a535ff89f7d90674862740b48f53aad7b41390fe46c6f324fee748d136', 'open', '132', '60', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('5dda8dc216bd6a46fccaa4ed45d49404cdc1c82e', 'SQL Injection 3', 'sql.injection.3', 'challenge', 'Injection', 'injection', '9815 1547 3214 7569', 'b7327828a90da59df54b27499c0dc2e875344035e38608fcfb7c1ab8924923f6', 'open', '135', '70', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('94cd2de560d89ef59fc450ecc647ff4d4a55c15d', 'CSRF 2', 'csrf.2', 'challenge', 'CSRF', 'csrf', '45309dbaf8eaf6d1a5f1ecb1bf1b6be368a6542d3da35b9bf0224b88408dc001', 'z311736498a13604705d608fb3171ebf49bc18753b0ec34b8dff5e4f9147eb5e', 'open', '136', '70', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('5ca9115f3279b9b9f3308eb6a59a4fcd374846d6', 'CSRF 3', 'csrf.3', 'challenge', 'CSRF', 'csrf', '6bdbe1901cbe2e2749f347efb9ec2be820cc9396db236970e384604d2d55b62a', 'z6b2f5ebbe112dd09a6c430a167415820adc5633256a7b44a7d1e262db105e3c', 'open', '137', '70', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('a3f7ffd0f9c3d15564428d4df0b91bd927e4e5e4', 'Client Side Injection 1', 'client.side.injection.1', 'challenge', 'Mobile Injection', 'mobile.injection', 'SourHatsAndAngryCats', '8855c8bb9df4446a546414562eda550520e29f7a82400a317c579eb3a5a0a8ef', 'open', '138', '70', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('cfbf7b915ee56508ad46ab79878f37fd9afe0d27', 'CSRF 4', 'csrf.4', 'challenge', 'CSRF', 'csrf', 'bb78f73c7efefec25e518c3a91d50d789b689c4515b453b6140a2e4e1823d203', '84118752e6cd78fecc3563ba2873d944aacb7b72f28693a23f9949ac310648b5', 'open', '139', '70', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('1e3c02ad49fa9a9e396a3b268d7da8f0b647d8f9', 'Unintended Data Leakage 2', 'unintended.data.leakage.2', 'challenge', 'Mobile Data Leakage', 'mobile.data.leakage', '627884736748', '85ceae7ec397c8f4448be51c33a634194bf5da440282227c15954bbdfb54f0c7', 'open', '140', '70', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('fcc1918e0a23b8420e173cf8029876cb887408d3', 'CSRF JSON', 'csrf.json', 'challenge', 'CSRF', 'csrf', 'f57f1377bd847a370d42e1410bfe48c9a3484e78d50e83f851b634fe77d41a6e', '2e0981dcb8278a57dcfaae3b8da0c78d5a70c2d38ea9d8b3e14db3aea01afcbb', 'open', '141', '70', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('ced925f8357a17cfe3225c6236df0f681b2447c4', 'Session Management Challenge 4', 'session.management.challenge.4', 'challenge', 'Session Management', 'session.management', '238a43b12dde07f39d14599a780ae90f87a23e', 'ec43ae137b8bf7abb9c85a87cf95c23f7fadcf08a092e05620c9968bd60fcba6', 'open', '145', '75', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('182f519ef2add981c77a584380f41875edc65a56', 'Cross Site Scripting 4', 'cross.site.scripting.4', 'challenge', 'XSS', 'xss', '515e05137e023dd7828adc03f639c8b13752fbdffab2353ccec', '06f81ca93f26236112f8e31f32939bd496ffe8c9f7b564bce32bd5e3a8c2f751', 'open', '146', '75', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('e0ba96bb4c8d4cd2e1ff0a10a0c82b5362edf998', 'SQL Injection 4', 'sql.injection.4', 'challenge', 'Injection', 'injection', 'd316e80045d50bdf8ed49d48f130b4acf4a878c82faef34daff8eb1b98763b6f', '1feccf2205b4c5ddf743630b46aece3784d61adc56498f7603ccd7cb8ae92629', 'open', '147', '75', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('b3cfd5890649e6815a1c7107cc41d17c82826cfa', 'Insecure Cryptographic Storage Challenge 3', 'insecure.cryptographic.storage.challenge.3', 'challenge', 'Insecure Cryptographic Storage', 'insecure.cryptographic.storage', 'THISISTHESECURITYSHEPHERDABCENCRYPTIONKEY', '2da053b4afb1530a500120a49a14d422ea56705a7e3fc405a77bc269948ccae1', 'open', '148', '75', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('63bc4811a2e72a7c833962e5d47a41251cd90de3', 'Broken Crypto 2', 'broken.crypto.2', 'challenge', 'Mobile Broken Crypto', 'mobile.broken.crypto', 'DancingRobotChilliSauce', 'fb5c9ce0f5539b737e534fd317befff7427f6610ed626dfd43abf35295f106bc', 'open', '149', '75', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('e635fce334aa61fdaa459c21c286d6332eddcdd3', 'Client Side Injection 2', 'client.side.injection.2', 'challenge', 'Mobile Injection', 'mobile.injection', 'BurpingChimneys', 'cfe68711def42bb0b201467b859322dd2750f633246842280dc68c858d208425', 'open', '155', '80', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('0a37cb9296ff3763f7f3a45ff313bce47afa9384', 'CSRF 5', 'csrf.5', 'challenge', 'CSRF', 'csrf', '8f34078ef3e53f619618d9def1ede8a6a9117c77c2fad22f76bba633da83e6d4', '70b96195472adf3bf347cbc37c34489287969d5ba504ac2439915184d6e5dc49', 'open', '156', '80', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('3b14ca3c8f9b90c9b2c8cd1fba9fa67add1272a3', 'Poor Data Validation 2', 'poor.data.validation.2', 'challenge', 'Poor Data Validation', 'poor.data.validation', '05adf1e4afeb5550faf7edbec99170b40e79168ecb3a5da19943f05a3fe08c8e', '20e8c4bb50180fed9c1c8d1bf6af5eac154e97d3ce97e43257c76e73e3bbe5d5', 'open', '157', '80', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('ba6e65e4881c8499b5e53eb33b5be6b5d0f1fb2c', 'Poor Authentication 1', 'poor.authentication.1', 'challenge', 'Mobile Poor Authentication', 'mobile.poor.authentication', 'MegaKillerExtremeCheese', 'efa08298fc6a4add4b9a4bbdbbbb18ac934667971fa275bd7d234589bd8a8467', 'open', '160', '60', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('c7ac1e05faa2d4b1016cfcc726e0689419662784', 'Failure to Restrict URL Access 2', 'failure.to.restrict.url.access.2', 'challenge', 'Failure to Restrict URL Access', 'failure.to.restrict.url.access', '40b675e3d404c52b36abe31d05842b283975ec62e8', '278fa30ee727b74b9a2522a5ca3bf993087de5a0ac72adff216002abf79146fa', 'open', '165', '85', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('fccf8e4d5372ee5a73af5f862dc810545d19b176', 'Cross Site Scripting 5', 'cross.site.scripting.5', 'challenge', 'XSS', 'xss', '7d7cc278c30cca985ab027e9f9e09e2f759e5a3d1f63293', 'f37d45f597832cdc6e91358dca3f53039d4489c94df2ee280d6203b389dd5671', 'open', '166', '85', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('064e28ea4b2f7708b8cb4495d9db1a5e05decdb8', 'Poor Authentication 2', 'poor.authentication.2','challenge', 'Mobile Poor Authentication', 'mobile.poor.authentication', 'MoreRobotsNotEnoughNuts', '808d8372ec7bc7e37e8e3b30d313cb47763926065a4623b27b24cc537fee72a7', 'open', '173', '70', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('a84bbf8737a9ca749d81d5226fc87e0c828138ee', 'SQL Injection 5', 'sql.injection.5', 'challenge', 'Injection', 'injection', '343f2e424d5d7a2eff7f9ee5a5a72fd97d5a19ef7bff3ef2953e033ea32dd7ee', '8edf0a8ed891e6fef1b650935a6c46b03379a0eebab36afcd1d9076f65d4ce62', 'open', '175', '90', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('04a5bd8656fdeceac26e21ef6b04b90eaafbd7d5', 'CSRF 6', 'csrf.6', 'challenge', 'CSRF', 'csrf', 'df611f54325786d42e6deae8bbd0b9d21cf2c9282ec6de4e04166abe2792ac00', '2fff41105149e507c75b5a54e558470469d7024929cf78d570cd16c03bee3569', 'open', '176', '90', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('dc89383763c68cba0aaa1c6f3fd4c17e9d49a805', 'SQL Injection Stored Procedure', 'sql.injection.stored.procedure', 'challenge', 'Injection', 'injection', 'd9c5757c1c086d02d491cbe46a941ecde5a65d523de36ac1bfed8dd4dd9994c8', '7edcbc1418f11347167dabb69fcb54137960405da2f7a90a0684f86c4d45a2e7', 'open', '177', '90', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('6a411618a05e3cef8ccb6f3d7914412d27782a88', 'Content Provider Leakage 1', 'content.provider.leakage.1', 'challenge', 'Mobile Content Provider', 'mobile.content.provider', 'BlueCupNoPartySorry', '2a845ec1943a6342956a48cdc8ca60f40036b68a810109d0b9d2a35271377980', 'open', '178', '75', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('3b1af0ad239325bf494c6e606585320b31612e72', 'Broken Crypto 3', 'broken.crypto.3', 'challenge', 'Mobile Broken Crypto', 'mobile.broken.crypto', 'ShaveTheSkies', 'f5a3f19dd44b53c6d29dda65fa90791bb312a3044b3110acb8a65d165376bf34', 'open', '180', '180', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('c6841bcc326c4bad3a23cd4fa6391eb9bdb146ed', 'Cross Site Scripting 6', 'cross.site.scripting.6', 'challenge', 'XSS', 'xss', 'c13e42171dbd41a7020852ffdd3399b63a87f5', 'd330dea1acf21886b685184ee222ea8e0a60589c3940afd6ebf433469e997caf', 'open', '185', '95', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('ad332a32a6af1f005f9c8d1e98db264eb2ae5dfe', 'SQL Injection 6', 'sql.injection.6', 'challenge', 'Injection', 'injection', '17f999a8b3fbfde54124d6e94b256a264652e5087b14622e1644c884f8a33f82', 'd0e12e91dafdba4825b261ad5221aae15d28c36c7981222eb59f7fc8d8f212a2', 'open', '186', '95', 1, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('ed732e695b85baca21d80966306a9ab5ec37477f', 'Session Management Challenge 5', 'session.management.challenge.5', 'challenge', 'Session Management', 'session.management', 'a15b8ea0b8a3374a1dedc326dfbe3dbae26', '7aed58f3a00087d56c844ed9474c671f8999680556c127a19ee79fa5d7a132e1', 'open', '205', '110', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('adc845f9624716eefabcc90d172bab4096fa2ac4', 'Failure to Restrict URL Access 3', 'failure.to.restrict.url.access.3', 'challenge', 'Failure to Restrict URL Access', 'failure.to.restrict.url.access', '8c1dbfdc7cad35a116535f76f21e448c6c7c0ebc395be2be80e5690e01adec18', 'e40333fc2c40b8e0169e433366350f55c77b82878329570efa894838980de5b4', 'open', '206', '110', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('9294ba32bdbd680e3260a0315cd98bf6ce8b69bd', 'Session Management Challenge 6', 'session.management.challenge.6', 'challenge', 'Session Management', 'session.management', 'bb0eb566322d6b1f1dff388f5eee9929f6f1f9f5cac9eed266ef6e5053fe08e6', 'b5e1020e3742cf2c0880d4098146c4dde25ebd8ceab51807bad88ff47c316ece', 'open', '207', '110', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('6158a695f20f9286d5f12ff3f4d42678f4a9740c', 'Security Misconfig Cookie Flag', 'security.misconfig.cookie.flag', 'challenge', 'Security Misconfigurations', 'security.misconfigurations', '92755de2ebb012e689caf8bfec629b1e237d23438427499b6bf0d7933f1b8215', 'c4285bbc6734a10897d672c1ed3dd9417e0530a4e0186c27699f54637c7fb5d4', 'open', '208', '110', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('368491877a0318e9a774ba5d648c33cb0165ba1e', 'Session Management Challenge 7', 'session.management.challenge.7', 'challenge', 'Session Management', 'session.management', '9042eeaa8455f71deea31a5a32ae51e71477b1581c3612972902206ac51bb621', '269d55bc0e0ff635dcaeec8533085e5eae5d25e8646dcd4b05009353c9cf9c80', 'open', '209', '110', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('64070f5aec0593962a29a141110b9239d73cd7b3', 'SQL Injection 7', 'sql.injection.7', 'challenge', 'Injection', 'injection', '4637cae3d9b961fdff880d6d5ce4f69e91fe23db0aae7dcd4038e20ed8a287dc', '8c2dd7e9818e5c6a9f8562feefa002dc0e455f0e92c8a46ab0cf519b1547eced', 'open', '210', '110', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('145111e80400e4fd48bd3aa5aca382e9c5640793', 'Insecure Cryptographic Storage Challenge 4', 'insecure.cryptographic.storage.challenge.4', 'challenge', 'Insecure Cryptographic Storage', 'insecure.cryptographic.storage', '50980917266ce6ec07471f49b1a046ca6a5034eb9261fb44c3ffc4b16931191c', 'b927fc4d8c9f70a78f8b6fc46a0cc18533a88b2363054a1f391fe855954d12f9', 'open', '211', '115', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('7153290d128cfdef5f40742dbaeb129a36ac2340', 'Session Management Challenge 8', 'session.management.challenge.8', 'challenge', 'Session Management', 'session.management', '11d84b0ad628bb6e99e0640ff1791a29a1938609829ef5bdccee92b2bccd2bcd', '714d8601c303bbef8b5cabab60b1060ac41f0d96f53b6ea54705bb1ea4316334', 'open', '215', '115', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('853c98bd070fe0d31f1ec8b4f2ada9d7fd1784c5', 'CSRF 7', 'csrf.7', 'challenge', 'CSRF', 'csrf', '849e1efbb0c1e870d17d32a3e1b18a8836514619146521fbec6623fce67b73e8', '7d79ea2b2a82543d480a63e55ebb8fef3209c5d648b54d1276813cd072815df3', 'open', '235', '120', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('f02ce6bcd0a822d245433533997eaf44379065f4', 'Insecure Cryptographic Storage Home Made Key', 'insecure.cryptographic.storage.home.made.key', 'challenge', 'Insecure Cryptographic Storage', 'insecure.cryptographic.storage', '59A8D9A8020C61B3D76A600F94AJCECEABEDD44DF26874BD070BD07D', '9e5ed059b23632c8801d95621fa52071b2eb211d8c044dde6d2f4b89874a7bc4', 'open', '240', '140', 0, 0);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('df2ac757cc135dcb8ce5ea01f677c74f04b446d6', 'XXE Injection', 'xxe.lessons', 'lesson', 'Injection', 'injection', 'c8c232cd8e3abdfea3fcef24379415a65e00ac197af09e82602e231aa3031879', '57dda1bf9a2ca1c34e04f815491ef40836d9b710179cd19754ec5b3c31f27d1a', 'closed', '55', '30', 1, 1);
+INSERT INTO modules (`moduleId`, `moduleName`, `moduleNameLangPointer`, `moduleType`, `moduleCategory`, `moduleCategoryLangPointer`, `moduleResult`, `moduleHash`, `moduleStatus`, `incrementalRank`, `scoreValue`, `hardcodedKey`, `isUnsafe`) VALUES ('08b3dffd4b837ebe53d52e53b5bbbabf4a4ca9ae', 'XXE Injection 1', 'xxe.injection.1', 'challenge', 'Injection', 'injection', '1016d6dce9f715e9eab4f3a884b3b316cfbba8fb4023c19f34c62bd936d5695b', 'ac8f3f6224b1ea3fb8a0f017aadd0d84013ea2c80e232c980e54dd753700123e', 'closed', '60', '40', 1, 1);
+COMMIT;
+
+-- -----------------------------------------------------
+SELECT "Data for table cheatsheet" FROM DUAL;
+-- -----------------------------------------------------
+SET AUTOCOMMIT=0;
+USE `core`;
+COMMIT;
+
+COMMIT;
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('1ed105033900e462b26ca0685b00d98f59efcd93', '0dbea4cb5811fff0527184f99bd5034ca9286f11', '2012-02-10 10:11:53', '0dbea4cb5811fff0527184f99bd5034ca9286f11.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('286ac1acdd084193e940e6f56df5457ff05a9fe1', '453d22238401e0bf6f1ff5d45996407e98e45b07', '2012-02-10 10:11:53', '453d22238401e0bf6f1ff5d45996407e98e45b07.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('44a6af94f6f7a16cc92d84a936cb5c7825967b47', 'cd7f70faed73d2457219b951e714ebe5775515d8', '2012-02-10 10:11:53', 'cd7f70faed73d2457219b951e714ebe5775515d8.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('5487f2bf98beeb3aea66941ae8257a5e0bec38bd', '2dc909fd89c2b03059b1512e7b54ce5d1aaa4bb4', '2012-02-10 10:11:53', '2dc909fd89c2b03059b1512e7b54ce5d1aaa4bb4.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('5eccb1b8b1c033bba8ef928089808751cbe6e1f8', '94cd2de560d89ef59fc450ecc647ff4d4a55c15d', '2012-02-10 10:11:53', '94cd2de560d89ef59fc450ecc647ff4d4a55c15d.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('6924e936f811e174f206d5432cf7510a270a18fa', 'b70a84f159876bb9885b6e0087d22f0a52abbfcf', '2012-02-10 10:11:53', 'b70a84f159876bb9885b6e0087d22f0a52abbfcf.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('7382ff2f7ee416bf0d37961ec54de32c502351de', 'a4bf43f2ba5ced041b03d0b3f9fa3541c520d65d', '2012-02-10 10:11:53', 'a4bf43f2ba5ced041b03d0b3f9fa3541c520d65d.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('776ef847e16dde4b1d65a476918d2157f62f8c91', '5ca9115f3279b9b9f3308eb6a59a4fcd374846d6', '2012-02-10 10:11:53', '5ca9115f3279b9b9f3308eb6a59a4fcd374846d6.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('82c207a4e07cbfc54faec884be6db0524e74829e', '891a0208a95f1791287be721a4b851d4c584880a', '2012-02-10 10:11:53', '891a0208a95f1791287be721a4b851d4c584880a.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('860e5ed692c956c2ae6c4ba20c95313d9f5b0383', 'b6432a6b5022cb044e9946315c44ab262ab59e88', '2012-02-10 10:11:53', 'b6432a6b5022cb044e9946315c44ab262ab59e88.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('945b7dcdef1a36ded2ab008422396f8ba51c0630', 'd4e2c37d8f1298fcaf4edcea7292cb76e9eab09b', '2012-02-10 10:11:53', 'd4e2c37d8f1298fcaf4edcea7292cb76e9eab09b.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('97f946ed0bbda4f85e472321a256eacf2293239d', '20e755179a5840be5503d42bb3711716235005ea', '2012-02-10 10:11:53', '20e755179a5840be5503d42bb3711716235005ea.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('af5959a242047ee87f728b87570a4e9ed9417e5e', '544aa22d3dd16a8232b093848a6523b0712b23da', '2012-02-10 10:11:53', '544aa22d3dd16a8232b093848a6523b0712b23da.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('b8515347017439da4216c6f8d984326eb21652d0', '52c5394cdedfb2e95b3ad8b92d0d6c9d1370ea9a', '2012-02-10 10:11:53', '52c5394cdedfb2e95b3ad8b92d0d6c9d1370ea9a.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('b921c6b7dc82648f0a0d07513f3eecb39b3ed064', 'ca8233e0398ecfa76f9e05a49d49f4a7ba390d07', '2012-02-10 10:11:53', 'ca8233e0398ecfa76f9e05a49d49f4a7ba390d07.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('ba4e0a2727561c41286aa850b89022c09e088b67', '0e9e650ffca2d1fe516c5d7b0ce5c32de9e53d1e', '2012-02-10 10:11:53', '0e9e650ffca2d1fe516c5d7b0ce5c32de9e53d1e.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('bb94a8412d7bb95f84c73afa420ca57fbc917912', '9533e21e285621a676bec58fc089065dec1f59f5', '2012-02-10 10:11:53', '9533e21e285621a676bec58fc089065dec1f59f5.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('c0b869ff8a4cd1f388e5e6bdd6525d176175c296', '408610f220b4f71f7261207a17055acbffb8a747', '2012-02-10 10:11:53', '408610f220b4f71f7261207a17055acbffb8a747.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('c0ed3f81fc615f28a39ed2c23555cea074e513f0', '0709410108f91314fb6f7721df9b891351eb2fcc', '2012-02-10 10:11:53', '0709410108f91314fb6f7721df9b891351eb2fcc.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('d0a0742494656c79767864b2898247df4f37b728', '6319a2e38cc4b2dc9e6d840e1b81db11ee8e5342', '2012-02-10 10:11:53', '6319a2e38cc4b2dc9e6d840e1b81db11ee8e5342.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('d51277769f9452b6508a3a22d9f52bea3b0ff84d', 'f771a10efb42a79a9dba262fd2be2e44bf40b66d', '2012-02-10 10:11:53', 'f771a10efb42a79a9dba262fd2be2e44bf40b66d.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('e7e44ba680b2ab1f6958b1344c9e43931b81164a', '5dda8dc216bd6a46fccaa4ed45d49404cdc1c82e', '2012-02-10 10:11:53', '5dda8dc216bd6a46fccaa4ed45d49404cdc1c82e.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('f392e5a69475b14fbe5ae17639e174f379c0870e', '201ae6f8c55ba3f3b5881806387fbf34b15c30c2', '2012-02-10 10:11:53', '201ae6f8c55ba3f3b5881806387fbf34b15c30c2.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('6afa50948e10466e9a94c7c2b270b3f958e412c6', '82e8e9e2941a06852b90c97087309b067aeb2c4c', '2012-02-10 10:11:53', '82e8e9e2941a06852b90c97087309b067aeb2c4c.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('c424a4c7012ac39a4aef70f15f51ecc8fa209411', 'df2ac757cc135dcb8ce5ea01f677c74f04b446d6', '2020-02-11 10:11:53', 'df2ac757cc135dcb8ce5ea01f677c74f04b446d6.solution');
+INSERT INTO `core`.`cheatsheet` (`cheatSheetId`, `moduleId`, `createDate`, `solution`) VALUES ('e6ce51d31070bef895bf9763caeff78a0c7c2cc9', '08b3dffd4b837ebe53d52e53b5bbbabf4a4ca9ae', '2020-10-09 10:11:53', '08b3dffd4b837ebe53d52e53b5bbbabf4a4ca9ae.solution');
+CALL cheatSheetCreate('a84bbf8737a9ca749d81d5226fc87e0c828138ee', 'a84bbf8737a9ca749d81d5226fc87e0c828138ee.solution');
+CALL cheatSheetCreate('e0ba96bb4c8d4cd2e1ff0a10a0c82b5362edf998', 'e0ba96bb4c8d4cd2e1ff0a10a0c82b5362edf998.solution');
+CALL cheatSheetCreate('ad332a32a6af1f005f9c8d1e98db264eb2ae5dfe', 'ad332a32a6af1f005f9c8d1e98db264eb2ae5dfe.solution');
+CALL cheatSheetCreate('182f519ef2add981c77a584380f41875edc65a56', '182f519ef2add981c77a584380f41875edc65a56.solution');
+CALL cheatSheetCreate('fccf8e4d5372ee5a73af5f862dc810545d19b176', 'fccf8e4d5372ee5a73af5f862dc810545d19b176.solution');
+CALL cheatSheetCreate('0a37cb9296ff3763f7f3a45ff313bce47afa9384', '0a37cb9296ff3763f7f3a45ff313bce47afa9384.solution');
+CALL cheatSheetCreate('04a5bd8656fdeceac26e21ef6b04b90eaafbd7d5', '04a5bd8656fdeceac26e21ef6b04b90eaafbd7d5.solution');
+CALL cheatSheetCreate('853c98bd070fe0d31f1ec8b4f2ada9d7fd1784c5', '853c98bd070fe0d31f1ec8b4f2ada9d7fd1784c5.solution');
+CALL cheatSheetCreate('3d5b46abc6865ba09aaff98a8278a5f5e339abff', '3d5b46abc6865ba09aaff98a8278a5f5e339abff.solution');
+CALL cheatSheetCreate('c7ac1e05faa2d4b1016cfcc726e0689419662784', 'c7ac1e05faa2d4b1016cfcc726e0689419662784.solution');
+CALL cheatSheetCreate('b3cfd5890649e6815a1c7107cc41d17c82826cfa', 'b3cfd5890649e6815a1c7107cc41d17c82826cfa.solution');
+CALL cheatSheetCreate('ced925f8357a17cfe3225c6236df0f681b2447c4', 'ced925f8357a17cfe3225c6236df0f681b2447c4.solution');
+CALL cheatSheetCreate('c6841bcc326c4bad3a23cd4fa6391eb9bdb146ed', 'c6841bcc326c4bad3a23cd4fa6391eb9bdb146ed.solution');
+CALL cheatsheetCreate('53a53a66cb3bf3e4c665c442425ca90e29536edd', '53a53a66cb3bf3e4c665c442425ca90e29536edd.solution');
+CALL cheatsheetCreate('307f78f18fd6a87e50ed6705231a9f24cd582574', '307f78f18fd6a87e50ed6705231a9f24cd582574.solution');
+CALL cheatsheetCreate('da3de2e556494a9c2fb7308a98454cf55f3a4911', 'da3de2e556494a9c2fb7308a98454cf55f3a4911.solution');
+CALL cheatsheetCreate('335440fef02d19259254ed88293b62f31cccdd41', '335440fef02d19259254ed88293b62f31cccdd41.solution');
+CALL cheatsheetCreate('a3f7ffd0f9c3d15564428d4df0b91bd927e4e5e4', 'a3f7ffd0f9c3d15564428d4df0b91bd927e4e5e4.solution');
+CALL cheatsheetCreate('e635fce334aa61fdaa459c21c286d6332eddcdd3', 'e635fce334aa61fdaa459c21c286d6332eddcdd3.solution');
+CALL cheatsheetCreate('ef6496892b8e48ac2f349cdd7c8ecb889fc982af', 'ef6496892b8e48ac2f349cdd7c8ecb889fc982af.solution');
+CALL cheatsheetCreate('3f010a976bcbd6a37fba4a10e4a057acc80bdc09', '3f010a976bcbd6a37fba4a10e4a057acc80bdc09.solution');
+CALL cheatsheetCreate('63bc4811a2e72a7c833962e5d47a41251cd90de3', '63bc4811a2e72a7c833962e5d47a41251cd90de3.solution');
+CALL cheatsheetCreate('2ab09c0c18470ae5f87d219d019a1f603e66f944', '2ab09c0c18470ae5f87d219d019a1f603e66f944.solution');
+CALL cheatsheetCreate('f16bf2ab1c1bf400d36330f91e9ac6045edcd003', 'f16bf2ab1c1bf400d36330f91e9ac6045edcd003.solution');
+CALL cheatsheetCreate('9e46e3c8bde42dc16b9131c0547eedbf265e8f16', '9e46e3c8bde42dc16b9131c0547eedbf265e8f16.solution');
+CALL cheatsheetCreate('1506f22cd73d14d8a73e0ee32006f35d4f234799', '1506f22cd73d14d8a73e0ee32006f35d4f234799.solution');
+CALL cheatSheetCreate('ed732e695b85baca21d80966306a9ab5ec37477f', 'ed732e695b85baca21d80966306a9ab5ec37477f.solution');
+CALL cheatSheetCreate('cfbf7b915ee56508ad46ab79878f37fd9afe0d27', 'cfbf7b915ee56508ad46ab79878f37fd9afe0d27.solution');
+CALL cheatSheetCreate('9294ba32bdbd680e3260a0315cd98bf6ce8b69bd', '9294ba32bdbd680e3260a0315cd98bf6ce8b69bd.solution');
+CALL cheatSheetCreate('7153290d128cfdef5f40742dbaeb129a36ac2340', '7153290d128cfdef5f40742dbaeb129a36ac2340.solution');
+CALL cheatSheetCreate('145111e80400e4fd48bd3aa5aca382e9c5640793', '145111e80400e4fd48bd3aa5aca382e9c5640793.solution');
+CALL cheatSheetCreate('adc845f9624716eefabcc90d172bab4096fa2ac4', 'adc845f9624716eefabcc90d172bab4096fa2ac4.solution');
+CALL cheatSheetCreate('64070f5aec0593962a29a141110b9239d73cd7b3', '64070f5aec0593962a29a141110b9239d73cd7b3.solution');
+CALL cheatSheetCreate('1e3c02ad49fa9a9e396a3b268d7da8f0b647d8f9', '1e3c02ad49fa9a9e396a3b268d7da8f0b647d8f9.solution');
+CALL cheatSheetCreate('f40b0cd5d45327c9426675313f581cf70c7c7c28', 'f40b0cd5d45327c9426675313f581cf70c7c7c28.solution');
+CALL cheatSheetCreate('ba6e65e4881c8499b5e53eb33b5be6b5d0f1fb2c', 'ba6e65e4881c8499b5e53eb33b5be6b5d0f1fb2c.solution');
+CALL cheatSheetCreate('52885a3db5b09adc24f38bc453fe348f850649b3', '52885a3db5b09adc24f38bc453fe348f850649b3.solution');
+CALL cheatSheetCreate('3b1af0ad239325bf494c6e606585320b31612e72', '3b1af0ad239325bf494c6e606585320b31612e72.solution');
+CALL cheatSheetCreate('0cdd1549e7c74084d7059ce748b93ef657b44457', '0cdd1549e7c74084d7059ce748b93ef657b44457.solution');
+CALL cheatSheetCreate('368491877a0318e9a774ba5d648c33cb0165ba1e', '368491877a0318e9a774ba5d648c33cb0165ba1e.solution');
+CALL cheatSheetCreate('6be5de81223cc1b38b6e427cc44f8b6a28d2bc96', '6be5de81223cc1b38b6e427cc44f8b6a28d2bc96.solution');
+CALL cheatSheetCreate('3b14ca3c8f9b90c9b2c8cd1fba9fa67add1272a3', '3b14ca3c8f9b90c9b2c8cd1fba9fa67add1272a3.solution');
+CALL cheatSheetCreate('b9d82aa7b46ddaddb6acfe470452a8362136a31e', 'b9d82aa7b46ddaddb6acfe470452a8362136a31e.solution');
+CALL cheatSheetCreate('bf847c4a8153d487d6ec36f4fca9b77749597c64', 'bf847c4a8153d487d6ec36f4fca9b77749597c64.solution');
+CALL cheatSheetCreate('fcc1918e0a23b8420e173cf8029876cb887408d3', 'fcc1918e0a23b8420e173cf8029876cb887408d3.solution');
+CALL cheatSheetCreate('6158a695f20f9286d5f12ff3f4d42678f4a9740c', '6158a695f20f9286d5f12ff3f4d42678f4a9740c.solution');
+CALL cheatSheetCreate('de626470273c01388629e5a56ac6f17e2eef957b', 'de626470273c01388629e5a56ac6f17e2eef957b.solution');
+CALL cheatSheetCreate('dc89383763c68cba0aaa1c6f3fd4c17e9d49a805', 'dc89383763c68cba0aaa1c6f3fd4c17e9d49a805.solution');
+CALL cheatSheetCreate('5b461ebe2e5e2797740cb3e9c7e3f93449a93e3a', '5b461ebe2e5e2797740cb3e9c7e3f93449a93e3a.solution');
+CALL cheatSheetCreate('c685f8102ae0128c2ab342df64699bb8209a0839', 'c685f8102ae0128c2ab342df64699bb8209a0839.solution');
+CALL cheatSheetCreate('d7eaeaa1cc4f218abd86d14eefa183a0f8eb6298', 'd7eaeaa1cc4f218abd86d14eefa183a0f8eb6298.solution');
+CALL cheatSheetCreate('5ca9115f3279b9b9f3308eb6a59a4fcd374846d6', '5ca9115f3279b9b9f3308eb6a59a4fcd374846d6.solution');
+CALL cheatSheetCreate('6f5db377c28da4179bca1a43ede8d6bcf7bd322e', '6f5db377c28da4179bca1a43ede8d6bcf7bd322e.solution');
+CALL cheatSheetCreate('f02ce6bcd0a822d245433533997eaf44379065f4', 'f02ce6bcd0a822d245433533997eaf44379065f4.solution');
+CALL cheatSheetCreate('df2ac757cc135dcb8ce5ea01f677c74f04b446d6', 'df2ac757cc135dcb8ce5ea01f677c74f04b446d6.solution');
+CALL cheatSheetCreate('08b3dffd4b837ebe53d52e53b5bbbabf4a4ca9ae', '08b3dffd4b837ebe53d52e53b5bbbabf4a4ca9ae.solution');
+
+COMMIT;
+
+-- Default admin user
+-- Use password shepherd-admin
+call userCreate(null, 'admin', '$argon2i$v=19$m=65535,t=10,p=1$Z05BaG5SdTZaQ3l2OUJvbA$SN7TyTDF/gd07wi7T96RK8pYgQ', 'admin', null, 'admin@securityShepherd.org', 'login', false, false);
+
+-- Generate a user account
+call userCreate(null, '<%= @unix_username %>', '$argon2i$v=19$m=65536,t=10,p=1$7oxgR8QkdOd4tsHFieFKrw$eOy0TCxhY1bQIAbLQcLr9Sz2+4q9DhPTz1frsytgtTk', 'player', null, '<%= @unix_username %> @securityShepherd.org', 'login', true, false);
+
+-- Enable backup script
+
+SELECT "Creating BackUp Schema" FROM DUAL;
+
+DROP DATABASE IF EXISTS backup;
+CREATE DATABASE backup;
+
+SET GLOBAL event_scheduler = ON;
+SET @@global.event_scheduler = ON;
+SET GLOBAL event_scheduler = 1;
+SET @@global.event_scheduler = 1;
+
+USE core;
+DELIMITER $$
+
+drop event IF EXISTS update_status;
+
+create event update_status
+on schedule every 1 minute
+do
+
+BEGIN
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
+
+drop table IF EXISTS `backup`.`users`;
+drop table IF EXISTS `backup`.`class`;
+drop table IF EXISTS `backup`.`modules`;
+drop table IF EXISTS `backup`.`results`;
+drop table IF EXISTS `backup`.`cheatsheet`;
+drop table IF EXISTS `backup`.`sequence`;
+-- -----------------------------------------------------
+-- Table `core`.`class`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `backup`.`class` (
+ `classId` VARCHAR(64) NOT NULL ,
+ `className` VARCHAR(32) NOT NULL ,
+ `classYear` VARCHAR(5) NOT NULL ,
+ PRIMARY KEY (`classId`) )
+ENGINE = InnoDB;
+
+-- -----------------------------------------------------
+-- Table `core`.`users`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `backup`.`users` (
+ `userId` VARCHAR(64) NOT NULL ,
+ `classId` VARCHAR(64) NULL ,
+ `userName` VARCHAR(32) NOT NULL ,
+ `userPass` VARCHAR(191) NOT NULL ,
+ `userRole` VARCHAR(32) NOT NULL ,
+ `badLoginCount` INT NOT NULL DEFAULT 0 ,
+ `suspendedUntil` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' ,
+ `userAddress` VARCHAR(128) NULL ,
+ `tempPassword` TINYINT(1) NULL DEFAULT FALSE ,
+ `userScore` INT NOT NULL DEFAULT 0 ,
+ PRIMARY KEY (`userId`) ,
+ INDEX `classId` (`classId` ASC) ,
+ UNIQUE INDEX `userName_UNIQUE` (`userName` ASC) ,
+ CONSTRAINT `classId`
+ FOREIGN KEY (`classId` )
+ REFERENCES `backup`.`class` (`classId` )
+ ON DELETE CASCADE
+ ON UPDATE CASCADE)
+ENGINE = InnoDB;
+
+-- -----------------------------------------------------
+-- Table `core`.`modules`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `backup`.`modules` (
+ `moduleId` VARCHAR(64) NOT NULL ,
+ `moduleName` VARCHAR(64) NOT NULL ,
+ `moduleType` VARCHAR(16) NOT NULL ,
+ `moduleCategory` VARCHAR(64) NULL ,
+ `moduleResult` VARCHAR(191) NULL ,
+ `moduleHash` VARCHAR(191) NULL ,
+ `incrementalRank` INT NULL ,
+ `scoreValue` INT NOT NULL DEFAULT 50 ,
+ `scoreBonus` INT NOT NULL DEFAULT 5 ,
+ PRIMARY KEY (`moduleId`) )
+ENGINE = InnoDB;
+
+
+-- -----------------------------------------------------
+-- Table `core`.`results`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `backup`.`results` (
+ `userId` VARCHAR(64) NOT NULL ,
+ `moduleId` VARCHAR(64) NOT NULL ,
+ `startTime` DATETIME NOT NULL ,
+ `finishTime` DATETIME NULL ,
+ `csrfCount` INT NULL DEFAULT 0 ,
+ `resultSubmission` LONGTEXT NULL ,
+ `knowledgeBefore` INT NULL ,
+ `knowledgeAfter` INT NULL ,
+ `difficulty` INT NULL ,
+ PRIMARY KEY (`userId`, `moduleId`) ,
+ INDEX `fk_Results_Modules1` (`moduleId` ASC) ,
+ CONSTRAINT `fk_Results_users1`
+ FOREIGN KEY (`userId` )
+ REFERENCES `backup`.`users` (`userId` )
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION,
+ CONSTRAINT `fk_Results_Modules1`
+ FOREIGN KEY (`moduleId` )
+ REFERENCES `backup`.`modules` (`moduleId` )
+ ON DELETE CASCADE
+ ON UPDATE CASCADE)
+ENGINE = InnoDB;
+
+
+-- -----------------------------------------------------
+-- Table `core`.`cheatsheet`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `backup`.`cheatsheet` (
+ `cheatSheetId` VARCHAR(64) NOT NULL ,
+ `moduleId` VARCHAR(64) NOT NULL ,
+ `createDate` DATETIME NOT NULL ,
+ `solution` LONGTEXT NOT NULL ,
+ PRIMARY KEY (`cheatSheetId`, `moduleId`) ,
+ INDEX `fk_CheatSheet_Modules1` (`moduleId` ASC) ,
+ CONSTRAINT `fk_CheatSheet_Modules1`
+ FOREIGN KEY (`moduleId` )
+ REFERENCES `backup`.`modules` (`moduleId` )
+ ON DELETE CASCADE
+ ON UPDATE CASCADE)
+ENGINE = InnoDB;
+
+
+-- -----------------------------------------------------
+-- Table `core`.`sequence`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `backup`.`sequence` (
+ `tableName` VARCHAR(32) NOT NULL ,
+ `currVal` BIGINT(20) NOT NULL DEFAULT 282475249 ,
+ PRIMARY KEY (`tableName`) )
+ENGINE = InnoDB;
+
+
+
+Insert into `backup`.`class` (Select * from `core`.`class`);
+Insert into `backup`.`users` (Select * from `core`.`users`);
+Insert into `backup`.`modules` (Select * from `core`.`modules`);
+Insert into `backup`.`results` (Select * from `core`.`results`);
+Insert into `backup`.`cheatsheet` (Select * from `core`.`cheatsheet`);
+Insert into `backup`.`sequence` (Select * from `core`.`sequence`);
+
+END
+
+ $$
+DELIMITER ;
+;
diff --git a/modules/vulnerabilities/unix/web_training/security_shepherd/templates/flags.erb b/modules/vulnerabilities/unix/web_training/security_shepherd/templates/flags.erb
new file mode 100644
index 000000000..97f8cfc04
--- /dev/null
+++ b/modules/vulnerabilities/unix/web_training/security_shepherd/templates/flags.erb
@@ -0,0 +1,4 @@
+<% @flag_store.each do |flag| -%>
+<%= flag %>
+<% end -%>
+
diff --git a/scenarios/examples/vulnerability_examples/shepherd.xml b/scenarios/examples/vulnerability_examples/shepherd.xml
new file mode 100644
index 000000000..73ddadf1b
--- /dev/null
+++ b/scenarios/examples/vulnerability_examples/shepherd.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+ shepherd
+
+
+
+
+
+
+ SQL
+ CSRF
+
+
+
+
+
+
+ 10
+
+
+
+
+
+
+
+
+
+ user1
+
+
+ password
+
+
+ true
+
+
+
+
+
+
+
+
+
\ No newline at end of file