ThinkPHP漏洞分析与利用

有没有人在啊,想请教下,ThinkPHP漏洞分析与利用
最新回答
爱在千年梦

2024-10-23 09:51:58

ThinkPHP是一个快速、兼容且简单的轻量级国产PHP开发框架,遵循Apache 2开源协议发布,采用面向对象的开发结构与MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。它支持Windows/Unix/Linux等服务器环境,正式版需PHP 5.0以上版本,支持多种数据库包括MySql、PgSQL、Sqlite以及PDO扩展。

ThinkPHP发展至今,核心版本包括ThinkPHP 2系列、ThinkPHP 3系列、ThinkPHP 5系列及ThinkPHP 6系列,各个系列在代码实现和功能方面存在较大差异。其中,ThinkPHP 2及3系列已停止维护,ThinkPHP 5系列是当前使用最广泛的版本,ThinkPHP 3系列也拥有大量历史用户。版本细分如下图所示:

在收集和整理的高危漏洞中,可以得出以下列表。从数据来看,ThinkPHP 3系列漏洞多于2016/2017年被发现,而ThinkPHP 5系列漏洞则基本在2017/2018年被发现,从2020年开始,ThinkPHP 6系列的漏洞也开始出现。这些漏洞主要存在于框架中的函数,若在二次开发中使用了这些函数,即可利用。这些函数风险点大部分可能导致SQL注入漏洞。因此,在利用ThinkPHP进行Web开发时,开发者应关注框架的历史风险点,尽量避免使用这些函数或版本,以确保Web应用的安全性。

基于漏洞分析,可总结出几种直接利用ThinkPHP框架漏洞的利用链。其中,ThinkPHP 2.x/3.0版本存在GetShell漏洞,而ThinkPHP 5.0、5.1版本也存在类似漏洞。

深入分析高危漏洞,ThinkPHP 2.x/3.0存在远程代码执行漏洞。该漏洞源自Dispatcher.class.php中的res参数,使用了preg_replace的/e危险参数,导致preg_replace第二个参数被当作PHP代码执行,攻击者可通过构造恶意URL执行任意PHP代码。

ThinkPHP 5.x版本在2018年12月发布安全更新,修复了一处可导致远程代码执行的严重漏洞。此次漏洞由框架代码问题引起,覆盖面广,且可直接远程执行任何代码和命令。电子商务、金融服务和互联网游戏行业等网站使用该框架较多,需要特别关注。

2019年1月,某安全团队发布ThinkPHP 5.0远程代码执行漏洞文档。该漏洞与2018年的漏洞原理相似,攻击者在一定条件下可获取目标服务器的最高权限。研究发现,ThinkPHP 5.1.x版本也存在该漏洞,满足一定条件时,攻击者可利用漏洞执行任意代码。

漏洞关键点在于thinkphp/library/think/Request.php文件中的method()函数。攻击者可通过控制外部传入的_method参数动态调用Request类中的任意方法,进而实现任意代码执行。通过构造请求覆盖Request类属性,最终实现变量覆盖后的代码执行。