-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
/** | ||
* OWASP Benchmark v1.2 | ||
* | ||
* <p>This file is part of the Open Web Application Security Project (OWASP) Benchmark Project. For | ||
* details, please see <a | ||
* href="https://owasp.org/www-project-benchmark/">https://owasp.org/www-project-benchmark/</a>. | ||
* | ||
* <p>The OWASP Benchmark 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, version 2. | ||
* | ||
* <p>The OWASP Benchmark 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. | ||
* | ||
* @author Dave Wichers | ||
* @created 2015 | ||
*/ | ||
package org.owasp.benchmark.testcode; | ||
|
||
import java.io.IOException; | ||
import javax.servlet.ServletException; | ||
import javax.servlet.annotation.WebServlet; | ||
import javax.servlet.http.HttpServlet; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
@WebServlet(value = "/cmdi-00/BenchmarkTest00007") | ||
public class BenchmarkTest00007 extends HttpServlet { | ||
|
||
private static final long serialVersionUID = 1L; | ||
|
||
@Override | ||
public void doGet(HttpServletRequest request, HttpServletResponse response) | ||
throws ServletException, IOException { | ||
doPost(request, response); | ||
} | ||
|
||
@Override | ||
public void doPost(HttpServletRequest request, HttpServletResponse response) | ||
throws ServletException, IOException { | ||
// some code | ||
response.setContentType("text/html;charset=UTF-8"); | ||
|
||
String param = ""; | ||
if (request.getHeader("BenchmarkTest00007") != null) { | ||
param = request.getHeader("BenchmarkTest00007"); | ||
} | ||
|
||
// URL Decode the header value since req.getHeader() doesn't. Unlike req.getParameter(). | ||
param = java.net.URLDecoder.decode(param, "UTF-8"); | ||
|
||
String cmd = | ||
org.owasp.benchmark.helpers.Utils.getInsecureOSCommandString( | ||
this.getClass().getClassLoader()); | ||
String[] args = {cmd}; | ||
String[] argsEnv = {param}; | ||
|
||
Runtime r = Runtime.getRuntime(); | ||
|
||
try { | ||
Process p = r.exec(args, argsEnv); | ||
org.owasp.benchmark.helpers.Utils.printOSCommandResults(p, response); | ||
} catch (IOException e) { | ||
System.out.println("Problem executing cmdi - TestCase"); | ||
response.getWriter() | ||
.println(org.owasp.esapi.ESAPI.encoder().encodeForHTML(e.getMessage())); | ||
Check warning Code scanning / CodeQL Information exposure through a stack trace Medium test Error information Error loading related location Loading |
||
return; | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
/** | ||
* OWASP Benchmark v1.2 | ||
* | ||
* <p>This file is part of the Open Web Application Security Project (OWASP) Benchmark Project. For | ||
* details, please see <a | ||
* href="https://owasp.org/www-project-benchmark/">https://owasp.org/www-project-benchmark/</a>. | ||
* | ||
* <p>The OWASP Benchmark 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, version 2. | ||
* | ||
* <p>The OWASP Benchmark 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. | ||
* | ||
* @author Dave Wichers | ||
* @created 2015 | ||
*/ | ||
package org.owasp.benchmark.testcode; | ||
|
||
import java.io.IOException; | ||
import javax.servlet.ServletException; | ||
import javax.servlet.annotation.WebServlet; | ||
import javax.servlet.http.HttpServlet; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
@WebServlet(value = "/sqli-00/BenchmarkTest00008") | ||
public class BenchmarkTest00008 extends HttpServlet { | ||
|
||
private static final long serialVersionUID = 1L; | ||
|
||
@Override | ||
public void doGet(HttpServletRequest request, HttpServletResponse response) | ||
throws ServletException, IOException { | ||
doPost(request, response); | ||
} | ||
|
||
@Override | ||
public void doPost(HttpServletRequest request, HttpServletResponse response) | ||
throws ServletException, IOException { | ||
// some code | ||
response.setContentType("text/html;charset=UTF-8"); | ||
|
||
String param = ""; | ||
if (request.getHeader("BenchmarkTest00008") != null) { | ||
param = request.getHeader("BenchmarkTest00008"); | ||
} | ||
|
||
// URL Decode the header value since req.getHeader() doesn't. Unlike req.getParameter(). | ||
param = java.net.URLDecoder.decode(param, "UTF-8"); | ||
|
||
String sql = "{call " + param + "}"; | ||
|
||
try { | ||
java.sql.Connection connection = | ||
org.owasp.benchmark.helpers.DatabaseHelper.getSqlConnection(); | ||
java.sql.CallableStatement statement = connection.prepareCall(sql); | ||
Check failure Code scanning / CodeQL Query built from user-controlled sources High test
This query depends on a
user-provided value Error loading related location Loading |
||
java.sql.ResultSet rs = statement.executeQuery(); | ||
org.owasp.benchmark.helpers.DatabaseHelper.printResults(rs, sql, response); | ||
|
||
} catch (java.sql.SQLException e) { | ||
if (org.owasp.benchmark.helpers.DatabaseHelper.hideSQLErrors) { | ||
response.getWriter().println("Error processing request."); | ||
return; | ||
} else throw new ServletException(e); | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
/** | ||
* OWASP Benchmark v1.2 | ||
* | ||
* <p>This file is part of the Open Web Application Security Project (OWASP) Benchmark Project. For | ||
* details, please see <a | ||
* href="https://owasp.org/www-project-benchmark/">https://owasp.org/www-project-benchmark/</a>. | ||
* | ||
* <p>The OWASP Benchmark 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, version 2. | ||
* | ||
* <p>The OWASP Benchmark 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. | ||
* | ||
* @author Dave Wichers | ||
* @created 2015 | ||
*/ | ||
package org.owasp.benchmark.testcode; | ||
|
||
import java.io.IOException; | ||
import javax.servlet.ServletException; | ||
import javax.servlet.annotation.WebServlet; | ||
import javax.servlet.http.HttpServlet; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
@WebServlet(value = "/hash-00/BenchmarkTest00009") | ||
public class BenchmarkTest00009 extends HttpServlet { | ||
|
||
private static final long serialVersionUID = 1L; | ||
|
||
@Override | ||
public void doGet(HttpServletRequest request, HttpServletResponse response) | ||
throws ServletException, IOException { | ||
doPost(request, response); | ||
} | ||
|
||
@Override | ||
public void doPost(HttpServletRequest request, HttpServletResponse response) | ||
throws ServletException, IOException { | ||
// some code | ||
response.setContentType("text/html;charset=UTF-8"); | ||
|
||
String param = ""; | ||
java.util.Enumeration<String> names = request.getHeaderNames(); | ||
while (names.hasMoreElements()) { | ||
String name = (String) names.nextElement(); | ||
|
||
if (org.owasp.benchmark.helpers.Utils.commonHeaders.contains(name)) { | ||
continue; // If standard header, move on to next one | ||
} | ||
|
||
java.util.Enumeration<String> values = request.getHeaders(name); | ||
if (values != null && values.hasMoreElements()) { | ||
param = name; // Grabs the name of the first non-standard header as the parameter | ||
// value | ||
break; | ||
} | ||
} | ||
// Note: We don't URL decode header names because people don't normally do that | ||
|
||
java.security.Provider[] provider = java.security.Security.getProviders(); | ||
java.security.MessageDigest md; | ||
|
||
try { | ||
if (provider.length > 1) { | ||
|
||
md = java.security.MessageDigest.getInstance("sha-384", provider[0]); | ||
} else { | ||
md = java.security.MessageDigest.getInstance("sha-384", "SUN"); | ||
} | ||
byte[] input = {(byte) '?'}; | ||
Object inputParam = param; | ||
if (inputParam instanceof String) input = ((String) inputParam).getBytes(); | ||
if (inputParam instanceof java.io.InputStream) { | ||
byte[] strInput = new byte[1000]; | ||
int i = ((java.io.InputStream) inputParam).read(strInput); | ||
if (i == -1) { | ||
response.getWriter() | ||
.println( | ||
"This input source requires a POST, not a GET. Incompatible UI for the InputStream source."); | ||
return; | ||
} | ||
input = java.util.Arrays.copyOf(strInput, i); | ||
} | ||
md.update(input); | ||
|
||
byte[] result = md.digest(); | ||
java.io.File fileTarget = | ||
new java.io.File( | ||
new java.io.File(org.owasp.benchmark.helpers.Utils.TESTFILES_DIR), | ||
"passwordFile.txt"); | ||
java.io.FileWriter fw = | ||
new java.io.FileWriter(fileTarget, true); // the true will append the new data | ||
fw.write( | ||
"hash_value=" | ||
+ org.owasp.esapi.ESAPI.encoder().encodeForBase64(result, true) | ||
+ "\n"); | ||
fw.close(); | ||
response.getWriter() | ||
.println( | ||
"Sensitive value '" | ||
+ org.owasp | ||
.esapi | ||
.ESAPI | ||
.encoder() | ||
.encodeForHTML(new String(input)) | ||
+ "' hashed and stored<br/>"); | ||
Check warning Code scanning / CodeQL Cross-site scripting Medium test
Cross-site scripting vulnerability due to a
user-provided value Error loading related location Loading |
||
|
||
} catch (java.security.NoSuchAlgorithmException e) { | ||
System.out.println( | ||
"Problem executing hash - TestCase java.security.MessageDigest.getInstance(java.lang.String,java.security.Provider)"); | ||
throw new ServletException(e); | ||
} catch (java.security.NoSuchProviderException e) { | ||
System.out.println( | ||
"Problem executing hash - TestCase java.security.MessageDigest.getInstance(java.lang.String,java.security.Provider)"); | ||
throw new ServletException(e); | ||
} | ||
|
||
response.getWriter() | ||
.println( | ||
"Hash Test java.security.MessageDigest.getInstance(java.lang.String,java.security.Provider) executed"); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
/** | ||
* OWASP Benchmark v1.2 | ||
* | ||
* <p>This file is part of the Open Web Application Security Project (OWASP) Benchmark Project. For | ||
* details, please see <a | ||
* href="https://owasp.org/www-project-benchmark/">https://owasp.org/www-project-benchmark/</a>. | ||
* | ||
* <p>The OWASP Benchmark 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, version 2. | ||
* | ||
* <p>The OWASP Benchmark 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. | ||
* | ||
* @author Dave Wichers | ||
* @created 2015 | ||
*/ | ||
package org.owasp.benchmark.testcode; | ||
|
||
import java.io.IOException; | ||
import javax.servlet.ServletException; | ||
import javax.servlet.annotation.WebServlet; | ||
import javax.servlet.http.HttpServlet; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
@WebServlet(value = "/weakrand-00/BenchmarkTest00010") | ||
public class BenchmarkTest00010 extends HttpServlet { | ||
|
||
private static final long serialVersionUID = 1L; | ||
|
||
@Override | ||
public void doGet(HttpServletRequest request, HttpServletResponse response) | ||
throws ServletException, IOException { | ||
doPost(request, response); | ||
} | ||
|
||
@Override | ||
public void doPost(HttpServletRequest request, HttpServletResponse response) | ||
throws ServletException, IOException { | ||
// some code | ||
response.setContentType("text/html;charset=UTF-8"); | ||
|
||
String param = ""; | ||
java.util.Enumeration<String> names = request.getHeaderNames(); | ||
while (names.hasMoreElements()) { | ||
String name = (String) names.nextElement(); | ||
|
||
if (org.owasp.benchmark.helpers.Utils.commonHeaders.contains(name)) { | ||
continue; // If standard header, move on to next one | ||
} | ||
|
||
java.util.Enumeration<String> values = request.getHeaders(name); | ||
if (values != null && values.hasMoreElements()) { | ||
param = name; // Grabs the name of the first non-standard header as the parameter | ||
// value | ||
break; | ||
} | ||
} | ||
// Note: We don't URL decode header names because people don't normally do that | ||
|
||
try { | ||
int randNumber = java.security.SecureRandom.getInstance("SHA1PRNG").nextInt(99); | ||
String rememberMeKey = Integer.toString(randNumber); | ||
|
||
String user = "SafeInga"; | ||
String fullClassName = this.getClass().getName(); | ||
String testCaseNumber = | ||
fullClassName.substring( | ||
fullClassName.lastIndexOf('.') + 1 + "BenchmarkTest".length()); | ||
user += testCaseNumber; | ||
|
||
String cookieName = "rememberMe" + testCaseNumber; | ||
|
||
boolean foundUser = false; | ||
javax.servlet.http.Cookie[] cookies = request.getCookies(); | ||
if (cookies != null) { | ||
for (int i = 0; !foundUser && i < cookies.length; i++) { | ||
javax.servlet.http.Cookie cookie = cookies[i]; | ||
if (cookieName.equals(cookie.getName())) { | ||
if (cookie.getValue() | ||
.equals(request.getSession().getAttribute(cookieName))) { | ||
foundUser = true; | ||
} | ||
} | ||
} | ||
} | ||
|
||
if (foundUser) { | ||
response.getWriter().println("Welcome back: " + user + "<br/>"); | ||
} else { | ||
javax.servlet.http.Cookie rememberMe = | ||
new javax.servlet.http.Cookie(cookieName, rememberMeKey); | ||
rememberMe.setSecure(true); | ||
rememberMe.setHttpOnly(true); | ||
rememberMe.setPath(request.getRequestURI()); // i.e., set path to JUST this servlet | ||
// e.g., /benchmark/sql-01/BenchmarkTest01001 | ||
request.getSession().setAttribute(cookieName, rememberMeKey); | ||
response.addCookie(rememberMe); | ||
response.getWriter() | ||
.println( | ||
user | ||
+ " has been remembered with cookie: " | ||
+ rememberMe.getName() | ||
+ " whose value is: " | ||
+ rememberMe.getValue() | ||
+ "<br/>"); | ||
Check warning Code scanning / CodeQL Cross-site scripting Medium test
Cross-site scripting vulnerability due to a
user-provided value Error loading related location Loading Cross-site scripting vulnerability due to a user-provided value Error loading related location Loading |
||
} | ||
} catch (java.security.NoSuchAlgorithmException e) { | ||
System.out.println("Problem executing SecureRandom.nextInt(int) - TestCase"); | ||
throw new ServletException(e); | ||
} | ||
response.getWriter() | ||
.println("Weak Randomness Test java.security.SecureRandom.nextInt(int) executed"); | ||
} | ||
} |