thinkphp多语言RCE原理分析

💡 原文中文,约4900字,阅读约需12分钟。
📝

内容提要

ThinkPHP多语言RCE漏洞复现,通过传入参数实现目录穿越和文件包含,利用pearcmd.php文件包含漏洞进行RCE攻击。漏洞影响范围为ThinkPHP v6.0.1~v6.0.13和v5.0.x、v5.1.x版本。漏洞利用条件包括服务器安装pear、register_argc_argv设置为On以及存在文件包含漏洞。建议及时升级修复漏洞。

🔎

延伸解读

漏洞利用的依赖条件

该漏洞的利用并非无条件,需要同时满足三个条件:服务器安装pear(存在pearcmd.php)、php.ini中register_argc_argv设置为On、以及存在文件包含且无open_basedir限制。这些条件缺一不可,因此实际环境中漏洞的可利用性取决于服务器配置。攻击者需知晓pearcmd.php的路径,通常为/usr/local/lib/php/pearcmd.php。

攻击链的构成与触发点

攻击链始于多语言功能开启后,LoadLangPack中间件调用Lang类的detect方法获取语言参数,该参数可通过GET、Cookie或Header传入。随后load方法加载语言文件,parse方法中的include语句导致文件包含。通过目录穿越(如../../../)可绕过路径限制,包含任意PHP文件。最终利用pearcmd.php的config-create功能写入webshell,实现RCE。

影响范围与修复建议

漏洞影响ThinkPHP v6.0.1至v6.0.13,以及v5.0.x和v5.1.x版本。若使用这些版本且开启了多语言功能,应尽快升级到安全版本。同时,检查服务器是否满足漏洞利用条件,如非必要可关闭register_argc_argv或移除pear工具,以降低风险。

❓

Q&A

ThinkPHP多语言RCE漏洞的影响范围是什么?

漏洞影响范围为ThinkPHP v6.0.1~v6.0.13和v5.0.x、v5.1.x版本。

如何利用ThinkPHP多语言RCE漏洞进行攻击?

通过传入参数实现目录穿越和文件包含,利用pearcmd.php文件包含漏洞进行RCE攻击。

利用ThinkPHP多语言RCE漏洞需要满足哪些条件?

需要服务器安装pear,register_argc_argv设置为On,并且存在文件包含漏洞。

在ThinkPHP中,哪个文件的函数是漏洞触发点?

Lang.php中的parse函数和load函数是漏洞触发点。

如何准备环境以复现ThinkPHP多语言RCE漏洞?

需要清理Composer缓存,删除vendor目录和composer.lock文件,并重新安装依赖。

如何构造参数以利用ThinkPHP的文件包含漏洞?

需要利用../../../目录穿越绕过文件包含限制,并构造合适的参数。

🏷️

标签

➡️

继续阅读