前言
影响:thinkphp6.0.0-6.0.1
漏洞成因:在写入sessionid时,对sessionid没有做过滤处理,对session写入的内容也未作过滤处理,在开启session功能的情况下,将会导致文件写入漏洞。
漏洞分析
定位漏洞文件vendor/topthink/framework/src/think/session/Store.php:254
save()
函数用于保存session数据的。
$sessionId
来自于$this->getId()
,然后这里调用了write()
函数
该函数在vendor/topthink/framework/src/think/session/driver/File.php:210
调用writeFile()
,跟进一下。
这里的file_put_content()
将session的数据写入sessionId
指定的文件名
回头看一下,文件名哪里来的
在save()
中一个getId()
,那么就会有一个setId()
调用setId
的地方有vendor/topthink/framework/src/think/middleware/SessionInit.php:46
那么在store.php中$cookieName
为
这样子文件名就是可控的。写入内容,一般网站,都会把用户的信息的,记录在sessIon文件中。实际攻击,我们可以在把用户名写成一句话木马等。