类别:ThinkPHP / 日期:2020-01-21 / 浏览:328 / 评论:0

ThinkPHP6 任意文件操作漏洞分析_ThinkPHP教程

2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞。该漏洞允许攻击者在目标环境启用session的条件下创建任意文件以及删除任意文件,在特定情况下还可以getshell。

01 背景

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

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

02 定位问题

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

03 原理分析

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

系统定义了接口thinkcontractSessionHandlerInterface

使用thinkphp5对excel文件进行导出_ThinkPHP教程

有些人觉得excel导出很复杂,但其实很简单,两步操作即可完成想要的数据导出。第一步,将excel配置到thinkphp5框架的惯例配置common中;第二步,编写控制器代码。

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

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

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

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

04 演示

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

ki4网,大量的免费thinkphp入门教程,欢迎在线学习!

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

今日新课推荐:《Thinkphp6.0正式版视频教程》_ThinkPHP教程

php中文网在2020年再次重新Thinkphp6.0录制课程,帮助同学们快速入门!欢迎学习!

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章