From e35c51ba3e94a267212ec98eee34b41a04317678 Mon Sep 17 00:00:00 2001 From: ricekot Date: Tue, 31 May 2022 13:40:15 +0530 Subject: [PATCH] Update js scripts to use passed variables Signed-off-by: ricekot --- CHANGELOG.md | 1 + extender/Simple Reverse Proxy.js | 9 ++++++--- httpfuzzerprocessor/add_msgs_sites_tree.js | 5 ++++- httpsender/Alert on HTTP Response Code Errors.js | 10 ++++++---- httpsender/Alert on Unexpected Content Types.js | 10 ++++++---- standalone/Active scan rule list.js | 8 +++++--- standalone/Juice shop authentication by form.js | 8 +++++--- standalone/Juice shop authentication by google.js | 8 +++++--- standalone/Loop through alerts.js | 6 ++++-- standalone/Loop through history table.js | 8 +++++--- standalone/Run report.js | 4 +++- standalone/SecurityCrawlMazeScore.js | 5 ++++- standalone/Traverse sites tree.js | 6 ++++-- standalone/alertAndPluginDetails.js | 13 +++++++------ standalone/historySourceTagger.js | 7 +++++-- standalone/scan_rule_list.js | 9 +++++---- targeted/ElasticSearchExploit.js | 5 ++++- targeted/Find largest subtree.js | 5 ++++- targeted/Remove 302s.js | 5 ++++- targeted/WordPress User Enumeration.js | 12 +++++++----- targeted/cve-2021-22214.js | 12 +++++++----- targeted/cve-2021-41773-apache-path-trav.js | 12 +++++++----- targeted/dns-email-spoofing.js | 12 +++++++----- 23 files changed, 115 insertions(+), 65 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23382d1c..6af9da42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed - standalone/enableDebugLogging.js > Updated for more recent logging funtionality. +- Update JS scripts to use passed singleton variables (control, model, view) if available (>= ZAP 2.12.0). ## [14] - 2021-11-01 ### Added diff --git a/extender/Simple Reverse Proxy.js b/extender/Simple Reverse Proxy.js index 8ebdb875..cf6866ac 100644 --- a/extender/Simple Reverse Proxy.js +++ b/extender/Simple Reverse Proxy.js @@ -1,6 +1,10 @@ // An extender script that adds a simple reverse proxy. // Requires a ZAP version greater than 2.7.0. +var control, model +if (!control) control = Java.type("org.parosproxy.paros.control.Control").getSingleton() +if (!model) model = Java.type("org.parosproxy.paros.model.Model").getSingleton() + // To where the requests are sent. var remoteAddress = "example.com" var remotePort = 80 @@ -10,12 +14,11 @@ var proxyAddress = "127.0.0.1" var proxyPort = 8081 var ProxyServer = Java.type("org.parosproxy.paros.core.proxy.ProxyServer") -var Model = Java.type("org.parosproxy.paros.model.Model") var ProxyListener = Java.type("org.parosproxy.paros.core.proxy.ProxyListener") var ZapXmlConfiguration = Java.type("org.zaproxy.zap.utils.ZapXmlConfiguration") var URI = Java.type("org.apache.commons.httpclient.URI") -var extLoader = Java.type("org.parosproxy.paros.control.Control").getSingleton().getExtensionLoader() +var extLoader = control.getExtensionLoader() var proxy function install(helper) { @@ -26,7 +29,7 @@ function install(helper) { proxyParam.setBehindNat(false); proxyParam.setRemoveUnsupportedEncodings(true); - proxy.setConnectionParam(Model.getSingleton().getOptionsParam().getConnectionParam()); + proxy.setConnectionParam(model.getOptionsParam().getConnectionParam()); proxy.setEnableApi(false); extLoader.addProxyServer(proxy) diff --git a/httpfuzzerprocessor/add_msgs_sites_tree.js b/httpfuzzerprocessor/add_msgs_sites_tree.js index 156d8688..acb5960c 100644 --- a/httpfuzzerprocessor/add_msgs_sites_tree.js +++ b/httpfuzzerprocessor/add_msgs_sites_tree.js @@ -2,7 +2,10 @@ // with messages sent by the fuzzer (by default the fuzz result/messages // are not shown in the Fuzzer tab). -var session = org.parosproxy.paros.model.Model.getSingleton().getSession(); +var model; +if (!model) model = Java.type("org.parosproxy.paros.model.Model").getSingleton(); + +var session = model.getSession(); function processMessage(utils, message) {} diff --git a/httpsender/Alert on HTTP Response Code Errors.js b/httpsender/Alert on HTTP Response Code Errors.js index d9a06edd..cfe9edcd 100644 --- a/httpsender/Alert on HTTP Response Code Errors.js +++ b/httpsender/Alert on HTTP Response Code Errors.js @@ -2,8 +2,11 @@ // By default it will raise 'Info' level alerts for Client Errors (4xx) (apart from 404s) and 'Low' Level alerts for Server Errors (5xx) // But it can be easily changed. +var control, model +if (!control) control = Java.type("org.parosproxy.paros.control.Control").getSingleton() +if (!model) model = Java.type("org.parosproxy.paros.model.Model").getSingleton() + var Pattern = Java.type("java.util.regex.Pattern") -var model = Java.type("org.parosproxy.paros.model.Model").getSingleton() pluginid = 100000 // https://github.com/zaproxy/zaproxy/blob/main/docs/scanners.md function sendingRequest(msg, initiator, helper) { @@ -15,7 +18,7 @@ function responseReceived(msg, initiator, helper) { // Not of interest. return } - var extensionAlert = org.parosproxy.paros.control.Control.getSingleton().getExtensionLoader().getExtension( + var extensionAlert = control.getExtensionLoader().getExtension( org.zaproxy.zap.extension.alert.ExtensionAlert.NAME) if (extensionAlert != null) { var code = msg.getResponseHeader().getStatusCode() @@ -69,8 +72,7 @@ function responseReceived(msg, initiator, helper) { type = 15 // User - fallback break } - ref = new org.parosproxy.paros.model.HistoryReference( - org.parosproxy.paros.model.Model.getSingleton().getSession(), type, msg) + ref = new org.parosproxy.paros.model.HistoryReference(model.getSession(), type, msg) } alert.setMessage(msg) alert.setUri(msg.getRequestHeader().getURI().toString()) diff --git a/httpsender/Alert on Unexpected Content Types.js b/httpsender/Alert on Unexpected Content Types.js index 6683a9f9..3d5e970a 100644 --- a/httpsender/Alert on Unexpected Content Types.js +++ b/httpsender/Alert on Unexpected Content Types.js @@ -2,12 +2,15 @@ // By default it will raise 'Low' level alerts for content types that are not expected to be returned by APIs. // But it can be easily changed. +var control, model +if (!control) control = Java.type("org.parosproxy.paros.control.Control").getSingleton() +if (!model) model = Java.type("org.parosproxy.paros.model.Model").getSingleton() + var Pattern = Java.type("java.util.regex.Pattern") -var model = Java.type("org.parosproxy.paros.model.Model").getSingleton() var pluginid = 100001 // https://github.com/zaproxy/zaproxy/blob/main/docs/scanners.md -var extensionAlert = org.parosproxy.paros.control.Control.getSingleton().getExtensionLoader().getExtension( +var extensionAlert = control.getExtensionLoader().getExtension( org.zaproxy.zap.extension.alert.ExtensionAlert.NAME) var expectedTypes = [ @@ -85,8 +88,7 @@ function responseReceived(msg, initiator, helper) { type = 15 // User - fallback break } - ref = new org.parosproxy.paros.model.HistoryReference( - org.parosproxy.paros.model.Model.getSingleton().getSession(), type, msg) + ref = new org.parosproxy.paros.model.HistoryReference(model.getSession(), type, msg) } alert.setMessage(msg) alert.setUri(msg.getRequestHeader().getURI().toString()) diff --git a/standalone/Active scan rule list.js b/standalone/Active scan rule list.js index 9609e06c..c88883ba 100644 --- a/standalone/Active scan rule list.js +++ b/standalone/Active scan rule list.js @@ -1,8 +1,10 @@ // This script gives details about all of the active scan rules installed -extAscan = org.parosproxy.paros.control.Control.getSingleton(). - getExtensionLoader().getExtension( - org.zaproxy.zap.extension.ascan.ExtensionActiveScan.NAME); +var control; +if (!control) control = Java.type("org.parosproxy.paros.control.Control").getSingleton(); + +extAscan = control.getExtensionLoader().getExtension( + org.zaproxy.zap.extension.ascan.ExtensionActiveScan.NAME); plugins = extAscan.getPolicyManager().getDefaultScanPolicy().getPluginFactory().getAllPlugin().toArray(); diff --git a/standalone/Juice shop authentication by form.js b/standalone/Juice shop authentication by form.js index f7417681..b309a163 100644 --- a/standalone/Juice shop authentication by form.js +++ b/standalone/Juice shop authentication by form.js @@ -4,15 +4,17 @@ // a user with a name of test@test.com and a password of test123 // You can change any of the variables to match your environment if needed. +var control; +if (!control) control = Java.type("org.parosproxy.paros.control.Control").getSingleton(); + var By = Java.type('org.openqa.selenium.By'); var Thread = Java.type('java.lang.Thread'); var juiceshop = 'http://localhost:3000/'; var username = 'test@test.com'; var password = 'test123'; -var extSel = org.parosproxy.paros.control.Control.getSingleton(). - getExtensionLoader().getExtension( - org.zaproxy.zap.extension.selenium.ExtensionSelenium.class) +var extSel = control.getExtensionLoader().getExtension( + org.zaproxy.zap.extension.selenium.ExtensionSelenium.class) var wd = extSel.getWebDriverProxyingViaZAP(1, "firefox"); wd.get(juiceshop); diff --git a/standalone/Juice shop authentication by google.js b/standalone/Juice shop authentication by google.js index e356dcab..b74426bf 100644 --- a/standalone/Juice shop authentication by google.js +++ b/standalone/Juice shop authentication by google.js @@ -3,15 +3,17 @@ // Juice Shop will need to be accessible via http://localhost:3000/ and you will need to change the // username and password to match a valid Google account. +var control +if (!control) control = Java.type("org.parosproxy.paros.control.Control").getSingleton() + var By = Java.type('org.openqa.selenium.By'); var Thread = Java.type('java.lang.Thread'); var juiceshop = 'http://localhost:3000/'; var username = 'zap.addo.sb@gmail.com'; // Change this to an account you own var password = 'nottherealpassword'; // Change this to the right password for your account -var extSel = org.parosproxy.paros.control.Control.getSingleton(). - getExtensionLoader().getExtension( - org.zaproxy.zap.extension.selenium.ExtensionSelenium.class) +var extSel = control.getExtensionLoader().getExtension( + org.zaproxy.zap.extension.selenium.ExtensionSelenium.class) var wd = extSel.getWebDriverProxyingViaZAP(1, "firefox"); wd.get(juiceshop); diff --git a/standalone/Loop through alerts.js b/standalone/Loop through alerts.js index cf859973..59fa3a7a 100644 --- a/standalone/Loop through alerts.js +++ b/standalone/Loop through alerts.js @@ -2,8 +2,10 @@ // // This is a standalone script which you can run from the Script Console -extAlert = org.parosproxy.paros.control.Control.getSingleton(). - getExtensionLoader().getExtension( +var control +if (!control) control = Java.type("org.parosproxy.paros.control.Control").getSingleton() + +extAlert = control.getExtensionLoader().getExtension( org.zaproxy.zap.extension.alert.ExtensionAlert.NAME) if (extAlert != null) { var Alert = org.parosproxy.paros.core.scanner.Alert diff --git a/standalone/Loop through history table.js b/standalone/Loop through history table.js index 48788409..575824e6 100644 --- a/standalone/Loop through history table.js +++ b/standalone/Loop through history table.js @@ -3,9 +3,11 @@ // Standalone scripts have no template. // They are only evaluated when you run them. -extHist = org.parosproxy.paros.control.Control.getSingleton(). - getExtensionLoader().getExtension( - org.parosproxy.paros.extension.history.ExtensionHistory.NAME) +var control +if (!control) control = Java.type("org.parosproxy.paros.control.Control").getSingleton() + +extHist = control.getExtensionLoader().getExtension( + org.parosproxy.paros.extension.history.ExtensionHistory.NAME) if (extHist != null) { i=1 lastRef=extHist.getLastHistoryId();// Get current max history reference diff --git a/standalone/Run report.js b/standalone/Run report.js index 02f994d4..bb729077 100644 --- a/standalone/Run report.js +++ b/standalone/Run report.js @@ -1,7 +1,9 @@ // Script for generating a ZAP report in xml of html format // set up some useful vars -model = org.parosproxy.paros.model.Model.getSingleton(); + +var model +if (!model) model = Java.type("org.parosproxy.paros.model.Model").getSingleton() rls = new org.parosproxy.paros.extension.report.ReportLastScan(); // code for generating an xml report and storing it in a var diff --git a/standalone/SecurityCrawlMazeScore.js b/standalone/SecurityCrawlMazeScore.js index 1c57afc3..bedf92bd 100644 --- a/standalone/SecurityCrawlMazeScore.js +++ b/standalone/SecurityCrawlMazeScore.js @@ -2,6 +2,9 @@ // // You will need to have run one or both of the ZAP spiders against https://security-crawl-maze.app/ +var model +if (!model) model = Java.type("org.parosproxy.paros.model.Model").getSingleton() + // Expected results sourced from: // https://raw.githubusercontent.com/google/security-crawl-maze/master/blueprints/utils/resources/expected-results.json @@ -106,7 +109,7 @@ var foundAjax = 0; var total = expectedResults.length; var target = 'security-crawl-maze.app'; -var siteTree = org.parosproxy.paros.model.Model.getSingleton().getSession().getSiteTree(); +var siteTree = model.getSession().getSiteTree(); print('Security crawl Maze Results\t\t\tScheme\tStandard\tAjax'); print('----\t\t\t\t---\t---'); diff --git a/standalone/Traverse sites tree.js b/standalone/Traverse sites tree.js index 1f2726e7..ec9cbaad 100644 --- a/standalone/Traverse sites tree.js +++ b/standalone/Traverse sites tree.js @@ -3,6 +3,9 @@ // Standalone scripts have no template. // They are only evaluated when you run them. +var model +if (!model) model = Java.type("org.parosproxy.paros.model.Model").getSingleton() + function listChildren(node, level) { var j; for (j=0;j