Thinkphp5代码执行学习
缓存类RCE
- 版本
5.0.0<=ThinkPHP5<=5.0.10
- Tp框架搭建
- 环境搭建
- 测试payload
?username=syst1m%0d%0a@eval($_GET[_]);//
可以看到已经写入了缓存
漏洞分析
- thinkphp/library/think/Cache.php:126
先跟踪一下Cache类的set方法
- thinkphp/library/think/Cache.php:63
跟踪一下init方法,这里的self::$handler默认值是File,为thinkcachedriverFile 类实例
- thinkphp/library/think/Cache.php:36
跟进connect方法
先打印一下options内容
array (size=4) 'type' => string 'File' (length=4) 'path' => string '/Applications/MAMP/htdocs/runtime/cache/' (length=40) 'prefix' => string '' (length=0) 'expire' => int 0
type为file,先赋值一个$name,class为hinkcachedriverFile
- thinkphp/library/think/cache/driver/File.php:137
跟踪一下File类的set方法