Thinkphp5缓存漏洞代码审计
漏洞范围
Version <=5.0 <=5.0.1
Poc

http://127.0.0.1/thinkphp/tp5/?s=index/index/cache
postname=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方法写入缓存
修复方法

