thinkphp6 任意文件创建漏洞复现

01 背景

 近日奇安信发布了 ThinkPHP 6.0 “任意”文件创建漏洞安全风险通告,对此,DYSRC第一时间对该漏洞进行了分析,并成功复现该漏洞。

漏洞影响范围:top-think/framework 6.x < 6.0.2

02 定位问题

根据任意文件创建以及结合近期的commit历史,可以推测出 1bbe75019 为此次问题的补丁。可以看到在补丁中限制了sessionid只能由字母和数字组成,由此看来问题更加明显。

立即学习“PHP免费学习笔记(深入)”;

d1ee7af3c3bdb48a34ead0b8cfd5554.png

03 原理分析

先抛开上面的问题,我们看一下thinkphp是如何存储session的。

系统定义了接口thinkcontractSessionHandlerInterface

647ba33f997cbb7dd1eae73ab597673.png

SessionHandlerInterface::write方法在本地化会话数据的时候执行,系统会在每次请求结束的时候自动执行。

再看看thinksessiondriverFile类是怎么实现的。

c38f1df230cafda7f37f443f16fe85a.png

先通过getFileName根据$sessID生成文件名,再writeFile写入文件。

跟进getFileName,直接将传入的$sessID拼接后作为文件名。由于$sessID可控,所以文件名可控。

c30877400522b21003aa0455dd25f3b.png

04 演示

分析到这里,整个漏洞流程基本上已经很清晰了。下面给出本地的演示结果。

430ede652ea5c8b9c6ef08644198cf7.png

创想鸟,大量的免费thinkphp入门教程,欢迎在线学习!

以上就是thinkphp6 任意文件创建漏洞复现的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/98274.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Unknown column type ‘column_type’ in column ‘column_name’ – 如何解决MySQL报错:列中的未知列类型
上一篇 2025年11月20日 09:51:24
如何用免费工具做团队PPT_免费团队协作PPT的制作指南
下一篇 2025年11月20日 09:53:26

相关推荐

发表回复

登录后才能评论
关注微信