• 技术文章 >php框架 >ThinkPHP

    thinkphp6 任意文件创建漏洞复现

    藏色散人藏色散人2020-01-20 14:07:46转载3185
    01 背景

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

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

    02 定位问题

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

    d1ee7af3c3bdb48a34ead0b8cfd5554.png

    03 原理分析

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

    系统定义了接口thinkcontractSessionHandlerInterface

    647ba33f997cbb7dd1eae73ab597673.png

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

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

    c38f1df230cafda7f37f443f16fe85a.png

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

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

    c30877400522b21003aa0455dd25f3b.png

    04 演示

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

    430ede652ea5c8b9c6ef08644198cf7.png

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

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

    声明:本文转载于:斗鱼安全应急响应中心,如有侵犯,请联系admin@php.cn删除
    专题推荐:thinkphp6
    上一篇:使用thinkphp5对excel文件进行导出 下一篇:ThinkPHP6 任意文件操作漏洞分析
    大前端线上培训班

    相关文章推荐

    • ThinkPHP6.0版本的日志变化• ThinkPHP6.0:事件系统以及查询事件、模型事件的使用• ThinkPHP6.0:Session和Cookie机制的变化• 今日新课推荐:《Thinkphp6.0正式版视频教程》

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网