Thinkphp5缓存漏洞代码审计

漏洞范围

Version <=5.0 <=5.0.1

Poc


http://127.0.0.1/thinkphp/tp5/?s=index/index/cache
post
name=test%0d%0aecho%27Search?=Null%27%3b%2f%2f

漏洞所需条件

  • 使用TP的Cache类缓存数据
  • 缓存内容可控

首先跟进一下Cache类的set静态方法

调用init方法初始化缓存

self::$handler为null并且options为空数组所以此时代码会走到72行的else调用connect方法,connect方法的参数为Config类的get方法返回的一个数组,数组内容如下


代码分析在图内(PS:39行的if序列化的是上面返回的数组,不是空数组,手误了:)

再回头看Cache类的set方法最后一句代码
return self::$handler->set($name, $value, $expire);
调用File类的set方法写入缓存

修复方法