From 413c8af701d43b72405d891750839af538ede8cd Mon Sep 17 00:00:00 2001 From: zluudg <8853567-zluudg@users.noreply.gitlab.com> Date: Tue, 21 Mar 2023 12:21:44 +0100 Subject: [PATCH 1/6] Ignore a bunch of autogenrated files and folders --- .gitignore | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a7d8ad2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +# Folders we don't want to track +logs/ +__pycache__/ +venv/ + +# Files that BlackWidow creates +command.txt +queue.txt +run.flag +attack_lookup_table.txt +form_xss.txt +graph_mathematica.txt +successful_xss.txt From a6fb989f095eecc5e380b857a4c8146d57dff075 Mon Sep 17 00:00:00 2001 From: zluudg <8853567-zluudg@users.noreply.gitlab.com> Date: Tue, 21 Mar 2023 12:22:19 +0100 Subject: [PATCH 2/6] Compat with selenium 4.8 --- Classes.py | 19 ++++++++++--------- Functions.py | 33 +++++++++++++++++---------------- extractors/Events.py | 11 ++++++----- extractors/Forms.py | 15 ++++++++------- extractors/Iframes.py | 5 +++-- extractors/Ui_forms.py | 13 +++++++------ extractors/Urls.py | 7 ++++--- 7 files changed, 55 insertions(+), 48 deletions(-) diff --git a/Classes.py b/Classes.py index 0db0c8c..717787d 100644 --- a/Classes.py +++ b/Classes.py @@ -9,6 +9,7 @@ WebDriverException, InvalidElementStateException ) +from selenium.webdriver.common.by import By from urllib.parse import urlparse, urljoin import json @@ -657,18 +658,18 @@ def attack_event(self, driver, vector_edge): try: if event.event == "oninput" or event.event == "input": - el = driver.find_element_by_xpath(event.addr) + el = driver.find_element(By.XPATH, event.addr) el.clear() el.send_keys(payload) el.send_keys(Keys.RETURN) - logging.info("oninput %s" % driver.find_element_by_xpath(event.addr) ) + logging.info("oninput %s" % driver.find_element(By.XPATH, event.addr) ) if event.event == "oncompositionstart" or event.event == "compositionstart": - el = driver.find_element_by_xpath(event.addr) + el = driver.find_element(By.XPATH, event.addr) el.click() el.clear() el.send_keys(payload) el.send_keys(Keys.RETURN) - logging.info("oncompositionstart %s" % driver.find_element_by_xpath(event.addr) ) + logging.info("oncompositionstart %s" % driver.find_element(By.XPATH, event.addr) ) else: logging.error("Could not attack event.event %s" % event.event) @@ -828,7 +829,7 @@ def inspect_attack(self, vector_edge): successful_xss = set() # attribute injections - attribute_injects = self.driver.find_elements_by_xpath("//*[@jaekpot-attribute]") + attribute_injects = self.driver.find_elements(By.XPATH, "//*[@jaekpot-attribute]") for attribute in attribute_injects: lookup_id = attribute.get_attribute("jaekpot-attribute") successful_xss.add(lookup_id) @@ -942,7 +943,7 @@ def use_tracker(self, tracker, vector_with_payload): def inspect_tracker(self, vector_edge): try: - body_text = self.driver.find_element_by_tag_name("body").text + body_text = self.driver.find_element(By.TAG_NAME, "body").text for tracker in self.io_graph: if tracker in body_text: @@ -1377,7 +1378,7 @@ def rec_crawl(self): time.sleep(1) except UnexpectedAlertPresentException: logging.warning("Alert detected") - alert = driver.switch_to_alert() + alert = driver.switch_to.alert alert.dismiss() # Check if double check is needed... @@ -1431,7 +1432,7 @@ def rec_crawl(self): wait_json = driver.execute_script("return JSON.stringify(need_to_wait)") except UnexpectedAlertPresentException: logging.warning("Alert detected") - alert = driver.switch_to_alert() + alert = driver.switch_to.alert alert.dismiss() wait_json = driver.execute_script("return JSON.stringify(need_to_wait)") wait = json.loads(wait_json) @@ -1501,7 +1502,7 @@ def rec_crawl(self): # Try to clean up alerts try: - alert = driver.switch_to_alert() + alert = driver.switch_to.alert alert.dismiss() except NoAlertPresentException: pass diff --git a/Functions.py b/Functions.py index 192a477..8c325b5 100644 --- a/Functions.py +++ b/Functions.py @@ -7,6 +7,7 @@ from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys from selenium.common.exceptions import StaleElementReferenceException, TimeoutException, UnexpectedAlertPresentException, NoSuchFrameException, NoAlertPresentException, ElementNotVisibleException, InvalidElementStateException +from selenium.webdriver.common.by import By from urllib.parse import urlparse, urljoin import json import pprint @@ -59,7 +60,7 @@ def xpath_row_to_cell(addr): def remove_alerts(driver): # Try to clean up alerts try: - alert = driver.switch_to_alert() + alert = driver.switch_to.alert alert.dismiss() except NoAlertPresentException: pass @@ -356,13 +357,13 @@ def execute_event(driver, do): if el.tag_name == "select": # If need to change a select we try the different # options - opts = el.find_elements_by_tag_name("option") + opts = el.find_elements(By.TAG_NAME, "option") for opt in opts: try: opt.click() except UnexpectedAlertPresentException: print("Alert detected") - alert = driver.switch_to_alert() + alert = driver.switch_to.alert alert.dismiss() else: # If ot a - selects = el.find_elements_by_tag_name("select") + selects = el.find_elements(By.TAG_NAME, "select") for select in selects: form_select = Classes.Form.SelectElement( "select", select.get_attribute("name") ) if form_select in target_form.inputs: @@ -603,7 +604,7 @@ def form_fill(driver, target_form): #