thinkphp6.0.0文件写入漏洞

前言

影响:thinkphp6.0.0-6.0.1

漏洞成因:在写入sessionid时,对sessionid没有做过滤处理,对session写入的内容也未作过滤处理,在开启session功能的情况下,将会导致文件写入漏洞。

漏洞分析

定位漏洞文件vendor/topthink/framework/src/think/session/Store.php:254

image-20200116151346725

save()函数用于保存session数据的。

$sessionId来自于$this->getId(),然后这里调用了write()函数

该函数在vendor/topthink/framework/src/think/session/driver/File.php:210

image-20200116152030099

调用writeFile(),跟进一下。

这里的file_put_content()将session的数据写入sessionId指定的文件名

image-20200116152317516

回头看一下,文件名哪里来的

save()中一个getId(),那么就会有一个setId()

image-20200116152747140

调用setId的地方有vendor/topthink/framework/src/think/middleware/SessionInit.php:46

image-20200116153548042

那么在store.php中$cookieName

image-20200116153859756

这样子文件名就是可控的。写入内容,一般网站,都会把用户的信息的,记录在sessIon文件中。实际攻击,我们可以在把用户名写成一句话木马等。

image-20200116154137395

POC

image-20200116161317856

Author: 我是小吴啦
Link: http://yoursite.com/2020/01/21/thinkphp6-0-0%E6%96%87%E4%BB%B6%E5%86%99%E5%85%A5%E6%BC%8F%E6%B4%9E/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.