本仓库包含针对 WordPress 插件 "PPOM for WooCommerce" 中未认证的基于时间的盲 SQL 注入漏洞的概念验证(PoC),该漏洞影响版本 33.0.15 及更早版本。
该漏洞的存在是因为插件在将用户提供的输入用于 SQL 查询之前未能正确清理。具体来说,classes/plugin.class.php 中的 get_product_meta() 函数直接将 $meta_id 参数拼接进 SQL 查询,而没有使用预处理语句。
易受攻击的代码 (classes/plugin.class.php):
function get_product_meta( $meta_id ) {
// ...
global $wpdb;
$qry = 'SELECT * FROM ' . $wpdb->prefix . PPOM_TABLE_META . " WHERE productmeta_id = $meta_id";
$res = $wpdb->get_row( $qry );
return $res;
}
未认证的攻击者可以通过构造恶意载荷,并在将产品添加到购物车时将其注入 ppom[fields][id] 参数来利用此漏洞。这使攻击者能够执行任意 SQL 命令,例如时延函数(SLEEP()),从而确认漏洞存在,并可能逐字符地窃取数据库中的敏感信息。
当插件设置中的 "启用旧版价格计算" 选项处于激活状态时,漏洞会被触发,因为这会强制应用程序在购物车操作期间使用易受攻击的代码路径。
└── cve-2025-11391/
├── exploit.py # The Python Proof of Concept script.
└── woocommerce-product-addon/ # Vulnerable version of the plugin (v33.0.15).
requests 库的 Python 3.x(pip install requests)。/htdocs/wp4hacking/)。woocommerce-product-addon/ 目录中的 .zip 文件,安装本仓库提供的易受攻击版本的 woocommerce-product-addon(v33.0.15)。sql_injection)。提供的 exploit.py 脚本通过注入 SLEEP() 命令并测量服务器响应时间来确认漏洞。
打开 exploit.py 文件并配置以下变量:
PRODUCT_URL:你创建的易受攻击产品页面的完整 URL。add_to_cart_data['add-to-cart']:易受攻击产品的 ID。在终端中运行脚本:
python exploit.py
如果目标易受攻击,服务器响应时间将超过 SLEEP() 的时长,导致脚本超时。脚本会将此超时正确解释为利用成功。
Attempting SQL Injection PoC (One-Step Method)...
Make sure 'Enable Legacy Price Calculations' is active.
[*] Sending SQL Injection payload...
Request timed out after 10.00 seconds.
[+] SUCCESS! 'Read timed out' occurred because the SLEEP(7) payload was executed.
The site is vulnerable to Time-Based Blind SQL Injection.
$wpdb->prepare() 来正确清理输入,从而防止 SQL 注入。修复后的代码 (classes/plugin.class.php):
$table = $wpdb->prefix . PPOM_TABLE_META;
$res = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $table WHERE productmeta_id = %d", $meta_id ) );
本 PoC 仅用于教育和研究目的。请勿在非您拥有或未经明确授权测试的系统上使用。作者不对因使用此脚本而导致的任何误用或损坏负责。