如何复现ThinkPHP6中任意文件创建的漏洞?
- 内容介绍
- 文章标签
- 相关推荐
本文共计173个文字,预计阅读时间需要1分钟。
03+ 原理解析
先抛开上面的问题,我们看一下thinkphp是如何存储session的。
系统定义了接口thinkcontractSessionHandlerInterface
SessionHandlerInterface::write方法在本地化会话数据的时候执行,系统会在每次请求结束的时候自动执行。
再看看thinksessiondriverFile类是怎么实现的。
先通过getFileName根据$sessID生成文件名,再writeFile写入文件。
跟进getFileName,直接将传入的$sessID拼接后作为文件名。由于$sessID可控,所以文件名可控。
04 演示
分析到这里,整个漏洞流程基本上已经很清晰了。下面给出本地的演示结果。
php中文网,大量的免费thinkphp入门教程,欢迎在线学习!
本文共计173个文字,预计阅读时间需要1分钟。
03+ 原理解析
先抛开上面的问题,我们看一下thinkphp是如何存储session的。
系统定义了接口thinkcontractSessionHandlerInterface
SessionHandlerInterface::write方法在本地化会话数据的时候执行,系统会在每次请求结束的时候自动执行。
再看看thinksessiondriverFile类是怎么实现的。
先通过getFileName根据$sessID生成文件名,再writeFile写入文件。
跟进getFileName,直接将传入的$sessID拼接后作为文件名。由于$sessID可控,所以文件名可控。
04 演示
分析到这里,整个漏洞流程基本上已经很清晰了。下面给出本地的演示结果。
php中文网,大量的免费thinkphp入门教程,欢迎在线学习!

