Repository navigation
Expand file tree
/
Copy pathNoSqlInjection1IT.java
More file actions
131 lines (110 loc) · 4.34 KB
/
Copy pathNoSqlInjection1IT.java
File metadata and controls
131 lines (110 loc) · 4.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package servlets.module.challenge;
import static org.junit.jupiter.api.Assertions.fail;
import dbProcs.GetterIT;
import dbProcs.Setter;
import jakarta.servlet.ServletException;
import java.io.IOException;
import java.sql.SQLException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockServletConfig;
import testUtils.TestProperties;
public class NoSqlInjection1IT extends Mockito {
private static String applicationRoot = new String();
private static String USERNAME = "lessonTester";
private static String LANG = "en_GB";
private static String NOSQL_ATTACK = "';return(true);var a='a";
private static final Logger log = LogManager.getLogger(NoSqlInjection1IT.class);
@Mock private MockHttpServletRequest request;
@Mock private MockHttpServletResponse response;
/** Creates DB or Restores DB to Factory Defaults before running tests */
@BeforeAll
public static void resetDatabase() throws IOException, SQLException {
TestProperties.setTestPropertiesFileDirectory(log);
TestProperties.createMysqlResource();
TestProperties.createMongoResource();
TestProperties.ensureSchemaReady(log);
TestProperties.reseedTestData();
}
@BeforeEach
public void setup() {
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
// Open All modules
if (!Setter.openAllModules(applicationRoot, false)) {
fail("Could not Mark All Modules As Open");
}
}
public String moduleDoPost(String theSubmission, String csrfToken, int expectedResponseCode)
throws ServletException, IOException {
String servletClassName = "NoSqlInjection1";
log.debug("Creating " + servletClassName + " Servlet Instance");
NoSqlInjection1 servlet = new NoSqlInjection1();
servlet.init(new MockServletConfig(servletClassName));
// Setup Servlet Parameters and Attributes
log.debug("Setting Up Params and Atrributes");
request.addParameter("theGamerName", theSubmission);
// Adding Correct CSRF Token (Token Submitted)
request.addParameter("csrfToken", csrfToken);
if (request == null) {
log.debug("Request is null");
}
if (response == null) {
log.debug("Request is null");
}
log.debug("Running doPost");
servlet.doPost(request, response);
if (response.getStatus() != expectedResponseCode) {
fail(
servletClassName
+ " Servlet Returned "
+ response.getStatus()
+ " Code. "
+ expectedResponseCode
+ " Expected");
} else {
log.debug("302 OK Detected");
log.debug(
servletClassName
+ " Successful, returning location retrieved: "
+ response.getContentAsString());
return (response.getContentAsString());
}
return null;
}
@Test
public void testLevelValidAnswer() throws Exception {
GetterIT.verifyTestUser(applicationRoot, USERNAME, USERNAME);
log.debug("Signing in as " + USERNAME + " Through LoginServlet");
TestProperties.loginDoPost(log, request, response, USERNAME, USERNAME, null, LANG);
log.debug("Login Servlet Complete, Getting CSRF Token");
if (response.getCookie("token") == null) {
fail("No CSRF Tokena Was Returned from Login Servlet");
}
String csrfToken = response.getCookie("token").getValue();
if (csrfToken.isEmpty()) {
String message = new String("No CSRF token returned from Login Servlet");
log.fatal(message);
fail(message);
} else {
request.setCookies(response.getCookies());
String servletResponse = moduleDoPost(NOSQL_ATTACK, csrfToken, 302);
if (servletResponse.contains("An error was detected")) {
String message = new String("Valid Key Returned Funky Error");
log.fatal(message);
fail(message);
} else if (!servletResponse.contains("Marlo</td><td>Baltimore</td></tr><tr><td>b6c02")) {
String message = new String("Valid Solution did not return Result Key");
log.fatal(message);
fail(message);
}
}
}
}