thinkphp 3.2.3的缓存getshell漏洞原理是利用s方法在驱动为file时的文件写入逻辑缺陷,攻击者通过构造特定的session id或cookie值,将恶意代码写入服务器上的缓存文件中,进而实现远程代码执行。具体做法是:确保应用开启了session且使用file驱动,然后向服务端发送包含php代码的请求(通常利用session id),当thinkphp尝试序列化并保存session数据到文件时,由于未对内容进行严格过滤,导致恶意代码被直接写入`.php`后缀的缓存文件中,最终通过访问该文件触发执行。

为什么Session ID能变成Shell文件?
这是因为ThinkPHP 3.2.3的S方法在处理File驱动时,直接将序列化的数据写入以缓存ID命名的文件中,而Session ID通常由用户可控的Cookie传递,若未正确清理或转义,其中的PHP标签会被原样写入。

哪些配置条件会触发此漏洞?
必须同时满足三个条件:一是应用启用了Session功能;二是缓存驱动S()配置为File类型;三是攻击者能够控制Session ID的内容(如通过XSS或注入修改Cookie)。在这些条件下,恶意Payload即可持久化存储于Runtime/Temp目录下。
立即学习“PHP免费学习笔记(深入)”;
如何验证特定输入下的实际写入行为?
通过构造一个包含的Session ID请求,观察Runtime/Temp/sess_文件名是否生成且内容是否为Payload,从而确认漏洞存在。



















