Miscellaneous bug fixes
divide by zero, inaccurate discount and totals, reflection of user input git-svn-id: http://webgoat.googlecode.com/svn/trunk/webgoat@273 4033779f-a91e-0410-96ef-6bf7bf53c507
This commit is contained in:
52
main/project/WebContent/WEB-INF/Copy of webgoat.properties
Normal file
52
main/project/WebContent/WEB-INF/Copy of webgoat.properties
Normal file
@ -0,0 +1,52 @@
|
||||
category.General.ranking=11
|
||||
lesson.HttpBasics.ranking=10
|
||||
lesson.ThreadSafetyProblem.ranking=20
|
||||
|
||||
category.Broken\ Authentication\ and\ Session\ Management.ranking=21
|
||||
lesson.BasicAuthentication.ranking=10
|
||||
lesson.WeakAuthenticationCookie.ranking=20
|
||||
|
||||
category.Broken\ Access\ Control.ranking=31
|
||||
lesson.AccessControlMatrix.ranking=10
|
||||
lesson.PathBasedAccessControl.ranking=20
|
||||
lesson.RoleBasedAccessControl.hidden=true
|
||||
|
||||
category.Cross-Site\ Scripting\ (XSS).ranking=41
|
||||
lesson.StoredXss.ranking=10
|
||||
lesson.ReflectedXSS.ranking=20
|
||||
lesson.CrossSiteScripting.hidden=true
|
||||
|
||||
category.Unvalidated\ Parameters.ranking=51
|
||||
lesson.HiddenFieldTampering.ranking=10
|
||||
lesson.JavaScriptValidation.ranking=20
|
||||
lesson.UncheckedEmail.ranking=30
|
||||
|
||||
category.Insecure\ Storage.ranking=61
|
||||
lesson.Encoding.ranking=10
|
||||
|
||||
category.Injection\ Flaws.ranking=71
|
||||
lesson.SqlNumericInjection.ranking=10
|
||||
lesson.SqlStringInjection.ranking=20
|
||||
lesson.CommandInjection.ranking=30
|
||||
lesson.SQLInjection.hidden=true
|
||||
|
||||
category.Improper\ Error\ Handling.ranking=81
|
||||
lesson.FailOpenAuthentication.ranking=10
|
||||
|
||||
category.Code\ Quality.ranking=91
|
||||
lesson.HtmlClues.ranking=10
|
||||
|
||||
category.Web\ Services.category.ranking=101
|
||||
lesson.SoapRequest.ranking=10
|
||||
lesson.WSDLScanning.ranking=20
|
||||
lesson.WsSqlInjection.ranking=30
|
||||
|
||||
lesson.WeakSessionID.hidden=true
|
||||
lesson.BufferOverflow.hidden=true
|
||||
lesson.BlindSqlInjection.hidden=true
|
||||
lesson.DOS_Login.hidden=true
|
||||
lesson.ForcedBrowsing.hidden=true
|
||||
lesson.ForgotPassword.hidden=true
|
||||
lesson.ParameterInjection.hidden=true
|
||||
lesson.RemoteAdminFlaw.hidden=true
|
||||
lesson.ChallengeScreen.hidden=true
|
BIN
main/project/WebContent/WEB-INF/lib/activation.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/activation.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/axis-ant.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/axis-ant.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/axis.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/axis.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/catalina.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/catalina.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/commons-collections-3.1.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/commons-collections-3.1.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/commons-digester.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/commons-digester.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/commons-discovery-0.2.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/commons-discovery-0.2.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/commons-logging-1.0.4.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/commons-logging-1.0.4.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/dsn.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/dsn.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/ecs-1.4.2.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/ecs-1.4.2.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/hsqldb.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/hsqldb.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/imap.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/imap.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/j2h.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/j2h.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/jaxrpc.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/jaxrpc.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/jta-spec1_0_1.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/jta-spec1_0_1.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/jtds-1.2.2.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/jtds-1.2.2.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/log4j-1.2.8.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/log4j-1.2.8.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/mail.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/mail.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/mailapi.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/mailapi.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/ojdbc14.jar
Executable file
BIN
main/project/WebContent/WEB-INF/lib/ojdbc14.jar
Executable file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/pop3.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/pop3.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/saaj.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/saaj.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/smtp.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/smtp.jar
Normal file
Binary file not shown.
BIN
main/project/WebContent/WEB-INF/lib/wsdl4j-1.5.1.jar
Normal file
BIN
main/project/WebContent/WEB-INF/lib/wsdl4j-1.5.1.jar
Normal file
Binary file not shown.
69
main/project/WebContent/WEB-INF/server-config.wsdd
Normal file
69
main/project/WebContent/WEB-INF/server-config.wsdd
Normal file
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
|
||||
<globalConfiguration>
|
||||
<parameter name="sendMultiRefs" value="true"/>
|
||||
<parameter name="disablePrettyXML" value="true"/>
|
||||
<parameter name="adminPassword" value="admin"/>
|
||||
<!--
|
||||
<parameter name="attachments.Directory" value="C:\webgoat\tomcat\webapps\WebGoat\WEB-INF\attachments"/>
|
||||
-->
|
||||
<parameter name="dotNetSoapEncFix" value="true"/>
|
||||
<parameter name="enableNamespacePrefixOptimization" value="true"/>
|
||||
<parameter name="sendXMLDeclaration" value="true"/>
|
||||
<!--
|
||||
<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
|
||||
-->
|
||||
<parameter name="sendXsiTypes" value="true"/>
|
||||
<requestFlow>
|
||||
<handler type="java:org.apache.axis.handlers.JWSHandler">
|
||||
<parameter name="scope" value="session"/>
|
||||
</handler>
|
||||
<handler type="java:org.apache.axis.handlers.JWSHandler">
|
||||
<parameter name="scope" value="request"/>
|
||||
<parameter name="extension" value=".jwr"/>
|
||||
</handler>
|
||||
</requestFlow>
|
||||
</globalConfiguration>
|
||||
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
|
||||
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
|
||||
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
|
||||
<service name="WSDLScanning" provider="java:RPC">
|
||||
<parameter name="allowedMethods" value="getFirstName, getLastName, getCreditCard, getLoginCount"/>
|
||||
<parameter name="className" value="org.owasp.webgoat.lessons.WSDLScanning"/>
|
||||
</service>
|
||||
<service name="SoapRequest" provider="java:RPC">
|
||||
<parameter name="allowedMethods" value="getFirstName, getLastName, getCreditCard, getLoginCount"/>
|
||||
<parameter name="className" value="org.owasp.webgoat.lessons.SoapRequest"/>
|
||||
</service>
|
||||
<service name="AdminService" provider="java:MSG">
|
||||
<parameter name="allowedMethods" value="AdminService"/>
|
||||
<parameter name="enableRemoteAdmin" value="false"/>
|
||||
<parameter name="className" value="org.apache.axis.utils.Admin"/>
|
||||
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
|
||||
</service>
|
||||
<service name="Version" provider="java:RPC">
|
||||
<parameter name="allowedMethods" value="getVersion"/>
|
||||
<parameter name="className" value="org.apache.axis.Version"/>
|
||||
</service>
|
||||
<service name="WsSqlInjection" provider="java:RPC">
|
||||
<parameter name="allowedMethods" value="getCreditCard"/>
|
||||
<parameter name="className" value="org.owasp.webgoat.lessons.WsSqlInjection"/>
|
||||
</service>
|
||||
<transport name="http">
|
||||
<requestFlow>
|
||||
<handler type="URLMapper"/>
|
||||
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
|
||||
</requestFlow>
|
||||
<parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
|
||||
<parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
|
||||
<parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/>
|
||||
<parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>
|
||||
<parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
|
||||
<parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
|
||||
</transport>
|
||||
<transport name="local">
|
||||
<responseFlow>
|
||||
<handler type="LocalResponder"/>
|
||||
</responseFlow>
|
||||
</transport>
|
||||
</deployment>
|
344
main/project/WebContent/WEB-INF/web.xml
Executable file
344
main/project/WebContent/WEB-INF/web.xml
Executable file
@ -0,0 +1,344 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE web-app
|
||||
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
|
||||
"http://java.sun.com/dtd/web-app_2_3.dtd">
|
||||
|
||||
<web-app>
|
||||
|
||||
<!-- General description of your web application -->
|
||||
<display-name>WebGoat</display-name>
|
||||
<description>
|
||||
This web application is designed to demonstrate web
|
||||
application security flaws for the purpose of educating
|
||||
developers and security professionals about web
|
||||
application security problems. Please contact Bruce Mayhew
|
||||
(webgoat@owasp.org) if you have any questions.
|
||||
</description>
|
||||
|
||||
|
||||
|
||||
<!-- Context initialization parameters that define shared
|
||||
String constants used within your application, which
|
||||
can be customized by the system administrator who is
|
||||
installing your application. The values actually
|
||||
assigned to these parameters can be retrieved in a
|
||||
servlet or JSP page by calling:
|
||||
|
||||
String value =
|
||||
getServletContext().getInitParameter("name");
|
||||
|
||||
where "name" matches the <param-name> element of
|
||||
one of these initialization parameters.
|
||||
|
||||
You can define any number of context initialization
|
||||
parameters, including zero.
|
||||
-->
|
||||
|
||||
<context-param>
|
||||
<param-name>email</param-name>
|
||||
<param-value>WebGoat@owasp.org</param-value>
|
||||
<description>
|
||||
The EMAIL address of the administrator to whom questions
|
||||
and comments about this application should be addressed.
|
||||
</description>
|
||||
</context-param>
|
||||
|
||||
<!-- Servlet definitions for the servlets that make up
|
||||
your web application, including initialization
|
||||
parameters. With Tomcat, you can also send requests
|
||||
to servlets not listed here with a request like this:
|
||||
|
||||
http://localhost:8080/{context-path}/servlet/{classname}
|
||||
|
||||
but this usage is not guaranteed to be portable. It also
|
||||
makes relative references to images and other resources
|
||||
required by your servlet more complicated, so defining
|
||||
all of your servlets (and defining a mapping to them with
|
||||
a servlet-mapping element) is recommended.
|
||||
|
||||
Servlet initialization parameters can be retrieved in a
|
||||
servlet or JSP page by calling:
|
||||
|
||||
String value =
|
||||
getServletConfig().getInitParameter("name");
|
||||
|
||||
where "name" matches the <param-name> element of
|
||||
one of these initialization parameters.
|
||||
|
||||
You can define any number of servlets, including zero.
|
||||
-->
|
||||
|
||||
<servlet>
|
||||
<servlet-name>AxisServlet</servlet-name>
|
||||
<display-name>Apache-Axis Servlet</display-name>
|
||||
<servlet-class>
|
||||
org.apache.axis.transport.http.AxisServlet
|
||||
</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>AdminServlet</servlet-name>
|
||||
<display-name>Axis Admin Servlet</display-name>
|
||||
<servlet-class>
|
||||
org.apache.axis.transport.http.AdminServlet
|
||||
</servlet-class>
|
||||
<load-on-startup>100</load-on-startup>
|
||||
</servlet>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>SOAPMonitorService</servlet-name>
|
||||
<display-name>SOAPMonitorService</display-name>
|
||||
<servlet-class>
|
||||
org.apache.axis.monitor.SOAPMonitorService
|
||||
</servlet-class>
|
||||
<init-param>
|
||||
<param-name>SOAPMonitorPort</param-name>
|
||||
<param-value>5001</param-value>
|
||||
</init-param>
|
||||
<load-on-startup>100</load-on-startup>
|
||||
</servlet>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>WebGoat</servlet-name>
|
||||
<description>
|
||||
This servlet plays the "controller" role in the MVC architecture
|
||||
used in this application.
|
||||
|
||||
The initialization parameter namess for this servlet are the
|
||||
"servlet path" that will be received by this servlet (after the
|
||||
filename extension is removed). The corresponding value is the
|
||||
name of the action class that will be used to process this request.
|
||||
</description>
|
||||
<servlet-class>org.owasp.webgoat.HammerHead</servlet-class>
|
||||
|
||||
<init-param>
|
||||
<param-name>debug</param-name>
|
||||
<param-value>false</param-value>
|
||||
</init-param>
|
||||
|
||||
<init-param>
|
||||
<param-name>CookieDebug</param-name>
|
||||
<param-value>true</param-value>
|
||||
</init-param>
|
||||
|
||||
<init-param>
|
||||
<param-name>DefuseOSCommands</param-name>
|
||||
<param-value>false</param-value>
|
||||
</init-param>
|
||||
|
||||
<init-param>
|
||||
<param-name>Enterprise</param-name>
|
||||
<param-value>true</param-value>
|
||||
</init-param>
|
||||
|
||||
<init-param>
|
||||
<param-name>CodingExercises</param-name>
|
||||
<param-value>true</param-value>
|
||||
</init-param>
|
||||
|
||||
<init-param>
|
||||
<!-- Specify an address where you would like comments to be sent. -->
|
||||
<!-- This can be any URL or HTML tags, and will appear on the report card and lesson incomplete pages -->
|
||||
<!-- Use iso8859-1 encoding to represent special characters that might confuse XML parser. For
|
||||
example, replace "<" with "<" and ">" with ">". -->
|
||||
<param-name>FeedbackAddress</param-name>
|
||||
<param-value>
|
||||
<A HREF=mailto:webgoat@owasp.org>webgoat@owasp.org</A>
|
||||
</param-value>
|
||||
</init-param>
|
||||
|
||||
<init-param>
|
||||
<param-name>DatabaseDriver</param-name>
|
||||
<param-value>
|
||||
org.hsqldb.jdbcDriver
|
||||
</param-value>
|
||||
</init-param>
|
||||
|
||||
<init-param>
|
||||
<param-name>DatabaseConnectionString</param-name>
|
||||
<!--
|
||||
The string "${USER}" in the connection string will be replaced by the active username
|
||||
when making a connection.
|
||||
-->
|
||||
<param-value>
|
||||
jdbc:hsqldb:mem:${USER}
|
||||
</param-value>
|
||||
</init-param>
|
||||
|
||||
<!-- Load this servlet at server startup time -->
|
||||
|
||||
<load-on-startup>5</load-on-startup>
|
||||
|
||||
</servlet>
|
||||
|
||||
|
||||
<servlet>
|
||||
<servlet-name>LessonSource</servlet-name>
|
||||
<description>
|
||||
This servlet returns the Java source of the current lesson.
|
||||
</description>
|
||||
<servlet-class>org.owasp.webgoat.LessonSource</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>Catcher</servlet-name>
|
||||
<description>
|
||||
This servlet catches any posts and marks the appropriate lesson property.
|
||||
</description>
|
||||
<servlet-class>org.owasp.webgoat.Catcher</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>conf</servlet-name>
|
||||
<jsp-file>/lessons/ConfManagement/config.jsp</jsp-file>
|
||||
</servlet>
|
||||
<!-- Define mappings that are used by the servlet container to
|
||||
translate a particular request URI (context-relative) to a
|
||||
particular servlet. The examples below correspond to the
|
||||
servlet descriptions above. Thus, a request URI like:
|
||||
|
||||
http://localhost:8080/{contextpath}/graph
|
||||
|
||||
will be mapped to the "graph" servlet, while a request like:
|
||||
|
||||
http://localhost:8080/{contextpath}/saveCustomer.do
|
||||
|
||||
will be mapped to the "controller" servlet.
|
||||
|
||||
You may define any number of servlet mappings, including zero.
|
||||
It is also legal to define more than one mapping for the same
|
||||
servlet, if you wish to.
|
||||
-->
|
||||
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>AxisServlet</servlet-name>
|
||||
<url-pattern>/servlet/AxisServlet</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>AxisServlet</servlet-name>
|
||||
<url-pattern>*.jws</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>AxisServlet</servlet-name>
|
||||
<url-pattern>/services/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>SOAPMonitorService</servlet-name>
|
||||
<url-pattern>/SOAPMonitor</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- uncomment this if you want the admin servlet -->
|
||||
<!--
|
||||
<servlet-mapping>
|
||||
<servlet-name>AdminServlet</servlet-name>
|
||||
<url-pattern>/servlet/AdminServlet</url-pattern>
|
||||
</servlet-mapping>
|
||||
-->
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>WebGoat</servlet-name>
|
||||
<url-pattern>/attack</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>LessonSource</servlet-name>
|
||||
<url-pattern>/source</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>Catcher</servlet-name>
|
||||
<url-pattern>/catcher</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>conf</servlet-name>
|
||||
<url-pattern>/conf</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- Define the default session timeout for your application,
|
||||
in minutes. From a servlet or JSP page, you can modify
|
||||
the timeout for a particular session dynamically by using
|
||||
HttpSession.getMaxInactiveInterval(). -->
|
||||
|
||||
<session-config>
|
||||
<!-- 2 days -->
|
||||
<session-timeout>2880</session-timeout>
|
||||
</session-config>
|
||||
|
||||
<mime-mapping>
|
||||
<extension>wmv</extension>
|
||||
<mime-type>video/x-ms-wmv</mime-type>
|
||||
</mime-mapping>
|
||||
|
||||
<!-- Define reference to the user database for looking up roles -->
|
||||
<resource-env-ref>
|
||||
<description>
|
||||
Link to the UserDatabase instance from which we request lists of
|
||||
defined role names. Typically, this will be connected to the global
|
||||
user database with a ResourceLink element in server.xml or the context
|
||||
configuration file for the Manager web application.
|
||||
</description>
|
||||
<resource-env-ref-name>users</resource-env-ref-name>
|
||||
<resource-env-ref-type>
|
||||
org.apache.catalina.UserDatabase
|
||||
</resource-env-ref-type>
|
||||
</resource-env-ref>
|
||||
|
||||
|
||||
<!-- Define a Security Constraint on this Application -->
|
||||
<security-constraint>
|
||||
<web-resource-collection>
|
||||
<web-resource-name>WebGoat Application</web-resource-name>
|
||||
<url-pattern>/*</url-pattern>
|
||||
</web-resource-collection>
|
||||
<auth-constraint>
|
||||
<role-name>webgoat_user</role-name>
|
||||
<role-name>webgoat_admin</role-name>
|
||||
<role-name>webgoat_challenge</role-name>
|
||||
</auth-constraint>
|
||||
</security-constraint>
|
||||
|
||||
<security-constraint>
|
||||
<web-resource-collection>
|
||||
<web-resource-name>WebGoat Application Source</web-resource-name>
|
||||
<url-pattern>/JavaSource/*</url-pattern>
|
||||
</web-resource-collection>
|
||||
<auth-constraint>
|
||||
<role-name>server_admin</role-name>
|
||||
</auth-constraint>
|
||||
</security-constraint>
|
||||
|
||||
|
||||
<!-- Login configuration uses BASIC authentication -->
|
||||
<login-config>
|
||||
<auth-method>BASIC</auth-method>
|
||||
<realm-name>WebGoat Application</realm-name>
|
||||
</login-config>
|
||||
|
||||
<!-- Security roles referenced by this web application -->
|
||||
<security-role>
|
||||
<description>The role that is required to administrate WebGoat</description>
|
||||
<role-name>webgoat_admin</role-name>
|
||||
</security-role>
|
||||
|
||||
<security-role>
|
||||
<description>The role that is required to start the challenge log viewer</description>
|
||||
<role-name>webgoat_challenge</role-name>
|
||||
</security-role>
|
||||
|
||||
<security-role>
|
||||
<description>The role that is required to use WebGoat</description>
|
||||
<role-name>webgoat_user</role-name>
|
||||
</security-role>
|
||||
|
||||
<security-role>
|
||||
<description>This role is for admins only</description>
|
||||
<role-name>server_admin</role-name>
|
||||
</security-role>
|
||||
|
||||
</web-app>
|
||||
|
58
main/project/WebContent/WEB-INF/webgoat-class.properties
Normal file
58
main/project/WebContent/WEB-INF/webgoat-class.properties
Normal file
@ -0,0 +1,58 @@
|
||||
category.General.ranking=11
|
||||
lesson.HttpBasics.ranking=10
|
||||
lesson.HttpSplitting.ranking=20
|
||||
lesson.ThreadSafetyProblem.ranking=30
|
||||
|
||||
category.Broken\ Authentication\ and\ Session\ Management.ranking=21
|
||||
lesson.BasicAuthentication.ranking=10
|
||||
lesson.WeakAuthenticationCookie.ranking=20
|
||||
|
||||
category.Broken\ Access\ Control.ranking=31
|
||||
lesson.AccessControlMatrix.ranking=10
|
||||
lesson.PathBasedAccessControl.ranking=20
|
||||
lesson.RoleBasedAccessControl.hidden=true
|
||||
|
||||
category.Cross-Site\ Scripting\ (XSS).ranking=41
|
||||
lesson.StoredXss.ranking=10
|
||||
lesson.ReflectedXSS.ranking=20
|
||||
lesson.CSRF.ranking=30
|
||||
lesson.CrossSiteScripting.hidden=true
|
||||
|
||||
category.Unvalidated\ Parameters.ranking=51
|
||||
lesson.HiddenFieldTampering.ranking=10
|
||||
lesson.JavaScriptValidation.ranking=20
|
||||
lesson.UncheckedEmail.ranking=30
|
||||
|
||||
category.Insecure\ Storage.ranking=61
|
||||
lesson.Encoding.ranking=10
|
||||
|
||||
category.Injection\ Flaws.ranking=71
|
||||
lesson.SqlNumericInjection.ranking=10
|
||||
lesson.SqlStringInjection.ranking=20
|
||||
lesson.CommandInjection.ranking=30
|
||||
lesson.LogSpoofing.ranking=40
|
||||
lesson.SQLInjection.hidden=true
|
||||
|
||||
category.Improper\ Error\ Handling.ranking=81
|
||||
lesson.FailOpenAuthentication.ranking=10
|
||||
|
||||
category.Code\ Quality.ranking=91
|
||||
lesson.HtmlClues.ranking=10
|
||||
|
||||
category.Web\ Services.category.ranking=101
|
||||
lesson.SoapRequest.ranking=10
|
||||
lesson.WSDLScanning.ranking=20
|
||||
lesson.WsSqlInjection.ranking=30
|
||||
|
||||
category.New\ Lesson.category.ranking=111
|
||||
lesson.HowToAddNewLesson.ranking=10
|
||||
|
||||
lesson.WeakSessionID.hidden=true
|
||||
lesson.BufferOverflow.hidden=true
|
||||
lesson.BlindSqlInjection.hidden=true
|
||||
lesson.DOS_Login.hidden=true
|
||||
lesson.ForcedBrowsing.hidden=true
|
||||
lesson.ForgotPassword.hidden=true
|
||||
lesson.ParameterInjection.hidden=true
|
||||
lesson.RemoteAdminFlaw.hidden=true
|
||||
lesson.ChallengeScreen.hidden=true
|
55
main/project/WebContent/WEB-INF/webgoat-lab.properties
Normal file
55
main/project/WebContent/WEB-INF/webgoat-lab.properties
Normal file
@ -0,0 +1,55 @@
|
||||
category.General.ranking=11
|
||||
lesson.HttpBasics.ranking=10
|
||||
lesson.HttpSplitting.ranking=20
|
||||
lesson.ThreadSafetyProblem.ranking=30
|
||||
|
||||
category.Broken\ Authentication\ and\ Session\ Management.ranking=21
|
||||
lesson.BasicAuthentication.ranking=10
|
||||
lesson.WeakAuthenticationCookie.ranking=20
|
||||
|
||||
category.Broken\ Access\ Control.ranking=31
|
||||
lesson.AccessControlMatrix.ranking=10
|
||||
lesson.PathBasedAccessControl.ranking=20
|
||||
|
||||
category.Cross-Site\ Scripting\ (XSS).ranking=41
|
||||
lesson.StoredXss.ranking=10
|
||||
lesson.ReflectedXSS.ranking=20
|
||||
lesson.CSRF.ranking=30
|
||||
|
||||
category.Unvalidated\ Parameters.ranking=51
|
||||
lesson.HiddenFieldTampering.ranking=10
|
||||
lesson.JavaScriptValidation.ranking=20
|
||||
lesson.UncheckedEmail.ranking=30
|
||||
|
||||
category.Insecure\ Storage.ranking=61
|
||||
lesson.Encoding.ranking=10
|
||||
|
||||
category.Injection\ Flaws.ranking=71
|
||||
lesson.SqlNumericInjection.ranking=10
|
||||
lesson.SqlStringInjection.ranking=20
|
||||
lesson.CommandInjection.ranking=30
|
||||
lesson.LogSpoofing.ranking=40
|
||||
|
||||
category.Improper\ Error\ Handling.ranking=81
|
||||
lesson.FailOpenAuthentication.ranking=10
|
||||
|
||||
category.Code\ Quality.ranking=91
|
||||
lesson.HtmlClues.ranking=10
|
||||
|
||||
category.Web\ Services.category.ranking=101
|
||||
lesson.SoapRequest.ranking=10
|
||||
lesson.WSDLScanning.ranking=20
|
||||
lesson.WsSqlInjection.ranking=30
|
||||
|
||||
category.New\ Lesson.category.ranking=111
|
||||
lesson.HowToAddNewLesson.ranking=10
|
||||
|
||||
lesson.WeakSessionID.hidden=true
|
||||
lesson.BufferOverflow.hidden=true
|
||||
lesson.BlindSqlInjection.hidden=true
|
||||
lesson.DOS_Login.hidden=true
|
||||
lesson.ForcedBrowsing.hidden=true
|
||||
lesson.ForgotPassword.hidden=true
|
||||
lesson.ParameterInjection.hidden=true
|
||||
lesson.RemoteAdminFlaw.hidden=true
|
||||
lesson.ChallengeScreen.hidden=true
|
1
main/project/WebContent/WEB-INF/webgoat-owasp.properties
Normal file
1
main/project/WebContent/WEB-INF/webgoat-owasp.properties
Normal file
@ -0,0 +1 @@
|
||||
#lesson.BufferOverflow.hidden=true
|
1
main/project/WebContent/WEB-INF/webgoat.properties
Executable file
1
main/project/WebContent/WEB-INF/webgoat.properties
Executable file
@ -0,0 +1 @@
|
||||
#lesson.BufferOverflow.hidden=true
|
132
main/project/WebContent/WEB-INF/webgoat_oracle.sql
Executable file
132
main/project/WebContent/WEB-INF/webgoat_oracle.sql
Executable file
@ -0,0 +1,132 @@
|
||||
DROP USER webgoat_guest CASCADE;
|
||||
CREATE USER webgoat_guest IDENTIFIED BY webgoat DEFAULT TABLESPACE users;
|
||||
GRANT CONNECT, RESOURCE TO webgoat_guest;
|
||||
GRANT CREATE PROCEDURE TO webgoat_guest;
|
||||
|
||||
CREATE TABLE WEBGOAT_guest.EMPLOYEE (
|
||||
userid INT NOT NULL PRIMARY KEY,
|
||||
first_name VARCHAR(20),
|
||||
last_name VARCHAR(20),
|
||||
ssn VARCHAR(12),
|
||||
password VARCHAR(10),
|
||||
title VARCHAR(20),
|
||||
phone VARCHAR(13),
|
||||
address1 VARCHAR(80),
|
||||
address2 VARCHAR(80),
|
||||
manager INT,
|
||||
start_date CHAR(8),
|
||||
salary INT,
|
||||
ccn VARCHAR(30),
|
||||
ccn_limit INT,
|
||||
disciplined_date CHAR(8),
|
||||
disciplined_notes VARCHAR(60),
|
||||
personal_description VARCHAR(60)
|
||||
);
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION WEBGOAT_guest.EMPLOYEE_LOGIN(v_id NUMBER, v_password VARCHAR) RETURN NUMBER AS
|
||||
stmt VARCHAR(32767);cnt NUMBER;
|
||||
BEGIN
|
||||
stmt := 'SELECT COUNT (*) FROM EMPLOYEE WHERE USERID = ' || v_id || ' AND PASSWORD = ''' || v_password || '''';
|
||||
EXECUTE IMMEDIATE stmt INTO cnt;
|
||||
RETURN cnt;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE FUNCTION WEBGOAT_guest.EMPLOYEE_LOGIN_BACKUP(v_id NUMBER, v_password VARCHAR) RETURN NUMBER AS
|
||||
stmt VARCHAR(32767);cnt NUMBER;
|
||||
BEGIN
|
||||
stmt := 'SELECT COUNT (*) FROM EMPLOYEE WHERE USERID = ' || v_id || ' AND PASSWORD = ''' || v_password || '''';
|
||||
EXECUTE IMMEDIATE stmt INTO cnt;
|
||||
RETURN cnt;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PROCEDURE WEBGOAT_guest.UPDATE_EMPLOYEE(
|
||||
v_userid IN employee.userid%type,
|
||||
v_first_name IN employee.first_name%type,
|
||||
v_last_name IN employee.last_name%type,
|
||||
v_ssn IN employee.ssn%type,
|
||||
v_title IN employee.title%type,
|
||||
v_phone IN employee.phone%type,
|
||||
v_address1 IN employee.address1%type,
|
||||
v_address2 IN employee.address2%type,
|
||||
v_manager IN employee.manager%type,
|
||||
v_start_date IN employee.start_date%type,
|
||||
v_salary IN employee.salary%type,
|
||||
v_ccn IN employee.ccn%type,
|
||||
v_ccn_limit IN employee.ccn_limit%type,
|
||||
v_disciplined_date IN employee.disciplined_date%type,
|
||||
v_disciplined_notes IN employee.disciplined_notes%type,
|
||||
v_personal_description IN employee.personal_description%type
|
||||
)
|
||||
AS
|
||||
BEGIN
|
||||
UPDATE EMPLOYEE
|
||||
SET
|
||||
first_name = v_first_name,
|
||||
last_name = v_last_name,
|
||||
ssn = v_ssn,
|
||||
title = v_title,
|
||||
phone = v_phone,
|
||||
address1 = v_address1,
|
||||
address2 = v_address2,
|
||||
manager = v_manager,
|
||||
start_date = v_Start_date,
|
||||
salary = v_salary,
|
||||
ccn = v_ccn,
|
||||
ccn_limit = v_ccn_limit,
|
||||
disciplined_date = v_disciplined_date,
|
||||
disciplined_notes = v_disciplined_notes,
|
||||
personal_description = v_personal_description
|
||||
WHERE
|
||||
userid = v_userid;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PROCEDURE WEBGOAT_guest.UPDATE_EMPLOYEE_BACKUP(
|
||||
v_userid IN employee.userid%type,
|
||||
v_first_name IN employee.first_name%type,
|
||||
v_last_name IN employee.last_name%type,
|
||||
v_ssn IN employee.ssn%type,
|
||||
v_title IN employee.title%type,
|
||||
v_phone IN employee.phone%type,
|
||||
v_address1 IN employee.address1%type,
|
||||
v_address2 IN employee.address2%type,
|
||||
v_manager IN employee.manager%type,
|
||||
v_start_date IN employee.start_date%type,
|
||||
v_salary IN employee.salary%type,
|
||||
v_ccn IN employee.ccn%type,
|
||||
v_ccn_limit IN employee.ccn_limit%type,
|
||||
v_disciplined_date IN employee.disciplined_date%type,
|
||||
v_disciplined_notes IN employee.disciplined_notes%type,
|
||||
v_personal_description IN employee.personal_description%type
|
||||
)
|
||||
AS
|
||||
BEGIN
|
||||
UPDATE EMPLOYEE
|
||||
SET
|
||||
first_name = v_first_name,
|
||||
last_name = v_last_name,
|
||||
ssn = v_ssn,
|
||||
title = v_title,
|
||||
phone = v_phone,
|
||||
address1 = v_address1,
|
||||
address2 = v_address2,
|
||||
manager = v_manager,
|
||||
start_date = v_Start_date,
|
||||
salary = v_salary,
|
||||
ccn = v_ccn,
|
||||
ccn_limit = v_ccn_limit,
|
||||
disciplined_date = v_disciplined_date,
|
||||
disciplined_notes = v_disciplined_notes,
|
||||
personal_description = v_personal_description
|
||||
WHERE
|
||||
userid = v_userid;
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
exit;
|
||||
|
||||
|
226
main/project/WebContent/WEB-INF/webgoat_sqlserver.sql
Normal file
226
main/project/WebContent/WEB-INF/webgoat_sqlserver.sql
Normal file
@ -0,0 +1,226 @@
|
||||
EXEC sp_configure 'clr enabled', 1
|
||||
GO
|
||||
|
||||
RECONFIGURE
|
||||
GO
|
||||
|
||||
USE master;
|
||||
|
||||
go
|
||||
|
||||
DROP LOGIN webgoat_guest;
|
||||
|
||||
go
|
||||
|
||||
DROP database webgoat;
|
||||
|
||||
go
|
||||
|
||||
|
||||
CREATE database webgoat;
|
||||
|
||||
go
|
||||
|
||||
USE webgoat;
|
||||
|
||||
go
|
||||
|
||||
CREATE SCHEMA webgoat_guest;
|
||||
|
||||
go
|
||||
|
||||
CREATE LOGIN webgoat_guest with password = '_webgoat';
|
||||
|
||||
go
|
||||
|
||||
CREATE USER webgoat_guest with default_schema = webgoat_guest;
|
||||
|
||||
go
|
||||
|
||||
GRANT CONTROL TO webgoat_guest;
|
||||
|
||||
go
|
||||
|
||||
|
||||
CREATE TABLE WEBGOAT_guest.EMPLOYEE (
|
||||
userid INT NOT NULL PRIMARY KEY,
|
||||
first_name VARCHAR(20),
|
||||
last_name VARCHAR(20),
|
||||
ssn VARCHAR(12),
|
||||
password VARCHAR(10),
|
||||
title VARCHAR(20),
|
||||
phone VARCHAR(13),
|
||||
address1 VARCHAR(80),
|
||||
address2 VARCHAR(80),
|
||||
manager INT,
|
||||
start_date CHAR(8),
|
||||
salary INT,
|
||||
ccn VARCHAR(30),
|
||||
ccn_limit INT,
|
||||
disciplined_date CHAR(8),
|
||||
disciplined_notes VARCHAR(60),
|
||||
personal_description VARCHAR(60)
|
||||
);
|
||||
|
||||
go
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM INFORMATION_SCHEMA.ROUTINES
|
||||
WHERE ROUTINE_NAME = 'UPDATE_EMPLOYEE'
|
||||
AND ROUTINE_SCHEMA = 'webgoat_guest'
|
||||
AND ROUTINE_TYPE = 'PROCEDURE'
|
||||
)
|
||||
BEGIN
|
||||
DROP PROCEDURE webgoat_guest.UPDATE_EMPLOYEE
|
||||
DROP PROCEDURE webgoat_guest.UPDATE_EMPLOYEE_BACKUP
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE webgoat_guest.UPDATE_EMPLOYEE
|
||||
@v_userid INT,
|
||||
@v_first_name VARCHAR(20),
|
||||
@v_last_name VARCHAR(20),
|
||||
@v_ssn VARCHAR(12),
|
||||
@v_title VARCHAR(20),
|
||||
@v_phone VARCHAR(13),
|
||||
@v_address1 VARCHAR(80),
|
||||
@v_address2 VARCHAR(80),
|
||||
@v_manager INT,
|
||||
@v_start_date CHAR(8),
|
||||
@v_salary INT,
|
||||
@v_ccn VARCHAR(30),
|
||||
@v_ccn_limit INT,
|
||||
@v_disciplined_date CHAR(8),
|
||||
@v_disciplined_notes VARCHAR(60),
|
||||
@v_personal_description VARCHAR(60)
|
||||
AS
|
||||
UPDATE EMPLOYEE
|
||||
SET
|
||||
first_name = @v_first_name,
|
||||
last_name = @v_last_name,
|
||||
ssn = @v_ssn,
|
||||
title = @v_title,
|
||||
phone = @v_phone,
|
||||
address1 = @v_address1,
|
||||
address2 = @v_address2,
|
||||
manager = @v_manager,
|
||||
start_date = @v_Start_date,
|
||||
salary = @v_salary,
|
||||
ccn = @v_ccn,
|
||||
ccn_limit = @v_ccn_limit,
|
||||
disciplined_date = @v_disciplined_date,
|
||||
disciplined_notes = @v_disciplined_notes,
|
||||
personal_description = @v_personal_description
|
||||
WHERE
|
||||
userid = @v_userid;
|
||||
|
||||
go
|
||||
|
||||
CREATE PROCEDURE webgoat_guest.UPDATE_EMPLOYEE_BACKUP
|
||||
@v_userid INT,
|
||||
@v_first_name VARCHAR(20),
|
||||
@v_last_name VARCHAR(20),
|
||||
@v_ssn VARCHAR(12),
|
||||
@v_title VARCHAR(20),
|
||||
@v_phone VARCHAR(13),
|
||||
@v_address1 VARCHAR(80),
|
||||
@v_address2 VARCHAR(80),
|
||||
@v_manager INT,
|
||||
@v_start_date CHAR(8),
|
||||
@v_salary INT,
|
||||
@v_ccn VARCHAR(30),
|
||||
@v_ccn_limit INT,
|
||||
@v_disciplined_date CHAR(8),
|
||||
@v_disciplined_notes VARCHAR(60),
|
||||
@v_personal_description VARCHAR(60)
|
||||
AS
|
||||
UPDATE EMPLOYEE
|
||||
SET
|
||||
first_name = @v_first_name,
|
||||
last_name = @v_last_name,
|
||||
ssn = @v_ssn,
|
||||
title = @v_title,
|
||||
phone = @v_phone,
|
||||
address1 = @v_address1,
|
||||
address2 = @v_address2,
|
||||
manager = @v_manager,
|
||||
start_date = @v_Start_date,
|
||||
salary = @v_salary,
|
||||
ccn = @v_ccn,
|
||||
ccn_limit = @v_ccn_limit,
|
||||
disciplined_date = @v_disciplined_date,
|
||||
disciplined_notes = @v_disciplined_notes,
|
||||
personal_description = @v_personal_description
|
||||
WHERE
|
||||
userid = @v_userid;
|
||||
|
||||
go
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM INFORMATION_SCHEMA.ROUTINES
|
||||
WHERE ROUTINE_NAME = 'EMPLOYEE_LOGIN'
|
||||
AND ROUTINE_SCHEMA = 'webgoat_guest'
|
||||
AND ROUTINE_TYPE = 'FUNCTION'
|
||||
)
|
||||
BEGIN
|
||||
DROP FUNCTION webgoat_guest.EMPLOYEE_LOGIN
|
||||
DROP FUNCTION webgoat_guest.EMPLOYEE_LOGIN_BACKUP
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE FUNCTION webgoat_guest.EMPLOYEE_LOGIN (
|
||||
@v_id INT,
|
||||
@v_password VARCHAR(100)
|
||||
) RETURNS INTEGER
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE @sql nvarchar(4000), @count int
|
||||
SELECT @sql = N'SELECT @cnt = COUNT(*) FROM EMPLOYEE WHERE USERID = ' + convert(varchar(10),@v_id) + N' AND PASSWORD = ''' + @v_password + N'''';
|
||||
EXEC sp_executesql @sql, N'@cnt int OUTPUT', @cnt = @count OUTPUT
|
||||
return @count
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE FUNCTION webgoat_guest.EMPLOYEE_LOGIN_BACKUP (
|
||||
@v_id INT,
|
||||
@v_password VARCHAR(100)
|
||||
) RETURNS INTEGER
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE @sql nvarchar(4000), @count int
|
||||
SELECT @sql = N'SELECT @cnt = COUNT(*) FROM EMPLOYEE WHERE USERID = ' + convert(varchar(10),@v_id) + N' AND PASSWORD = ''' + @v_password + N'''';
|
||||
EXEC sp_executesql @sql, N'@cnt int OUTPUT', @cnt = @count OUTPUT
|
||||
return @count
|
||||
END
|
||||
GO
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM INFORMATION_SCHEMA.ROUTINES
|
||||
WHERE ROUTINE_NAME = 'RegexMatch'
|
||||
AND ROUTINE_SCHEMA = 'webgoat_guest'
|
||||
AND ROUTINE_TYPE = 'FUNCTION'
|
||||
)
|
||||
BEGIN
|
||||
DROP FUNCTION webgoat_guest.RegexMatch
|
||||
END
|
||||
GO
|
||||
|
||||
IF EXISTS (SELECT name FROM sys.assemblies WHERE name = N'RegexMatch')
|
||||
DROP ASSEMBLY RegexMatch;
|
||||
GO
|
||||
|
||||
CREATE ASSEMBLY RegexMatch FROM 'C:\AspectClass\Database\Labs\project\WebContent\WEB-INF\RegexMatch.dll' WITH PERMISSION_SET = SAFE;
|
||||
GO
|
||||
|
||||
CREATE FUNCTION webgoat_guest.RegexMatch (
|
||||
@input NVARCHAR(MAX),
|
||||
@pattern NVARCHAR(MAX)
|
||||
) RETURNS BIT
|
||||
AS EXTERNAL NAME RegexMatch.[UserDefinedFunctions].RegexMatch;
|
||||
GO
|
Reference in New Issue
Block a user