thinkphp6 任意文件创建漏洞复现
2020-01-18 10:42:20 Author: mp.weixin.qq.com(查看原文) 阅读量:81 收藏


文章来源: 斗鱼安全应急响应中心

01

背景

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

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

02

定位问题

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

03

原理分析

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

系统定义了接口think\contract\SessionHandlerInterface

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

再看看think\session\driver\File类是怎么实现的。

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

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

04

演示

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

推荐文章++++

*ThinkPHP5.x.x各版本实战环境getshell

*Thinkphp V5.X 远程代码执行漏洞-POC 集合

*thinkphp代码执行getshell


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjE3ODU3MQ==&amp;mid=2650459447&amp;idx=2&amp;sn=58c37d4e1f54213262fb639ec1175433&amp;chksm=83bba8d3b4cc21c53e11d399e370dcae6a378e0866b0df49695a7b86524afda465b9b6a60850#rd
如有侵权请联系:admin#unsafe.sh