From d813942c5555134c3f5fe22f70c7d22c17cc69bd Mon Sep 17 00:00:00 2001 From: ekultek Date: Mon, 2 Oct 2017 12:10:34 -0500 Subject: [PATCH] created three new tamper scripts and added warnings to other ones --- lib/attacks/xss_scan/__init__.py | 63 +++++++++++++------------------- lib/settings.py | 2 +- 2 files changed, 27 insertions(+), 38 deletions(-) diff --git a/lib/attacks/xss_scan/__init__.py b/lib/attacks/xss_scan/__init__.py index d3a47f1..d9bd4e1 100644 --- a/lib/attacks/xss_scan/__init__.py +++ b/lib/attacks/xss_scan/__init__.py @@ -5,16 +5,11 @@ try: except ImportError: import urllib.parse as urlparse # python 3 import tempfile +import importlib import requests from lib.errors import InvalidTamperProvided -from lib.attacks.tamper_scripts import ( - unicode_encode, - base64_encode, - hex_encode, - url_encode -) from lib.settings import ( logger, set_color, @@ -22,23 +17,11 @@ from lib.settings import ( proxy_string_to_dict, DBMS_ERRORS, create_tree, - prompt + prompt, + shutdown ) -def __tamper_warnings(script): - warn_msg = "" - if script == "hex": - warn_msg += "hex tamper script may increase risk of false positives..." - elif script == " base64": - warn_msg += "base64 tamper script may increase risk of not finding a vulnerability..." - else: - pass - logger.warning(set_color( - warn_msg, level=30 - )) - - def list_tamper_scripts(path="{}/lib/attacks/tamper_scripts"): retval = set() exclude = ["__init__.py", ".pyc"] @@ -50,23 +33,14 @@ def list_tamper_scripts(path="{}/lib/attacks/tamper_scripts"): return retval -def __tamper_payload(payload, tamper_type): +def __tamper_payload(payload, tamper_type, warning=True, **kwargs): acceptable = list_tamper_scripts() + tamper_name = "lib.attacks.tamper_scripts.{}_encode" if tamper_type in acceptable: - if tamper_type == "unicode": - return unicode_encode.tamper(payload) - elif tamper_type == "hex": - return hex_encode.tamper(payload) - elif tamper_type == "url": - return url_encode.tamper(payload) - else: - return base64_encode.tamper(payload) + tamper_script = importlib.import_module(tamper_name.format(tamper_type)) + return tamper_script.tamper(payload, warning=warning) else: - raise InvalidTamperProvided( - "sent tamper type '{}' is not a valid type, acceptable are {}...".format( - tamper_type, ", ".join(list(acceptable)) - ) - ) + raise InvalidTamperProvided() def __load_payloads(filename="{}/etc/xss_payloads.txt"): @@ -77,9 +51,20 @@ def create_urls(url, payload_list, tamper=None): tf = tempfile.NamedTemporaryFile(delete=False) tf_name = tf.name with tf as tmp: - for payload in payload_list: + for i, payload in enumerate(payload_list): if tamper: - payload = __tamper_payload(payload, tamper_type=tamper) + try: + if i < 1: + payload = __tamper_payload(payload, tamper_type=tamper, warning=True) + else: + payload = __tamper_payload(payload, tamper_type=tamper, warning=False) + except InvalidTamperProvided: + logger.error(set_color( + "you provided and invalid tamper script, acceptable tamper scripts are: {}...".format( + " | ".join(list_tamper_scripts()), level=40 + ) + )) + shutdown() loaded_url = "{}{}\n".format(url.strip(), payload.strip()) tmp.write(loaded_url) return tf_name @@ -114,7 +99,6 @@ def main_xss(start_url, verbose=False, proxy=None, agent=None, tamper=None): logger.info(set_color( "tampering payloads with '{}'...".format(tamper) )) - __tamper_warnings(tamper) find_xss_script(start_url) logger.info(set_color( "loading payloads..." @@ -162,6 +146,11 @@ def main_xss(start_url, verbose=False, proxy=None, agent=None, tamper=None): url, result[1] ), level=40 )) + else: + if verbose: + logger.error(set_color( + "SQL error discovered...", level=40 + )) else: if verbose: logger.debug(set_color( diff --git a/lib/settings.py b/lib/settings.py index ceadef0..e3f6237 100644 --- a/lib/settings.py +++ b/lib/settings.py @@ -22,7 +22,7 @@ except NameError: # clone link CLONE = "https://github.com/ekultek/zeus-scanner.git" # current version -VERSION = "1.0.25.fe911" +VERSION = "1.0.26" # colors to output depending on the version VERSION_TYPE_COLORS = {"dev": 33, "stable": 92, "other": 30} # version string formatting