forked from zaproxy/community-scripts
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathkeep-cookies-going.js
More file actions
61 lines (48 loc) · 1.73 KB
/
Copy pathkeep-cookies-going.js
File metadata and controls
61 lines (48 loc) · 1.73 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
/*exported sendingRequest, responseReceived*/
// This script makes sure requests are always made with the auth cookies
// Logging with the script name is super helpful!
function logger() {
print("[" + this["zap.script.name"] + "] " + arguments[0]);
}
var ScriptVars = Java.type("org.zaproxy.zap.extension.script.ScriptVars");
var HtmlParameter = Java.type("org.parosproxy.paros.network.HtmlParameter");
var HtmlParameterType = Java.type(
"org.parosproxy.paros.network.HtmlParameter.Type"
);
var COOKIE_TYPE = HtmlParameterType.cookie;
function sendingRequest(msg, initiator, helper) {
var headers = msg.getRequestHeader();
var cookies = headers.getCookieParams();
// @todo prevent re-auth
var key = ScriptVars.getGlobalVar("sesh.key");
var secret = ScriptVars.getGlobalVar("sesh.secret");
var cookieParam = new HtmlParameter(COOKIE_TYPE, key, secret);
if (!cookies.isEmpty()) {
var existing = cookies.first();
cookies.remove(existing);
}
cookies.add(cookieParam);
msg.getRequestHeader().setCookieParams(cookies);
return true;
}
// If a cookie was set, capture it
function responseReceived(msg, initiator, helper) {
var resheaders = msg.getResponseHeader();
var setCookie = resheaders.getHeader("Set-Cookie");
if (setCookie === null) {
return;
}
// @todo there can be multiple set cookies?
var cookie = setCookie.toString();
var sessionInfo = cookie.split(";")[0].split("=");
var key = sessionInfo[0];
var secret = sessionInfo[1];
var isValidSecret = secret && secret.length > 1;
if (!isValidSecret) {
return;
}
logger("Captured set cookie of " + key + " " + secret);
ScriptVars.setGlobalVar("sesh.key", key);
ScriptVars.setGlobalVar("sesh.secret", secret);
// @todo set active session
}